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



在一个度量(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 Cannot find table fxRates

中引发了错误

也看来Intellisense无法正常工作。但是以下每个都可以工作。但是这种预期的行为

没有表格前缀:

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_DATE]最终源自factMarketDataExchangeRates,因此使用该表前缀确实是引擎盖下发生的事情,但是您可以使用该表被抽象出来的其他版本,并且不会混乱您的代码。

重要的是,在这种情况下,fxRates变量实际上不是一个表,而是更明确地编写代码的语义技巧。

相关内容

最新更新