Семантическая ошибка 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. Ошибка не возвращается и вычисление завершается успешно.