Перегляд перших N робочих днів – рішення мови кодування DAX

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

Замість використання потужних запитів ми розробимо рішення мови кодування DAX. Ви можете переглянути повне відео цього підручника внизу цього блогу.

У першому відео я придумав рішення потужного запиту про те, як вирішити цю проблему. Але потім один із наших експертів LuckyTemplates, Антрікш Шарма, запропонував неймовірно ефективний захід, який також вартий більш глибокого вивчення. Ми обговоримо деякі прийоми, які він використовував для розробки міри, яка надасть вам додаткові інструменти у наборі інструментів DAX.

Це, безумовно, для мене та для деяких інших експертів, які подивилися на це. Подібне порівняння порівнянних робочих днів за місяці є цінним шаблоном, який можна використовувати в багатьох ситуаціях.

Перегляд перших N робочих днів – рішення мови кодування DAX

Давайте зануримося в power query і подивимося, що тут зробив Antriksh. У нас є місяць і рік , загальний обсяг продажів і, нарешті, загальний обсяг продажів за N робочих днів , які ми вибрали за допомогою потужного запиту на основі розробленого нами параметра «що-якщо».

Перегляд перших N робочих днів – рішення мови кодування DAX

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

Перегляд перших N робочих днів – рішення мови кодування DAX

Це функція DAX, яку я використовую не дуже часто, але вона ідеально підходить для такого типу проблем. Якщо ми подивимося на посібник із SQL BI DAX, там сказано, що функція GENERATE — це таблична функція, яка використовує дві різні таблиці як вхідні дані, а потім виконує еквівалент команди SQL CROSS APPLY.

Перегляд перших N робочих днів – рішення мови кодування DAX

Отже, він бере базову таблицю (Table1) і повторює її, а потім бере другий табличний вираз і обчислює його для кожного рядка в першій таблиці, а потім повертається до таблиці як результат.

Візьмемо Антриксову мірку та кинемо її в стіл. Ми бачимо, що воно дає ті самі результати, що й рішення power query, яке ми робили минулого разу. Тож це добре і добре підтверджує обидва показники.

Перегляд перших N робочих днів – рішення мови кодування DAX

Давайте розберемо цей захід. Перший фільтр, застосований тут, – це Дати[РобочийДень] = ІСТИНА. Це видаляє всі невихідні та несвяткові дати на основі поля IsBusinessDay розширеної таблиці дат.

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

Перегляд перших N робочих днів – рішення мови кодування DAX

Цікава частина цього насправді полягає у двох вхідних даних таблиці. Перша таблиця — це таблиця з одним стовпцем поля «Місяць і рік» у таблиці «Дата».

Перегляд перших N робочих днів – рішення мови кодування DAX

Але вхідні дані другої таблиці — це місце, де відбуваються цікаві речі. Antriksh використав a, а потім використав наш динамічний параметр як кількість рядків у TOPN.

Перегляд перших N робочих днів – рішення мови кодування DAX

Показник «Загальний обсяг продажів » додається до другої таблиці, а потім застосовується до першої таблиці.

Перегляд перших N робочих днів – рішення мови кодування DAX

Зміст

Розуміння складної міри за допомогою мови кодування DAX

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

Перегляд перших N робочих днів – рішення мови кодування DAX

Давайте скопіюємо частину TOPN і створимо нову. Пам’ятайте, що запити 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 і отримує точнісінько ту саму суму, яку ми мали в нашому рішенні Power Query.

Перегляд перших N робочих днів – рішення мови кодування DAX

Ви бачите, що якщо ми змінюємо роздільник на 10, ми динамічно отримуємо ті самі результати з мовою кодування DAX, що й у Power Query.

Перегляд перших N робочих днів – рішення мови кодування DAX

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

Перегляд перших N робочих днів – рішення мови кодування DAX

Динамічне налаштування назви такту

Є ще один додатковий прийом, який я хотів вам показати. Ви можете створити динамічне коригування свого параметра "що-якщо" та динамічно прив'язати його до назви міри.

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

Перегляд перших N робочих днів – рішення мови кодування DAX

У DAX є простий спосіб зробити це за допомогою . В основному ми беремо лише три струни. Перший — це загальний обсяг продажів для First , а потім об’єднуємо його зі значенням, отриманим із параметра «що-якщо», а потім просто прив’язуємо це до решти заголовка.

Перегляд перших N робочих днів – рішення мови кодування DAX

Потім переходимо до візуального елемента, переходимо до умовного форматування заголовка та натискаємо fx .

Перегляд перших N робочих днів – рішення мови кодування DAX

Ми відформатуємо за значенням поля та виберемо цю міру динамічного заголовка. Це змінить вибір параметра що-якщо.

Перегляд перших N робочих днів – рішення мови кодування DAX

Висновок

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


Труба в R: підключення функцій за допомогою Dplyr

Труба в R: підключення функцій за допомогою Dplyr

У цьому підручнику ви дізнаєтесь, як об’єднати функції разом за допомогою оператора каналу dplyr мовою програмування R.

RANKX Deep Dive: функція LuckyTemplates DAX

RANKX Deep Dive: функція LuckyTemplates DAX

RANKX від LuckyTemplates дозволяє повернути рейтинг певного числа в кожному рядку таблиці, який є частиною списку чисел.

Вилучення тем і зображень LuckyTemplates із PBIX

Вилучення тем і зображень LuckyTemplates із PBIX

Дізнайтеся, як розібрати файл PBIX, щоб витягти теми та зображення LuckyTemplates із фону та використовувати їх для створення звіту!

Шпаргалка формул Excel: Посібник середнього рівня

Шпаргалка формул Excel: Посібник середнього рівня

Шпаргалка формул Excel: Посібник середнього рівня

Календарна таблиця LuckyTemplates: що це таке та як ним користуватися

Календарна таблиця LuckyTemplates: що це таке та як ним користуватися

Календарна таблиця LuckyTemplates: що це таке та як ним користуватися

Python у LuckyTemplates: як встановити та налаштувати

Python у LuckyTemplates: як встановити та налаштувати

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

Розрахунок динамічної норми прибутку – легкий аналіз LuckyTemplates за допомогою DAX

Розрахунок динамічної норми прибутку – легкий аналіз LuckyTemplates за допомогою DAX

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

Сортування стовпців таблиці дат у LuckyTemplates

Сортування стовпців таблиці дат у LuckyTemplates

Дізнайтеся, як правильно сортувати поля зі стовпців розширеної таблиці дат. Це хороша стратегія для складних полів.

Знайдіть свої найкращі продукти для кожного регіону в LuckyTemplates за допомогою DAX

Знайдіть свої найкращі продукти для кожного регіону в LuckyTemplates за допомогою DAX

У цій статті я поясню, як знайти найпопулярніші продукти для регіону за допомогою обчислень DAX у LuckyTemplates, включаючи функції TOPN і CALCULATE.

Вимір сміття: що це таке і чому це щось інше, але не сміття

Вимір сміття: що це таке і чому це щось інше, але не сміття

Дізнайтеся, як використовувати вимірювання сміття для позначок низької потужності, які ви хочете ефективно включити у свою модель даних.