кавер статті 15

Створення фільтра на основі мір в Power BI


Якщо ви - користувач із досвідом роботи в Power BI і маєте за плечима декілька створених дашбордів, ви, напевно, знаєте, наскільки важливо використовувати фільтри для створення зручних і адаптивних звітів. Фільтри дозволяють кожному користувачу отримувати лише ту інформацію, яка є для нього актуальною.

Що таке фільтри?

Фільтри - це чарівна паличка-виручалочка для будь-кого з нас. Навіть у повсякденному житті ми постійно використовуємо фільтри. Наприклад, для того, щоб серед нескінченної кількості товарів, які можна знайти в інтернет-магазині, вам в результаті пошуку видало лише ноутбуки з певними характеристиками, вам потрібно деталізувати параметри, за якими ви обираєте модель (ОП, ціна, бренд, наявність тощо). Тобто ви відсіюєте дані, які в даний момент вам не потрібні. Це і є фільтрація. У звітах Power BI можна створювати фільтри, які працюють за схожим принципом.

А тепер повернемось до технічної частини. Ось наш план:

Типи фільтрів

Особисто я б розділила фільтри в Power BI на два типи: ті, що формуються на основі сталих даних та ті, що формуються на основі змінних.

Що я маю на увазі під сталими даними? Наприклад, дані з певної колонки таблиці або довідника. Однозначно, ви скажете, що й дані в таблицях можуть змінюватись і, відповідно, дані у фільтрі теж. І я з цим погоджуюсь. Але ці дані будуть змінюватись в момент оновлення моделі даних і надалі знову будуть незмінними. Давайте надалі називати такі фільтри статичними. Приклад статичного фільтру - фільтр по джерелам трафіку. В цьому фільтрі виводяться лише наявні значення з довідника\колонки, наприклад, google \ cpc, google \ organic.

Статичні фільтри доволі легкі в реалізації, тому зупинятись на цьому ми не будемо.
Але варто уточнити, що єдиний мінус статичних фільтрів - вони не завжди закривають всі задачі. У цій статті ми розберемо інший тип фільтрів, який закриває задачу фільтрації даних, що змінюються.

Частина даних, що може змінюватись динамічно в Power BI - це міри. І як раз фільтри на основі міри або декількох мір в рамках цієї статті давайте назвемо динамічними.

Вони є незамінними у випадках, коли дані залежать від інших параметрів чи обчислень. Декілька реальних прикладів для використання динамічних фільтрів:

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

Давайте розберемо спосіб реалізації такого типу фільтру на останньому прикладі.

Припустимо, нам потрібно вивести продажі по категоріям товарів у порівнянні з попереднім періодом та оцінити відсоток відхилень по продажам. Оцінювати відхилення ми будемо в рамках сформованих сегментів:

  • Critical Deviation: Відхилення нижче -40%.
  • Moderate Deviation: Відхилення в межах від -20% до -40%.
  • Minor Deviation: Відхилення в межах від -20% до 0.
  • Positive Deviation: Відхилення більше 0.

Покрокова реалізація динамічного фільтру в Power BI

1. Створення мір

В нашій задачі для початку потрібно розрахувати міру, яка відображає ступінь відхилення:

dax
Deviation From Previous Period = 
DIVIDE(
    [Purchases] - [Purchases prev],
    [Purchases prev],
    0
)
  • [Purchases] — міра, яка обчислює загальну кількість продажів у поточному періоді.
  • [Purchases prev] — міра, що розраховує кількість продажів за попередній період (по суті, це розрахунок міри [Purchases] , але з активацією зв’язку з датою, яка відображає попередній період для обчислень.
  • DIVIDE — функція, яка забезпечує безпечний поділ; якщо Purchases prev дорівнює нулю, результатом буде 0.

Ця міра дозволяє оцінити, на скільки відсотків змінилися продажі між періодами.

Я пропустила розрахунок самих продажів, бо в кожного він може бути різним, але для спрощення сприйняття інформації додам скріншот з таблицею, куди я додала ці дані:

15.1

Далі створюється міра для сегментації відхилень за рівнями:

  • Critical Deviation: Відхилення нижче -40%.
  • Moderate Deviation: Відхилення в межах від -20% до -40%.
  • Minor Deviation: Відхилення в межах від -20% до 0.
  • Positive Deviation: Відхилення більше 0.
dax
Filtered Purchases % = 
SWITCH(
    TRUE(),
    SELECTEDVALUE(ProductCategoryFilter[Filter]) = "Moderate Deviation" && [DeviationFromPreviousPeriod] < -0.20 && [DeviationFromPreviousPeriod] >= -0.40, 1,
    SELECTEDVALUE(ProductCategoryFilter[Filter]) = "Critical Deviation" && [DeviationFromPreviousPeriod] < -0.40, 1,
    SELECTEDVALUE(ProductCategoryFilter[Filter]) = "Minor Deviation" && [DeviationFromPreviousPeriod] >= -0.20 && [DeviationFromPreviousPeriod] <= 0, 1,
    SELECTEDVALUE(ProductCategoryFilter[Filter]) = "Positive Deviation" && [DeviationFromPreviousPeriod] > 0, 1,
    SELECTEDVALUE(ProductCategoryFilter[Filter]) = "All", 1,
    0
)

Я використовую 1 для того, щоб виділити категорії, які відповідають певному ступеню відхилення. у даному випадку 1 це True в бінарній систем, і далі по ній ми будемо виводити категорії товарів у таблиці.

Я думаю, ви звернули увагу на те, що в останній мірі в мене не 4, а 5 сегментів. Для своєї зручності я додала ще варіант, коли у фільтрі можливо вибрати відображення всіх даних (All).

2. Створення таблиці для інтерактивного фільтра

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

dax
PurchasesFilter = 
DATATABLE(
    "Filter", STRING,
    { 
        {"Moderate Deviation"},
        {"Critical Deviation"},
        {"Minor Deviation"},
        {"Positive Deviation"},
        {"All"}
    }
)
  • DATATABLE створює таблицю прямо в моделі даних Power BI.
  • Колонка Filter містить текстові значення, які відображаються в фільтрі.

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

3. Інтеграція у звіт

Перевірка відображення даних

Тимчасово додайте міру Filtered Purchases % до вашої основної таблиці та перевірте, що міра повертає правильні значення для різних сегментів у фільтрі Purchases filter.

15.2

У нашому випадку, перевіримо дані за листопад та жовтень.

Якщо у фільтрі вибрати Critical Deviation, то значення 1 буде присвоєно лише тим категоріям, у яких Deviation From Previous Period < -40%, наприклад, для категорій Accessories та Perfume, Positive Deviation - для Decorative Cosmetics та Haircare відповідно.

15.gif 1

Після перевірки ви можете видалити Filtered Purchases % з таблиці. Але для того, щоб в таблиці виводились лише необхідні дані з певного сегменту, нам потрібно додати умову на рівні таблиці, що Filtered Purchases % is 1.

15.gif 2

Фіналізація таблиці

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

15.3

На цьому етапі у вас може виникнути логічне питання: ми прописали статичні сегменти відхилень і використовуємо їх у фільтрі, то чому ж ми подаємо їх як динамічні?

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

15.gif 3

Наприклад, обираємо google \ cpc і бачимо, що саме для цього джерела трафіку Positive Deviation у листопаді було лише для Decorative Cosmetics, а Haircare відсутнє в таблиці за даних умов через те, що продажі були з іншого джерела.

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

Висновок

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

Спробуйте додати динамічні фільтри до свого наступного звіту в Power BI і розкажіть мені в коментарях як це було)


Завантаження коментарів…