Що таке DAX?
DAX (Data Analysis Expressions) — це мова виразів, яка використовується для обчислень у моделях даних. Вона нагадує функції Excel, але надає більше можливостей для роботи з даними, особливо в контексті бізнес-аналізу.
Для чого використовується DAX?
Мова DAX використовується для вирішення різноманітних аналітичних завдань, від простих обчислень, таких як додавання та середні значення, до складного аналізу.
DAX дозволяє створювати нові обчислювані стовпці, міри (метрики) та складні фільтри.
Обчислювані стовпці: DAX дозволяє додавати нові стовпці в таблиці, які базуються на обчисленнях. Наприклад, можна створити стовпець “Загальний продаж", який буде сумою продажів по кожному рядку.
Міри: використовуються для обчислення агрегатних значень: сума, середнє значення, мінімум або максимум. Наприклад, міра "Середній продаж" може розраховувати середнє значення продажів за всіма записами.
Контекст: ключове поняття, яке впливає на обчислення та результати формул. Контекст дає змогу виконувати динамічний аналіз, тобто коли результати формули можуть змінюватися.
Основні функції DAX
Функції DAX можна розділити на кілька груп:
функції зв'язків,
агрегатні функції,
логічні,
функції фільтрації,
функції дати та часу,
фінансові,
інформаційні функції,
математичні,
статистичні та інші функції
Функції зв'язків
Використовуються для витягування значень із пов'язаних таблиць, що дозволяє ефективно працювати зі зв'язними даними. Ці функції особливо корисні для роботи з реляційними даними, де таблиці пов'язані між собою через ключі.
RELATED
Повертає значення з пов'язаної таблиці, яка знаходиться у зв'язку "один-до-багатьох".
Синтаксис: RELATED(<ColumnName>)
Приклад: ProductCategory = RELATED(Products[Category])
Функція RELATED отримує значення з колонки Category таблиці Products, яка пов'язана з поточною таблицею через відношення "один-до-багатьох". У цьому прикладі ми припускаємо, що існує зв'язок між таблицею продажів і таблицею продуктів.
RELATEDTABLE
Повертає таблицю, що містить всі рядки з пов'язаної таблиці, які відповідають поточному рядку.
Синтаксис: RELATEDTABLE(<TableName>)
Приклад: TotalSalesForCustomer = SUMX(RELATEDTABLE(Sales), Sales[Amount])
Функція RELATEDTABLE повертає всі рядки з таблиці Sales, які пов'язані з поточним рядком в основній таблиці, наприклад, з таблицею Customers. SUMX у цьому прикладі обчислює загальну суму Amount для всіх продажів, пов'язаних з поточним клієнтом.
Агрегатні функції
Агрегатні функції дозволяють обчислювати сумарні значення на основі певного стовпця або таблиці.
SUM
Повертає суму всіх значень у стовпчику
Синтаксис: SUM(<ColumnName>)
Приклад: TotalRevenue = SUM(Sales[Revenue])
AVERAGE
Повертає середнє значення чисел у стовпчику
Синтаксис: AVERAGE(<ColumnName>)
Приклад: AverageRevenue = AVERAGE(Sales[Revenue])
MIN та MAX:
Обчислюють мінімальне та максимальне значення відповідно.
Синтаксис: MAX(<ColumnName>), MIN(<ColumnName>)
Приклад: MinSale = MIN(Sales[Amount])
MIN повертає найменше значення з колонки Amount.
COUNT
Підраховує кількість рядків із непорожніми значеннями,
Синтаксис: COUNT(<ColumnName>)
Приклад: TotalSales = COUNT(Sales[OrderID])
Функція COUNT повертає кількість значень у стовпчику OrderID.
DISTINCTCOUNT
Повертає кількість унікальних значень у стовпчику
Синтаксис: DISTINCTCOUNT(<ColumnName>)
Приклад: UniqueCustomers = DISTINCTCOUNT(Sales[CustomerID])
Функція DISTINCTCOUNT підраховує кількість унікальних значень у колонці CustomerID.
SUMX
повертає суму виразу, обчисленого для кожного рядка таблиці
Синтаксис: SUMX(<Table>, <Expression>)
Приклад: TotalProfit = SUMX(Sales, Sales[Quantity] * Sales[ProfitPerUnit])
AVERAGEX
Повертає середнє значення виразу, обчисленого для кожного рядка таблиці
Синтаксис: AVERAGEX(<Table>, <Expression>)
Приклад: AverageProfitPerSale = AVERAGEX(Sales, Sales[ProfitPerUnit] * Sales[Quantity])
Функція AVERAGEX обчислює вираз Sales[ProfitPerUnit] * Sales[Quantity] для кожного рядка таблиці Sales, а потім обчислює середнє значення цих результатів.
Логічні функції
Логічні функції використовуються для виконання умовних обчислень
IF
Повертає TRUE, якщо умова виконується
Синтаксис: IF(<Condition>, <TrueResult>, <FalseResult>)
Приклад: HighSales = IF(Sales[Amount] > 1000, "High", "Low")
Функція IF перевіряє, чи є значення у колонці Amount більшим за 1000, і повертає "High" або "Low" відповідно.
AND
Повертає TRUE, якщо всі умови істинні.
Синтаксис: AND(<Condition1>, <Condition2>)
Приклад: BigHighSales = IF(AND(Sales[Amount] > 1000, Sales[Quantity] > 10), "Big High", "Not Big High")
Функція AND перевіряє, чи є значення у колонці Amount більшим за 1000 та значення у колонці Quantity більшим за 10, і повертає "Big High" або "Not Big High".
OR
Повертає TRUE, якщо будь-яка з умов істинна.
Синтаксис: OR(<Condition1>, <Condition2>)
Приклад: PromotionEligible = IF(OR(Employee[YearsAtCompany] > 5, Employee[PerformanceRating] = "Excellent"), "Yes", "No")
Функція OR перевіряє, чи працює працівник понад 5 років або чи має він оцінку "Excellent", і повертає "Yes" або "No".
SWITCH:
Повертає одне значення з декількох можливих на основі заданого виразу.
Синтаксис: SWITCH(<Expression>, <Value1>, <Result1>, <Value2>, <Result2>, ..., <Else>)
Приклад:
SalesCategory = SWITCH(
TRUE(),
Sales[Amount] > 1000, "High",
Sales[Amount] > 500, "Medium",
"Low"
Якщо Sales[Amount] понад 1000, повертається "High".
Якщо Sales[Amount] понад 500, але менше або дорівнює 1000, повертається "Medium". Для всіх інших випадків повертається "Low
Функції фільтрації
Дозволяють відфільтрувати дані на основі заданих критеріїв.
CALCULATE
Найпотужніша функція в DAX, яка змінює контекст обчислення на основі заданих фільтрів.
Синтаксис: CALCULATE(<Expression>, <Filter1>, <Filter2>, ...)
Приклад: TotalHighValueSales = CALCULATE(SUM(Sales[Amount]), Sales[Amount] > 1000)
Функція CALCULATE обчислює суму Amount тільки для тих рядків, де значення у колонці Amount понад 1000.
CALCULATETABLE
Змінює контекст обчислення таблиці на основі заданих фільтрів. Корисна для створення нових таблиць, які відповідають певним умовам.
Синтаксис: CALCULATETABLE(<Table>, <Filter1>, <Filter2>, ...)
Приклад: HighValueSalesTable = CALCULATETABLE(Sales, Sales[Amount] > 1000)
Функція CALCULATETABLE повертає таблицю Sales, яка містить лише ті рядки, де значення у колонці Amount понад 1000.
FILTER
Функція для створення таблиць даних на основі заданих умов. Дозволяє проводити більш специфічний аналіз даних, забезпечуючи можливість вибіркового доступу до даних.
Синтаксис: FILTER(<Table>, <filter>)
Приклад: HighValueSales = FILTER(Sales, Sales[Amount] > 1000)
Функція FILTER повертає всі рядки з таблиці Sales, де значення у колонці Amount понад 1000.
ALL
Дозволяє контролювати рівень фільтрації у CALCULATE та інших обчисленнях, забезпечуючи повне ігнорування фільтрів. Вона корисна, коли потрібно отримати загальне значення без впливу поточного контексту фільтра
Синтаксис: ALL( [<table> | <column>[, <column>[, <column>[,…]]]] )
Приклад: TotalSalesWithoutFilters = CALCULATE(SUM(Sales[Amount]), ALL(Sales))
Функція ALL видаляє всі фільтри з таблиці Sales, а CALCULATE обчислює суму Amount з таблиці Sales, ігноруючи всі застосовані фільтри.
ALLEXCEPT
Видаляє всі фільтри з таблиці, окрім зазначених колонок.
Синтаксис: ALLEXCEPT(<Table>, <Column1>, <Column2>, ...)
Приклад:SalesExceptProduct = CALCULATE(SUM(Sales[Amount]), ALLEXCEPT(Sales, Sales[Product]))
Функція ALLEXCEPT видаляє всі фільтри з таблиці Sales, за винятком фільтрів, застосованих до колонки Product. У цьому прикладі CALCULATE обчислює суму Amount, залишаючи фільтри для Product активними, але при цьому видаляє інші фільтри.
Функції дати та часу
Ці функції дозволяють виконувати аналіз даних на основі часових параметрів, що дуже корисно для аналізу трендів та порівняння періодів.
DAY
Повертає день місяця з дати (число від 1 до 31)
Синтаксис: DAY(<Date>)
Приклад: SalesDay = DAY(Sales[OrderDate])
DATESYTD
Повертає дати з початку року до поточної дати.
Синтаксис: DATESYTD(<DateColumn>)
Приклад: YTD_Sales = CALCULATE(SUM(Sales[Amount]), DATESYTD(Sales[OrderDate]))
Функція DATESYTD разом із CALCULATE обчислює річний обсяг продажів до зазначеної дати.
DATEDIFF
Повертає різницю між двома датами у зазначених одиницях часу
Синтаксис: DATEDIFF(<StartDate>, <EndDate>, <Interval>)
Приклад: DaysBetween = DATEDIFF(Sales[OrderDate], Sales[ShipDate], DAY)
Функція DATEDIFF обчислює різницю між датами OrderDate та ShipDate у днях. Параметр Interval задає одиниці вимірювання часу і може бути DAY, MONTH, YEAR, HOUR, MINUTE або SECOND.
Текстові функції
Дозволяють маніпулювати текстовими значеннями, з'єднувати рядки тощо.
CONCATENATE
Об'єднує два текстових значення в одне.
Синтаксис: CONCATENATE(<Text1>, <Text2>)
Приклад: FullName = CONCATENATE(Employee[FirstName], Employee[LastName])
Функція CONCATENATE об'єднує прізвище та ім'я співробітників в один рядок
LEN
Повертає кількість символів у текстовому рядку.
Синтаксис: LEN(<Text>)
Приклад: NameLength = LEN(Employee[FirstName])
Як розпочати роботу з DAX?
Для новачків найкраще розпочати з базових функцій, які можна використовувати у різних сценаріях. Прості завдання, такі як обчислення загальних продажів або визначення середнього значення, допоможуть зрозуміти, як DAX взаємодіє з даними.
Згодом, зі зростанням впевненості, можна переходити до складніших функцій та їхніх комбінацій, розширюючи можливості аналітичної роботи.
Опановування DAX відкриє перед вами широкі можливості для глибокого аналізу даних. Навчившись використовувати цей інструмент, ви зможете не просто знаходити відповіді на стандартні питання, але й ставити нові питання та шукати шляхи їх розв'язання, що є ключовим у сучасному динамічному світі даних.
Приєднуйтеся до нашого навчального курсу та ставайте гуру аналітики