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,而是一种使代码更易读的语义技巧。
在一个度量中 (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,而是一种使代码更易读的语义技巧。