CALCULATE, функция
Функция CALCULATE является одной из наиболее универсальных функций в Power BI. Следующий пример показывает синтаксис функции CALCULATE:
CALCULATE( <expression>, <filter1>, <filter2>, ... )
Выражение в первом параметре должно быть вычислено для возврата результата (значение) и обычно является агрегатной функцией, такой как SUM, AVG, MIN и т. п. Затем это выражение вычисляется в контексте на основе фильтров. Эти фильтры могут расширять и ограничивать текущий контекст вычисления.
С помощью функции CALCULATE можно управлять контекстом строки и фильтра. Вы можете добавлять, удалять и обновлять фильтры. CALCULATE — это ключевая функция для многих вычислений в DAX.
Добавление фильтра с помощью функции CALCULATE
В следующем фрагменте кода показан пример оценки общего объема продаж и добавления контекста фильтра самолета.
Airplane Sales = CALCULATE( [Total Sales], 'Product Details'[ItemGroup] = "Airplane" )
Совет
В следующем фрагменте кода показано, как выполнить такое же вычисление в Tableau:
Airplane Sales = IF [ItemGroup] = "Airplane" THEN SUM([Sales Amount] ELSE 0 END
Обновление фильтра с помощью функции CALCULATE
В следующем фрагменте кода показан пример того, как получить "Продажи 2018", даже если 2019 выбран в срезе года.
2018 Sales = CALCULATE( [Total Sales], DATE[Year] = 2018 )
Совет
Прямое сравнение с Tableau по-видимому недоступно. Чтобы выполнить эту функцию в Tableau, необходимо дублировать поля, добавить дополнительные источники данных или выполнить вычисления для каждого столбца.
Игнорирование фильтра с помощью функции CALCULATE
В следующем фрагменте кода показан пример того, как найти общий объем продаж в штатах, где Александрия указана как город ("Александрия" — это значение, выбранное в срезе города).
Total Sales All States = CALCULATE( [Total Sales], ALL( Geography[State] ) )
Совет
Вы выполните то же вычисление в Tableau с помощью выражения EXCLUDE LOD. Обратите внимание, что это выражение LOD отличается от другого степенью детализации. С помощью этого выражения необходимо исключить из представления состояние, а не штат и город:
Total Sales All States = { EXCLUDE [State] : SUM([Total Sales]) }