Використовуйте IsInScope, щоб отримати правильний рівень ієрархії в DAX - Kasper On BI

У листопадовому випуску робочого столу Power BI ми представили новий вираз DAX, який справді чудовий. Робота з ієрархіями в DAX завжди була певною проблемою, особливо в сценарії, коли вам потрібно змінити свій розрахунок на основі рівня, на якому ви перебуваєте.

Сценарій

Давайте розглянемо сценарій, коли для бізнесу існують деякі спеціальні правила для підрахунку підсумків. Для кожного підсумку в ієрархії результати розраховуються заздалегідь (проста сума буде неправильною), не на відміну від одинарних операторів або спеціальних ролей, як ми їх маємо в AS Multi Dimensions.

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

isinscope

Для кожного рівня в ієрархії ми маємо значення в таблиці фактів:

Далі я створюю відносини та створюю ієрархію .

Нарешті я перетягую стовпець Значення та Ієрархію в матрицю (я також увімкнув значки +/-, щоб ми могли розгорнути згортання, що є ще однією особливістю листопада). Перше, що ми бачимо, це те, що матриця виглядає дивно із пробілами та іншим.

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

DAX

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

Як варіант, ми можемо перевірити, чи перебуваєте ви на рівні, підрахувавши кількість значень для певного стовпця. Якщо це 1, ви знаєте, що ви на цьому рівні. DAX буде виглядати так:

Захід 2 =
ЯКЩО (
ОБРАХУВАТИ (
ЗНАЧЕННЯ (ЦІННОСТІ (Продавці [Продавець])),