Доля категории в DAX: какой фильтр убрать из знаменателя
В сводной нужно показать долю категории в продажах выбранного региона за месяц. Если убрать все фильтры из знаменателя, получится доля во всей истории компании. Если не убрать фильтр категории, каждая строка даст 100%. Для правильной доли надо точно определить, какой фильтр снимается.
Запишите знаменатель словами
Пусть пользователь выбрал ноябрь и регион Север. В строке «Оборудование» числитель — выручка оборудования в этом регионе и месяце. Знаменатель — выручка всех категорий в том же регионе и месяце. Только фильтр категории должен быть снят.
В модели категория находится в отдельном справочнике Category, который связан с Sales. Период и регион приходят из своих справочников. Такое разделение делает управление контекстом понятнее: каждая ось отвечает за собственный набор строк факта.
Снимите фильтр только категории
CALCULATE вычисляет выражение в изменённом контексте. REMOVEFILTERS(Category) снимает фильтры таблицы категорий, сохраняя фильтры периода и региона. Затем DIVIDE делит выручку текущей строки на этот знаменатель. В редакторах DAX разделитель аргументов зависит от настроек.
Если справочник содержит и категорию, и подкатегорию, снятие всей таблицы уберёт оба фильтра. Если нужна доля подкатегории внутри категории, правило будет другим: сохраняют категорию и снимают только нужную ось. Не копируйте формулу доли без определения знаменателя.
Revenue := SUM(Sales[Revenue])
CategoryShare := DIVIDE([Revenue], CALCULATE([Revenue], REMOVEFILTERS(Category)))
Отличайте долю всех категорий и выбранных
При срезе категорий A и B возникают два допустимых вопроса: доля A во всех категориях или только среди выбранных. REMOVEFILTERS даёт первый вариант. Для второго требуется другое управление контекстом, например продуманное применение ALLSELECTED. Название показателя должно объяснять, какой вариант выбран.
В статье используем долю во всех категориях для выбранных региона и периода. Тогда исключённая срезом категория остаётся в знаменателе. Пользователь не должен ожидать, что показанные строки обязательно сложатся в 100%, если часть категорий скрыта.
Проверьте числа на разных срезах
В ноябре на Севере A продана на 100, B на 300: доли 25% и 75%. На Юге A на 300, B на 100: доли 75% и 25%. Если знаменатель случайно потеряет регион, у A на Севере получится 12,5% вместо 25%.
Добавьте ещё один месяц с другими суммами и выберите его срезом. Доля должна пересчитаться в пределах нового периода. Затем проверьте общий итог: при показе всех категорий он должен отражать отношение общей выручки к тому же знаменателю, а не сумму вручную вычисленных процентов.
Для нулевого знаменателя решите, как показывать отсутствие отношения. DIVIDE без альтернативы вернёт BLANK. Ноль в этом месте мог бы означать известную нулевую долю и потому требует отдельного согласования.
Сохраните контрольную матрицу регионов и категорий вместе с книгой. После изменения модели или общего среза она поможет проверить, что показатель сохранил смысл. Пользователю важна доля именно выбранного бизнеса, а не технически корректный процент по случайно оставшемуся контексту.
Соберите обновляемый отчёт на практике
В платном курсе есть урок о CALCULATE и доле категории, а затем дашборд с общими срезами. Вы проверите влияние фильтров на выручку, маржу и выполнение плана. Такая практика помогает согласовать знаменатель показателя и убедиться, что он сохраняет смысл при выборе региона и периода.
Откройте программу курса «Продвинутый Excel: Power Query, Power Pivot и автоматизация отчётов».
Начните с пробного урока о рабочей книге и первом запросе Power Query.
Для следующего этапа: объединение файлов из папки и обновление отчёта.
Продолжить на практике
- Продвинутый Excel: Power Query, Power Pivot и автоматизация отчётов ↗
Научитесь собирать и обновлять рабочие отчёты в Excel. Power Query для загрузки и очистки данных, сложные формулы, Power Pivot и DAX для расчётов. Практикумы по продажам, остаткам и закупкам, план-факту подразделений.
