Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Давайте еще раз взглянем на проблему, обсуждаемую в этом туториале , где динамически сравнивались первые N рабочих дней каждого месяца. Эта проблема была основана на запросе участника LuckyTemplates на нашем форуме, где он хотел динамически просмотреть и сравнить первые 5, 10, 15 и 20 оплачиваемых дней (не выходные и не праздничные дни) для данного месяца с предыдущий месяц.

Вместо использования power query мы придумаем решение на языке кодирования DAX. Вы можете посмотреть полное видео этого урока в нижней части этого блога.

В первом видео я придумал решение power query, как решить эту проблему. Но затем один из наших экспертов LuckyTemplates, Антрикш Шарма, придумал блестяще эффективную меру, в которую также стоит углубиться. Мы обсудим некоторые методы, которые он использовал при разработке показателей, которые предоставят вам дополнительные инструменты в наборе инструментов DAX.

Это, безусловно, помогло мне и некоторым другим экспертам, которые взглянули на это. Сравнительное сравнение сопоставимых рабочих дней по месяцам является ценным шаблоном, который можно использовать во многих ситуациях.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Давайте углубимся в запрос мощности и посмотрим, что здесь сделал Антрикш. У нас есть месяц и год , общий объем продаж и, наконец, общий объем продаж за N рабочих дней , которые мы выбрали с помощью мощного запроса на основе разработанного нами параметра «что, если».

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Антрикш применил совершенно другой подход, применив шокирующе короткую меру для решения всей этой проблемы. Первое, что я заметил, это использование команды .

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Это функция DAX, которую я использую не очень часто, но она идеально подходит для такого типа задач. Если мы посмотрим на руководство по SQL BI DAX, в нем говорится, что функция GENERATE — это табличная функция, которая использует в качестве входных данных две разные таблицы, а затем выполняет эквивалент SQL-команды CROSS APPLY.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Таким образом, он берет базовую таблицу (Table1) и повторяет ее, а затем берет второе табличное выражение и оценивает его для каждой строки в первой таблице, а затем возвращает таблицу в качестве вывода.

Возьмем меру Антрикша и закинем ее в таблицу. Мы видим, что он дает те же результаты, что и решение для запроса мощности, которое мы делали в прошлый раз. Так что это хорошо и достаточно хорошо подтверждает обе меры.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Давайте разберем эту меру. Здесь применяется первый фильтр: Dates[IsBusinessDay] = TRUE. При этом удаляются все даты, не являющиеся выходными и непраздничными, на основе поля расширенной таблицы дат IsBusinessDay.

Мы говорили об этом намного больше в первом уроке , где мы также рассмотрели, как связать это с нашим праздничным столом.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Интересная часть этого действительно связана с двумя входными данными таблицы. Первая таблица представляет собой таблицу с одним столбцом поля «Месяц и год» в таблице «Дата».

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Но во второй таблице происходят интересные вещи. Антрикш использовал , а затем использовал наш динамический параметр как количество строк в TOPN.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Мера Total Sales прикрепляется ко второй таблице, а затем применяется к первой таблице.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Оглавление

Понимание сложной меры с использованием языка кодирования DAX

Один из самых простых способов понять, что делает подобная сложная мера, — зайти в табличный редактор . Мы можем взглянуть на это выражение и сначала выяснить, что делает это выражение TOPN.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Давайте скопируем часть TOPN и создадим новый запрос DAX . Помните, что запросы DAX начинаются с EVALUATE.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Когда мы вставим часть TOPN, мы увидим, что она извлекает первые 5 дат из таблицы заказов на продажу. В TOPN есть таблица, состоящая из значений всех дат заказов в таблице продаж.

Эта функция TOPN принимает значение параметра «что, если» (которое в данном случае равно 5) и применяет его к полю даты заказа на продажу. Затем он вытягивает первые 5 дат в контексте фильтра в порядке возрастания на основе этого поля.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Учитывая, что нет дополнительного контекста фильтра, он просто извлекает эти первые 5 дат из всей таблицы.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Столбец @Sales просто добавляет общий объем продаж в соответствующем контексте фильтра в таблицу TOPN.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

На данный момент у нас есть первая таблица месяца и года, вторая таблица TOPN первых N дат из таблицы продаж, а затем общий объем продаж, связанный с этим.

Использование таблицы GENERATE в языке кодирования DAX

Давайте посмотрим, что делает эта таблица GENERATE. Мы вернемся в табличный редактор и создадим новый запрос DAX.

Мы начнем, как всегда, с EVALUATE, вставим часть кода GENERATE и нажмем 5.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Мы видим, что для каждой строки первой таблицы выполняется итерация и соединение с 5 строками из таблицы TOPN, оцененными в контексте с функцией @Sales.

Это заняло первые 5 рабочих дней в апреле, первые 5 рабочих дней в мае, первые 5 рабочих дней в июне и так далее, пока не дойдет до конца первой таблицы.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Это именно то, что нам нужно, и теперь сложение этих значений становится относительно простым делом. У нас есть результат (который является табличной переменной результатов GENERATE), а затем нам нужно суммировать функцию @Sales.

В контексте мы теперь суммируем первые 5 рабочих дней в апреле, первые 5 рабочих дней в мае и так далее, пока не дойдем до нашей общей суммы в 23 737 430 долларов США, и в этом случае у него нет контекста месяца и года для работы. .

Это суммирует весь столбец @Sales и дает нам ту же сумму, что и в нашем решении для запроса мощности.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Вы можете видеть, что если мы изменим слайсер на 10, мы динамически получим те же результаты с языком кодирования DAX, что и в запросе мощности.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

У нас также есть гистограмма внизу, которая динамически корректируется, чтобы отражать внесенные нами изменения.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Динамическая настройка названия меры

Есть еще один дополнительный трюк, который я хотел вам показать. Вы можете создать динамическую корректировку параметра «что, если» и динамически привязать его к заголовку меры.

Например, если мы изменим срез вверху на 15, он динамически изменит имя меры внизу на Общий объем продаж за первые 15 рабочих дней каждого месяца .

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Это можно легко сделать в DAX с помощью условного форматирования . Мы в основном просто берем три струны. Первый — это Total Sales for First , а затем соедините его со значением, полученным из параметра «что, если», а затем просто привяжите его к остальной части заголовка.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Затем заходим в визуал, переходим к условному форматированию заголовка и нажимаем fx .

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Мы отформатируем по значению поля и выберем эту динамическую меру заголовка. Это изменит выбор параметра «что, если».

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Заключение

Теперь у нас есть готовое решение с использованием языка кодирования DAX. Мы обсудили действительно творческий и эффективный способ сделать это с помощью функции GENERATE. Я хочу поблагодарить Антрикша за то, что он поделился с нами своими блестящими знаниями DAX. Я многому научился, изучая его решение DAX, и надеюсь, вы тоже.


Что такое self в Python: примеры из реального мира

Что такое self в Python: примеры из реального мира

Что такое self в Python: примеры из реального мира

Как сохранить и загрузить файл RDS в R

Как сохранить и загрузить файл RDS в R

Вы узнаете, как сохранять и загружать объекты из файла .rds в R. В этом блоге также рассказывается, как импортировать объекты из R в LuckyTemplates.

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

Новый взгляд на первые N рабочих дней — решение для языка кодирования DAX

В этом руководстве по языку программирования DAX вы узнаете, как использовать функцию GENERATE и как динамически изменять название меры.

Продемонстрируйте идеи с помощью метода многопоточных динамических визуализаций в LuckyTemplates

Продемонстрируйте идеи с помощью метода многопоточных динамических визуализаций в LuckyTemplates

В этом учебном пособии рассказывается, как использовать технику многопоточных динамических визуализаций для создания аналитических сведений из динамических визуализаций данных в ваших отчетах.

Введение в фильтрацию контекста в LuckyTemplates

Введение в фильтрацию контекста в LuckyTemplates

В этой статье я пройдусь по контексту фильтра. Контекст фильтра — одна из основных тем, с которой должен ознакомиться любой пользователь LuckyTemplates.

Лучшие советы по использованию приложений в онлайн-службе LuckyTemplates

Лучшие советы по использованию приложений в онлайн-службе LuckyTemplates

Я хочу показать, как онлайн-служба LuckyTemplates Apps может помочь в управлении различными отчетами и аналитическими данными, созданными из различных источников.

Анализ изменений маржи прибыли с течением времени — аналитика с LuckyTemplates и DAX

Анализ изменений маржи прибыли с течением времени — аналитика с LuckyTemplates и DAX

Узнайте, как рассчитать изменения вашей прибыли, используя такие методы, как разветвление показателей и объединение формул DAX в LuckyTemplates.

Идеи материализации кэшей данных в DAX Studio

Идеи материализации кэшей данных в DAX Studio

В этом руководстве будут обсуждаться идеи материализации кэшей данных и то, как они влияют на производительность DAX при предоставлении результатов.

Бизнес-отчетность с использованием LuckyTemplates

Бизнес-отчетность с использованием LuckyTemplates

Если вы все еще используете Excel до сих пор, то сейчас самое подходящее время, чтобы начать использовать LuckyTemplates для своих бизнес-отчетов.

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать

Что такое шлюз LuckyTemplates? Все, что тебе нужно знать