ВВЕРХ

DAX-Урок 2. Функция CALCULATE

Описание

Первая функция, с которой необходимо начинать изучение DAX является CALCULATE. Данная функция не имеет точного аналога в Excel, однако ее можно сравнить с функциями SUMIFS да COUNTIFS . Если кратко, то данная функция выполняет наложение фильтров на другие расчетные функции, тем самым мы можем отбирать и включать в расчет только нужные нам данные.

Синтаксис функции CALCULATE()

=CALCULATE(< статистическое выражение >, < фильтр1 >, < фильтр2 >, ...)

< статистическое выражение >

Статистическое выражение должно нам вернуть результат вычисления (значение, а не таблицу). По этой причине в этом параметре часто используются статистические функции типа SUM , MIN , MAX , COUNTROWS тому подобное.

  1. SUM([ НазваниеКолонки ])
  2. SUM([ НазваниеКолонки1 ]) / MAX([ НазваниеКолонки2 ])
  3. Название другого расчетного поля (меры)

< фильтр1 >, < фильтр2 >, ...

Фильтр определяет диапазон данных, над которыми нужно работать. Здесь указываются условия для отбора значений.

  1. [ НазваниеКолонки ] = Авто
  2. [ НазваниеКолонки ] >= 6
  3. ALL( 'НазваниеТаблицы' ) или ALL( 'НазваниеТаблицы' [ НазваниеКолонки ] )
  4. FILTER ( 'НазваниеТаблицы' , 'НазваниеТаблицы' [ НазваниеКолонки ] = " Зеленый ")

Допустим мы имеем такую таблицу, которая называется Demo и загружена в PowerPivot .

Давайте на ее основе создадим сводную таблицу и подсчитаем количество записей для каждого продукта.

Теперь давайте создадим новое расчетное поле (Measure) Count_All_Product в нашей сводной таблице, которая отображает общее количество записей напротив всех строк.

Как мы получили в расчетном поле Count_All_Product цифры 16 ? Объяснение в том, что мы сняли для этого поля все фильтры, которые были применены в сводной таблице (каждая строка в сводной таблице это отдельный фильтр), с помощью функции ALL() . То есть, иначе говоря, функция ALL(Demo) дает команду снять все фильтры для расчетного поля Count_All_Product, применяемые в таблице Demo .

Давайте добавим еще одно поле (City) в строки, чтобы видеть, какие были продажи каждого товара по городам:

Видим, что цифры в поле Count of Rows меняются, а в расчетном поле Count_All_Product – нет. Все правильно, потому что для последнего мы сняли все фильтры в формуле. Теперь давайте внесем незначительные изменения в нашу формулу и посмотрим результат.

=CALCULATE(COUNTROWS(Demo);ALL(Demo[Product]))

Мы изменили аргумент для функции ALL(), заменив Demo на Demo[Product] . Теперь фильтры будут сняты не для всей таблицы. Demo , а только для ее столбца Demo[Product] .

Итак видим, что на поле Count of Rows действуют фильтры Product да City , а на расчетном поле Count_All_Product только фильтр City .