Использование переменных для улучшения формул DAX
В качестве моделировщика данных написание и отладка некоторых вычислений and и DAX могут быть сложной задачей. Обычно сложные требования к вычислению часто включают написание составных or сложных выражений. Составные выражения могут включать использование многих вложенных функций, and возможно повторное использование логики выражений.
Использование переменных в формулах DAX помогает создавать более сложные and эффективные вычисления. Переменные могут повысить производительность, надежность, удобочитаемость, and снизить сложность.
В этой статье мы продемонстрируем first три преимущества, используя пример measure для роста продаж yearпо сравнению сyear (год к году). (Формула роста продаж YoY — это период продаж, минус продажи за тот же период lastyear, разделенные на продажи за тот же период lastyear.)
Начнем со следующего определения measure.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
measure выдает правильный результат, но давайте now посмотрим, как его можно улучшить.
Повышение производительности
Обратите внимание, что формула повторяет выражение, вычисляющее "тот же период lastyear". Эта формула неэффективна, так как требуется Power BI для evaluate того же выражения дважды. Определение measure можно сделать более эффективным с помощью переменной VAR.
Следующее measure определение представляет улучшение. В нем используется выражение, чтобы присвоить результат "тот же период lastyear" переменной с именем SalesPriorYear. Затем переменная используется дважды в выражении RETURN.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
measure продолжает создавать правильный результат, and делает это примерно в половине timeзапроса.
Улучшение удобочитаемости
В определении previousmeasure обратите внимание, что выбор имени переменной упрощает понимание выражения RETURN. Выражение and является коротким и самоописывательным.
Упрощение отладки
Переменные также могут помочь выполнить отладку формулы. Чтобы проверить выражение, назначенное переменной, временно перезаписываете выражение RETURN, чтобы вывести переменную.
Следующее определение measure возвращает только переменную SalesPriorYear. Обратите внимание, как оно закомментирует ожидаемое выражение RETURN. Этот метод позволяет легко вернуть его обратно после завершения отладки.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Уменьшение сложности
В версиях earlierDAXпеременные not ещё не поддерживались. Сложные выражения, вносившие новые контексты filter, необходимы для использования функций EARLIERorEARLIESTDAX для ссылки на внешние filter контексты. К сожалению, моделисты данных обнаружили, что эти функции трудно понять и использоватьand.
Переменные всегда вычисляются вне области применения вашего выражения RETURN filters. По этой причине при использовании переменной в измененном контексте filter он достигает того же результата, что и функция EARLIEST. Поэтому можно избежать использования функций EARLIERorEARLIEST. Это означает, что вы можете now писать формулы, которые являются менее сложными, and, которые проще понять.
Рассмотрим следующее определение вычисляемого столбца, добавленное в таблицу подкатегории
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
Функция EARLIER используется для ссылки на столбец Subcategory Salesvalueв текущем контексте строки.
Определение вычисляемого столбца можно улучшить с помощью переменной вместо функции EARLIER. Переменная
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
содержимое Related
- статья VARDAX
- Обучение path: использование DAX в Power BI Desktop
- Вопросы? Попробуйте попросить помощи у Power сообщества BI