DAX SUMX:在 VAR 中存储过滤后的 table 并稍后在表达式中引用其列

DAX SUMX: Storing a filtered table in a VAR and reference its columns later on in the expression

在一个度量中 (SUMX) 我正在过滤一个 table 并将其存储在一个变量中。

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 中引发错误 Cannot find table fxRates

此外,智能感知似乎无法正常工作。但是以下每一项都有效。 但这是预期的行为吗

没有table前缀:

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

具有底层 table 的前缀:

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

是的,这是预期的行为。您只能在数据模型中对 table 使用 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_DATE] 最终派生自 factMarketDataExchangeRates,因此使用 table 前缀确实是幕后发生的事情,但您可以使用 [=24] 的其他版本=] 被抽象出来,不会使您的代码混乱。

要记住的重要一点是,在这种情况下,fxRates 变量实际上并不是 table,而是一种使代码更易读的语义技​​巧。