Ssas DAX-SUMX:将筛选后的表存储在VAR中,并稍后在表达式中引用其列

Ssas DAX-SUMX:将筛选后的表存储在VAR中,并稍后在表达式中引用其列,ssas,powerbi,dax,Ssas,Powerbi,Dax,在度量(SUMX)中,我过滤一个表并将其存储在一个变量中 var currency = factFx[ALPHABETIC_CURRENCY_1] var fxRates = FILTER( factMarketDataExchangeRates; factMarketDataExchangeRates[FX_CURRENCY] = currency ) 然后我需要进行计算,包括进一步过滤fxRates var exchangeRateOnTradeDate = CALCUL

在度量(SUMX)中,我过滤一个表并将其存储在一个变量中

var currency = factFx[ALPHABETIC_CURRENCY_1]

var fxRates = FILTER(
    factMarketDataExchangeRates;
    factMarketDataExchangeRates[FX_CURRENCY] = currency
)
然后我需要进行计算,包括进一步过滤
fxRates

var exchangeRateOnTradeDate = CALCULATE(
    [Measure];
    FILTER( 
        fxRates;
        fxRates[CURVE_DATE] = tradeDate
    )
)
这会在SSDT
找不到表fxRates

var exchangeRateOnTradeDate = CALCULATE(
    [Measure];
    FILTER( 
        fxRates;
        fxRates[CURVE_DATE] = tradeDate
    )
)
此外,智能感知似乎不起作用。但以下每一项都是有效的。但这是预期的行为吗

不带表前缀:

var exchangeRateOnTradeDate = CALCULATE(
    [Measure];
    FILTER( 
        fxRates;
        [CURVE_DATE] = tradeDate
    )
)
使用基础表的前缀:

var exchangeRateOnTradeDate = CALCULATE(
    [Measure];
    FILTER( 
        fxRates;
        factMarketDataExchangeRates[CURVE_DATE] = tradeDate
    )
)

是的,这是预期的行为。您只能对数据模型中的表使用
table[COLUMN]
语法

这两个工作版本相当于在
fxRates
的定义中替换

var currency = factFx[ALPHABETIC_CURRENCY_1]

var exchangeRateOnTradeDate =
CALCULATE (
    [Measure];
    FILTER (
        FILTER (
            factMarketDataExchangeRates;
            factMarketDataExchangeRates[FX_CURRENCY] = currency
        );
        factMarketDataExchangeRates[CURVE_DATE] = tradeDate
    )
)
由于
[CURVE\u DATE]
最终源于
FactMarketDataExchangeS
,因此使用该表前缀实际上是在幕后发生的事情,但您可以使用另一个版本,在该版本中,该表被抽象掉,不会使代码混乱

重要的是要记住,
fxRates
变量在本例中实际上不是一个表,而是一个语义技巧,可以更清晰地编写代码