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.

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

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

Яким чином ми отримали в розрахунковому полі Count_All_Product цифри 16? Пояснення в тому, що ми зняли для цього поля всі фільтри, які були застосовані в зведеній таблиці (кожен рядок в зведеній таблиці це є окремий фільтр), за допомогою функції ALL(). Тобто, інакше кажучи, функція ALL (Demo) дає команду зняти всі фільтри для розрахункового поля Count_All_Product, які застосовуються до таблиці Demo.

Давайте добавимо ще одне поле в рядки, щоби бачити який був продаж кожного товару по містам.

Бачимо, що цифри в полі 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.

Статті по темі:

  • DAX-Урок 1. Що таке DAX. Основні поняття.
  • DAX-Урок 3. Функція відбору даних FILTER