Введение в Дакс
Основано на представленном видео -курсе SQLBI.
Сообщать схему

Отчет

Теория
Язык Дакса
DAX - это функциональный язык, выполнение течет с вызовами функций.
! Форматирование кода важно в DAX, так как он облегчает отладку кода. Для автоматического форматирования кода DAX можно использовать DaxFormater.
Рассчитанные столбцы
- Столбцы, рассчитанные с использованием DAX.
- Всегда вычисляется для текущей строки.
Меры
- Написано с использованием DAX
- Не работайте в ряду
- Вместо этого используйте таблицы и агрегаторы
- Не иметь концепции «текущий строк»
Наименование соглашений
- Меры не принадлежат к таблице => Избегайте имени таблицы в показателях ссылки. Таким образом, легче перейти к другой таблице и идентифицировать как меру.
- Так:
- Рассчитанные столбцы -> Таблица [столбца]
- Меры -> [мера]
Меры против рассчитанных столбцов
- Используйте столбец, когда:
- Необходимо нарезать или фильтровать значение
- Используйте меру, когда:
- Расчет процентов или соотношений
- Нуждаются в сложных агрегациях
- Использование пространства и процессора:
- Столбцы потребляют память
- Меры потребляют процессор
Функции агрегации
- Работайте только над числовыми столбцами.
- Совокупно только один столбец.
Функции агрегации «x»
- Итераторы: полезно для агрегирования формул
- Итерация над таблицей и оценить выражение для каждой строки
- Всегда получайте два параметра:
- Таблица для итерации
- Формула для оценки для каждого ряда
- Пример:
SUMX (
Sales,
Sales[Price] * Sales[Quantity]
)
Используя переменные
- Очень полезно, чтобы избежать повторяющихся суб -фрагментов в вашем коде.
- Пример:
Quantity =
VAR TotalQuantity = SUM ( Sales[Quantity] )
RETURN
IF (
TotalQuantity > 1000,
TotalQuantity * 0.95,
TotalQuantity * 1.25
)
Дата функции
DATE, DATEVALUE, DAY, EDATE,
EOMONTH, HOUR, MINUTE,
MONTH, NOW, SECOND, TIME,
TIMEVALUE, TODAY, WEEKDAY,
WEEKNUM, YEAR, YEARFRAC
Таблицы функций
- Основные функции, которые работают на полных таблицах и возвращают таблицу в результате
FILTER
ALL
VALUES
DISTINCT
RELATEDTABLE
- Их результат часто используется в других функциях
- Они могут быть объединены вместе, чтобы сформировать сложные выражения
ФИЛЬТР
- Добавляет новое условие, ограничивая количество рядов таблицы
- Возвращает таблицу, которая может быть повторена функцией «x»
ВСЕ
- Возвращает все ряды таблицы, игнорируя контекст фильтра
- Возвращает таблицу, которая может быть повторена функцией «x»
- Может также использоваться с одним столбцом
ALL ( Customers[CustomerName] ) Результатом является таблица с одним столбцом
ОТЧЕТЛИВЫЙ
- Возвращает различные значения столбца, только те, которые видны в текущем контексте
NumOfProducts =
COUNTROWS (
DISTINCT ( Product[ProductCode] )
)
Связанный
- Возвращает таблицу со всеми рядами, связанными с текущим.
NumOfProducts = COUNTROWS ( RELATEDTABLE ( Product ) )
Контексты оценки
1. Фильтраный контекст
- Определено::
- Выбор строки
- Выбор столбца
- Отчет фильтров
- Slicers Selection
- Ряды вне контекста фильтра не рассматриваются для вычисления
- Определяется автоматически Pivottable, может быть создан с конкретными функциями
2. Контекст строки
- Определено::
- Расчетное определение столбца
- Определяется автоматически для каждой строки
- Функции итерации строк
- Sumx, veragex…
- Все «x» функции и итераторы
- Определяется формулами пользователя
- Необходимы для оценки значений столбцов, это концепция «текущая строка»
! Таблицы контекста фильтра. Контекст строки итерации рядов!
Рассчитать
- Частично заменяет контекст фильтра
- Условия
- Может заменить целую таблицу
- Может заменить один столбец
- Рассчитайте работы в контексте фильтра
- Фильтры оцениваются в контексте внешнего фильтра, затем объединяются вместе и, наконец, используются для создания нового контекста фильтра, в который DAX оценивает выражение.
- Синтекс:
CALCULATE (
Expression,
Filter1,
…
Filtern
)
1. Фильтр и сумма находятся на одной таблице. Вы можете получить тот же результат с помощью фильтра.
NumOfBigSales =
CALCULATE (
SUM ( Sales[SalesAmount] ),
Sales[SalesAmount] > 100
)
2. Кличный фильтр только на одном столбце. Все используются с одной таблицей столбцов.
CALCULATE (
SUMX (
Orders,
Orders[Amount]
),
ALL ( Orders[Channel] )
)
Фильтры и отношения
-повреждения влияют на контекст фильтра
СВЯЗАННЫЙ
RELATED ( table[column] )
- Открывает новый контекст строки в целевой таблице
- Следующие отношения
- Включает в себя множество боковой фильтрации
Связанный
RELATEDTABLE ( table )
- Фильтруйте таблицу параметров
- Возвращает только строки, связанные с текущим
- Это товарищ
Контекст переход
- Расчет выполняет еще одну задачу:
- Если выполнено в контексте строки
- Это требует контекста строки
- Преобразует его в эквивалентный контекст фильтра
- Применяет его к модели данных перед вычислением его выражения
- Пример:
SUM() vs CALCULATE(SUM())
Время интеллекта
- Интеллект времени нуждается в таблице дат.
- Свойства таблицы даты:
- Все даты должны присутствовать
- С 1 ° января до 31 ° декабря
- Нет отверстий
- В противном случае интеллект времени не будет работать
- Интеллектуальная обложка времени:
- С начала года
- Квартал до настоящего времени
- Запуск всего
- Тот же период предыдущего года
- Рабочие дни вычисления
- Финансовый год
- и т. д.
- Агрегации:
- YTD: год с начала года
- QTD: квартал до настоящего времени
- MTD: месяц с
КАЛЕНДАРЬ
- Возвращает таблицу с одним столбцом с именем «дата», содержащей смежный набор дат в данном диапазоне, включительно.
CALENDAR (
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 1, 1 ),
DATE ( YEAR ( MIN ( Sales[Order Date] ) ), 12, 31 )
)
Календарауто
- Автоматически создает календарную таблицу на основе содержимого базы данных. При желании вы можете указать последний месяц (полезно для финансовых лет)
- Calendarauto использует все даты в модели, исключая только рассчитанные столбцы и таблицы
С начала года
DATESYTD и TOTALYTD
SalesAmountYTD =
CALCULATE (
SUM ( Sales[SalesAmount] ),
DATESYTD ( 'Date'[Date] )
)
SalesAmountYTD :=
TOTALYTD (
SUM ( Sales[SalesAmount] ),
'Date'[Date],
"06-30"
)
Тот же период в прошлом году
Sales_SPLY =
CALCULATE (
SUM ( Sales[SalesAmount] ),
SAMEPERIODLASTYEAR ( 'Date'[Date] )
)
Запуск всего
- Запуск общего количества требует явного фильтра.
SalesAmountRT =
CALCULATE (
SUM ( Sales[SalesAmount] ),
FILTER ( ALL ( 'Date' ), 'Date'[Date] <= MAX ( 'Date'[Date] ) )
)