DAX SUMX: сохранение отфильтрованной таблицы в VAR и последующая ссылка на ее столбцы в выражении - PullRequest
3 голосов
/ 15 марта 2019

В мере (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
    )
)

1 Ответ

2 голосов
/ 15 марта 2019

Да, это ожидаемое поведение.Вы можете использовать только синтаксис 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 на самом деле не таблица, а скорее семантическая уловка для более четкого написания кода.

...