Как игнорировать отношения в табличной модели

У меня проблема, которую я не могу объяснить. Рассмотрим следующую меру DAX:

Actual Spend :=
CALCULATE (
    SUM ( 'Finance Actuals'[Amount] ),
    FILTER (
        ALLSELECTED ( 'Finance Period' ),
        'Finance Period'[Fiscal_Date_Key] <= MAX ( 'Finance Period'[Fiscal_Date_Key] )
    ),
    FILTER (
        'Finance Actuals',
        'Finance Actuals'[Calculated_Date_Key]
            <= MAX ( 'Finance Forecasting Period'[Calculated_Date_Key] )
    ),
    ALL ( 'Finance Calculated Data Snapshot Date' )
)

Между «Фактическими финансовыми показателями» и «Датой моментального снимка расчетных финансовых данных» существует связь. Для этой меры я хочу проигнорировать эту взаимосвязь и использовать заранее определенную дату, выбранную в другой таблице («Период прогнозирования финансов»).

Все работает, за исключением того, что на показатель по-прежнему влияют изменения в «Дата моментального снимка расчетных данных по финансам». Я ожидал, что добавление ВСЕ («Дата моментального снимка расчетных финансовых данных») части меры должно привести к тому, что изменения в этой таблице будут проигнорированы.

Что я сделал не так?


person Stuart Middleton    schedule 21.11.2017    source источник


Ответы (2)


Функция CALCULATE будет применять свои фильтры, используя логику AND. Я предполагаю, что происходит то, что эта связь используется внутри функции FILTER на 'Finance Actuals', и добавление функции ALL ничего не меняет.

Попробуйте переместить функцию ALL во вторую функцию FILTER, поскольку именно там ее нужно применить.

person Alexis Olson    schedule 21.11.2017

Спасибо, Алексис.

Я не совсем уверен, как добавить ALL во второй фильтр, как определено, поскольку они относятся к разным таблицам. Однако, используя ваше предложение, я переработал меру следующим образом:

Actual Spend at Forecasting Period:=CALCULATE (
    SUM ( 'Finance Actuals'[Amount] ),
    FILTER (
        ALLSELECTED ( 'Finance Period' ),
        'Finance Period'[Fiscal_Date_Key] <= MAX ( 'Finance Period'[Fiscal_Date_Key] )
    ),
    FILTER (
        ALL('Finance Calculated Data Snapshot Date'),
        'Finance Calculated Data Snapshot Date'[Calculated_Date_Key]
            <= MAX ( 'Finance Forecasting Period'[Calculated_Date_Key] )
    )
)

Это сработало и дало результат, на который я надеялся, поэтому спасибо за предложение. Однако мне все еще любопытно, что вы конкретно предлагали с

Попробуйте переместить функцию ALL во вторую функцию FILTER, поскольку именно там ее нужно применить.

person Stuart Middleton    schedule 22.11.2017
comment
Да, по сути, это то, что я предлагал. Вероятно, есть несколько вариантов, которые подойдут, но трудно попытаться написать DAX, когда у меня нет точных таблиц и отношений, видимых мне. - person Alexis Olson; 22.11.2017