Семантическая ошибка DAX: функция CALCULATE использовалась в логическом выражении (True/False), которое используется как выражение фильтра таблицы. Такое использование недопустимо.

Причина

Эта ошибка может возникнуть, если в контексте выражения меры или выражения вычисляемого столбца нельзя использовать одно или несколько выражений фильтра.

В большинстве случаев эта ошибка вызывается выражением фильтра, заданного в качестве аргумента для функции CALCULATE, функция. Для работы функции CALCULATE требуются фильтры, определенные как логические или табличные выражения.

Например, следующее выражение меры возвращает сумму SalesAmount в таблице Sales за все продажи в 2013 г. У таблицы Sales и таблицы Date существует связь со столбцом CalendarYear.

=CALCULATE(
SUM(Sales[SalesAmount]), 
'Date'[CalendarYear] = 2013) 
)

В этом случае 'Date'[CalendarYear] = 2013 является выражением фильтра, переданным в функцию CALCULATE. Ошибка не возвращается и сумма SalesAmount за все продажи в 2013 г. вычисляется успешно.

Это выражение меры пытается вернуть сумму SalesAmount за последний год в столбце CalendarYear.

=CALCULATE(
SUM(Sales[SalesAmount]), 
MAX(Date[CalendarYear])
)

Выражение фильтра MAX('Date'[CalendarYear]) пытается вернуть самое большое числовое значение в столбце CalendarYear. Однако в контексте выражения меры его нельзя передать как выражение фильтра таблицы в функцию CALCULATE, что приводит к возникновению ошибки.

Исправление ошибки

С помощью функции FILTER, функция определите фильтры как табличное выражение.

Чтобы вернуть значение последнего года в столбце CalendarYear, можно воспользоваться функцией FILTER для отображения таблицы, отфильтрованной по другому выражению фильтра. Для возвращения значения последнего года это выражение использует функцию MAX, функция:

=CALCULATE(
SUM(Sales[SalesAmount]),
FILTER(
ALL(
       'Date'[CalendarYear]), 
      [CalendarYear] = MAX('Date'[CalendarYear])
)
)

Функция FILTER обрабатывает таблицу Date согласно определенному фильтру:

ALL('Date'[CalendarYear]), [CalendarYear] = MAX('Date'[CalendarYear])

Это выражение использует функцию MAX для вычисления столбца CalendarYear в таблице Date и возврата самого большого числа. Функция Функция ALL используется для очистки дополнительных фильтров и вычисления всех строк в таблице Date. Затем функция FILTER передает значение последнего года как выражение фильтра таблицы в функцию CALCULATE. После этого выражение фильтра таблицы, содержащее одну строку и один столбец, вычисляет сумму SalesAmount со значением последнего года в столбце CalendarYear. Ошибка не возвращается и вычисление завершается успешно.