← Все курсы · Курс Power BI · Все руководства

SWITCH TRUE в DAX: сегментация и полоса, которая никогда не появляется

Первый матч выигрывает, поэтому порядок, в котором вы их записываете, является логикой. · Часть Analyst Prep Kit

К , аналитик данных · Опубликовано

К концу этой страницы вы сможете заменить любую кучу вложенных IF одним читаемым SWITCH, объединить числовой столбец в согласующиеся сегменты и обнаружить ошибку упорядочивания, которая автоматически отправляет двенадцать заказов в группу, рассчитанную на шесть. Наши шестнадцать заказов разделили 6, 6 и 4 на три диапазона доходов. Написанные в неправильном порядке одни и те же три условия дают 0, 12 и 4, нигде без ошибок.

Вот чем на самом деле заняться сегодня. Найдите в вашей модели любое вложенное ЕСЛИ глубиной более двух уровней и перепишите его как SWITCH(TRUE(), ...). Затем прочитайте свои условия сверху вниз и убедитесь, что каждое из них является более строгим, чем то, что находится под ним. Этот второй шаг занимает десять секунд и представляет собой всю проверку безопасности.

Краткая версия: SWITCH проверяет условия в том порядке, в котором вы их написали, и останавливается на первом истинном. Все, что ниже условия, которое уже соответствует, недостижимо.

Победы в первом матче – это все поведение, поэтому оно дает представление о картине.

The first gate that closes catches it A single ball falls down a vertical path through a stack of four horizontal barriers. At the top, a faint outlined circle marks where the ball started. The first barrier is drawn as two short bars with a clear gap in the middle, so the dashed falling path passes straight through it. The second barrier is a single unbroken bar spanning the full width, and a solid filled ball rests on top of it, having been stopped there. Below the second barrier the falling path continues only as a very faint dotted line, and the third and fourth barriers are drawn in a washed-out grey, much lighter than the two above them, so they read as never reached rather than as passed. Nothing appears below the fourth barrier.
Значение не соответствует условиям в том порядке, в котором вы их написали. Первое условие является ложным, поэтому в нем есть пробел, и значение выпадает. Второе верно, поэтому оно улавливает значение и возвращает результат. Два приведенных ниже условия никогда не проверяются, что бы там ни говорили, поэтому широкое условие, помещенное над узким, делает узкое недостижимым.
Что вы узнаете
  1. Сколько стоит вложенный IF
  2. ПЕРЕКЛЮЧИТЕ значение, простая форма
  3. SWITCH TRUE, для условий вместо значений
  4. Ошибка заказа в действительных числах
  5. Столбец или показатель: где живет сегмент
  6. Бандинг по мере и отключенная таблица
  7. Типы данных, пробелы и ветвь Еще
  8. Полное до и после
  9. Крайние случаи, которые застают людей врасплох
  10. Почему это работает
  11. Использование этого на вашей собственной модели
  12. Все на одном экране
Каждая цифра на этой странице реальна, и каждое правило задокументировано. Шестнадцать заказов (один и тот же крепеж используется в этих направляющих), всего 9890 штук. Приведенное здесь поведение DAX взято из ссылки Майкрософт ПЕРЕКЛЮЧАТЕЛЬ, а не из привычки. SQL-двойник этой страницы: Сегментация с помощью CASE, который имеет то же правило победы в первом матче и ту же ловушку.

Вот шестнадцать отсортированных доходов от заказов — это все, что нужно этой странице.

240  280  425  440  440  480  510  600  660  660  680  765  850  880  880  1100

1. Сколько стоит вложенный IF

Перед сравнением: вот трехполосная сегментация, записанная с помощью ПЧ. Прочтите его и скажите, насколько вы уверены в том, что пороговые значения соответствуют вашим представлениям.

Order Size =
IF (
    Orders[Revenue] < 500,
    "Small",
    IF (
        Orders[Revenue] < 800,
        "Medium",
        "Large"
    )
)

Это правильно, и на трёх полосах уже трудно читать. При пяти полосах это пять уровней отступов, закрывающие скобки накапливаются, а добавление полосы посередине означает повторное вложение всего, что находится под ней. Логика в порядке; форма – это проблема.

Для этого существует SWITCH. В справочнике Майкрософт это описывается как оценка «выражения по списку значений» и возврат одного из нескольких результатов, и прямо говорится, что его «можно использовать, чтобы избежать наличия нескольких вложенных операторов IF». Та же логика, плоская.

За вложение, выходящее за пределы читабельности, приходится платить реальную цену. Вложенный IF скрывает порядок условий внутри своей структуры, поэтому вопрос «какое условие проверяется первым» требует предварительного чтения. ПЕРЕКЛЮЧАТЕЛЬ помещает их в список сверху вниз, и порядок становится тем, что вы можете проверить, просканировав левый край. Четвертый раздел объясняет, почему это важно.

2. ВКЛЮЧИТЕ значение, простая форма

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

Простая форма SWITCH принимает выражение, а затем пары значения и результата с необязательным окончательным обобщением.

SWITCH ( <expression>, <value>, <result> [, <value>, <result> ] … [, <else> ] )
Product Line =
SWITCH (
    Products[Product],
    "Desk",  "Furniture",
    "Chair", "Furniture",
    "Lamp",  "Lighting",
    "Unclassified"
)

Прочтите как поиск: возьмите товар, найдите его в списке, верните то, что рядом. Последний аргумент сам по себе, не имеющий перед ним никакого значения, — это Еще: что возвращать, если ничего не найдено. Оставьте это, и в ссылке Майкрософт будет подробно описано, что происходит: «Если ни одно из значений не совпадает, а остальное не указано, возвращается BLANK».

Эта форма делает только равенство. Он сравнивает выражение с каждым значением и ищет точное совпадение, поэтому не может выразить «больше 500». Для этого вам понадобится форма в следующем разделе, которую вы будете использовать чаще всего.

Примечание о том, где находится этот конкретный пример. Сопоставление продуктов с категориями лучше выполнять в виде столбца таблицы «Продукты», чем вообще в виде DAX, по причинам, описанным в руководство по звездообразной схеме. SWITCH предназначен для логики, которая действительно принадлежит модели, а не для справочной таблицы, которую кто-то еще не построил.

3. ПЕРЕКЛЮЧИТЕ TRUE для условий вместо значений.

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

Помещать TRUE(). Затем каждая позиция «значения» содержит условие, которое оценивается как Верно или Неверно, и SWITCH сравнивает его с TRUE. Первое условие, которое является истинным, побеждает. В справочнике Майкрософт прямо упоминается этот шаблон: «Обычно эта функция используется для установки первого параметра в значение TRUE».

Order Size =
SWITCH (
    TRUE (),
    Orders[Revenue] < 500, "Small",
    Orders[Revenue] < 800, "Medium",
    "Large"
)

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

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

Размер заказаЗаказыВыручкаДелиться
Маленький, до 50062,30523.3%
Средний, от 500 до 79963,87539.2%
Большой, 800 и более43,71037.5%
Общий169,890100%

При любой сегментации стоит провести две проверки, и они требуют одного взгляда. В сумме их количество составит 16 — количество строк, с которых вы начали, поэтому ни один заказ не был удален. А выручка составит 9890, так что ни один заказ не будет засчитан дважды. Сегментация, которая не прошла ни одну проверку, имеет пробел или перекрытие в своих условиях.

Скажите вслух, почему состояние полосы «Среднее» записано как < 800 скорее, чем >= 500 && < 800. Это потому, что все, что меньше 500, уже было перехвачено линией выше и никогда не достигнет этой. В этом вся экономика паттерна, и именно это делает возможным следующий раздел.

4. Ошибка упорядочивания действительных чисел.

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

Оно ничего не получает. Не ошибка, не предупреждение: ноль строк, навсегда.

Order Size Broken =
SWITCH (
    TRUE (),
    Orders[Revenue] < 800, "Medium",     -- catches everything under 800
    Orders[Revenue] < 500, "Small",      -- unreachable
    "Large"
)
Размер заказаПравильный порядокОбменённый заказ
Маленький6 заказов, 23050 заказов, 0
Средне6 заказов, 387512 заказов, 6 180
Большой4 заказа, 37104 заказа, 3710
Общий16 заказов, 9 89016 заказов, 9 890

Посмотрите на нижнюю строку сломанного столбца. Шестнадцать заказов, 9890 выручки. Примирение все еще проходит. Ничего не пропало и ничего не учитывается дважды; заказы просто не в тех корзинах. Обе проверки из последнего раздела удовлетворяют совершенно неправильной сегментации, и именно поэтому эта ошибка выдерживает проверку.

В справочнике Майкрософт указано это правило и содержится то же предупреждение: «Порядок условий имеет значение. Как только одно значение совпадает, соответствующий результат возвращается, а другие последующие значения не оцениваются. Убедитесь, что наиболее ограничительные значения, подлежащие оценке, указаны перед менее ограничительными значениями». Собственный пример документации имеет ту же форму, что и наш, с примечанием, что его второй результат «никогда не возвращается».

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

Размер заказаЗаказыСамый маленькийСамый большой
Маленький6240480
Средне6510765
Большой48501,100

Теперь полосы можно рассматривать в соответствии с их собственными определениями. Смолл достигает максимума в 480, ниже порога в 500. Средне работает с 510 по 765 внутри своего окна. Большой начинается с 850. Запустите это один раз, когда вы пишете сегментацию, и ошибка упорядочивания не может ее пережить.

Теперь представьте себе самый длинный SWITCH или вложенный ЕСЛИ. Сканируйте его условия сверху. Каждый из них уже, чем тот, что под ним, или кто-то добавил полосу позже, не перемещая ее?

5. Столбец или показатель: где живет сегмент

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

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

Вы хотите Использовать Почему
Разрезать или сгруппировать по сегментамРасчетный столбецСрезам и осям нужны сохраненные значения.
Показать метку, которая зависит от отфильтрованного итогаМераОтвет меняется в зависимости от фильтров визуального элемента.
Раскрасьте карту по производительностиМераУсловное форматирование принимает меру.
Группируйте необработанное значение, которое никогда не меняетсяРасчетный столбецВычисляется один раз при обновлении, что упрощает фильтрацию.

Различие такое же, как и с другой стороны. Столбцы против мер, и решается одним вопросом: зависит ли ответ от того, что отфильтровал зритель? Размер нашего заказа не имеет значения. Порядок 440 мал, независимо от того, нажимает ли зритель, поэтому это столбец.

Вот сегмент, который действительно должен быть мерой, поскольку он зависит от отфильтрованного итога, а не от одной строки.

Rep Tier =
SWITCH (
    TRUE (),
    [Total Revenue] >= 3000, "Top",
    [Total Revenue] >= 2000, "Middle",
    "Building"
)
ПредставительОбщий доходУровень репутации
Прия Шах3,040Вершина
Оуэн Парк2,670Середина
Дана Рейес2,495Середина
Сэм Окафор1,685Здание
Все представители9,890Вершина

Прочтите весь ряд, потому что это то, что цепляет людей. Без повторного фильтра, [Total Revenue] составляет 9890, что превышает 3000, поэтому в качестве меры указано «Верх». Это арифметически правильно и бессмысленно как ярлык для всей компании. Любая мера, возвращающая категорию, требует рассмотрения общей строки и часто подавляется с помощью проверки, например IF ( HASONEVALUE ( Reps[Rep] ), <the switch> ).

6. Бандинг по мере и отключенный стол

Перед проблемой: вам нужна гистограмма с полосами размера заказа на оси, где полосы основаны на показателе, а не на сохраненном столбце. Скажите, почему мерка из последнего раздела не пойдет по оси.

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

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

Bands =
DATATABLE (
    "Band",  STRING,
    "Sort",  INTEGER,
    "Min",   INTEGER,
    "Max",   INTEGER,
    {
        { "Small",  1,   0,  499 },
        { "Medium", 2, 500,  799 },
        { "Large",  3, 800, 99999 }
    }
)

Помещать Bands[Band] на оси, отсортировано по Bands[Sort], затем напишите меру, которая подсчитывает заказы, попадающие в ту строку полосы, в которой она находится в данный момент.

Orders in Band =
VAR Lo = MIN ( Bands[Min] )
VAR Hi = MAX ( Bands[Max] )
RETURN
    CALCULATE (
        COUNTROWS ( Orders ),
        FILTER ( ALL ( Orders[Revenue] ),
                 Orders[Revenue] >= Lo && Orders[Revenue] <= Hi )
    )
-- 6, 6, 4

Две вещи помогают этому работать. Таблица диапазонов не имеет связи, поэтому ее строки не фильтруют заказы самостоятельно, а MIN и MAX прочитайте из него пороговые значения текущей строки. И ALL(Orders[Revenue]) сначала очищает любой существующий фильтр дохода, поэтому каждая полоса учитывается по всему столбцу, а не по уже ограниченной оси. Это РАСЧЕТНАЯ техника от контекстное руководство фильтра делает именно то, для чего он был создан.

Плюсом является то, что пороговые значения теперь живут в таблице, а не в коде. Измените значение с 500 на 600 в таблице диапазонов и каждое визуальное обновление без изменения меры. Поместите строки таблицы групп в срез, и пользователь сможет выбрать их самостоятельно.

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

7. Типы данных, пробелы и ветка Еще

Перед правилами: вы пишете ПЕРЕКЛЮЧАТЕЛЬ, где один результат — строка, а другой — число. Предскажите, запустится ли он.

Это не так. Ссылка Майкрософт однозначна: «Все результирующие выражения и выражение Еще должны иметь один и тот же тип данных», и на странице отображается именно эта ошибка: SWITCH возвращает «Большой» в одной ветви и 0,1 в другой. Это обычная случайность, когда кто-то добавляет числовой запасной вариант к сегментации текста.

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

Ни одно совпадение и никакое другое не дает ПУСТО. Обычно это не то, что вам нужно для сегментации, поскольку строки с пустыми метками скрыты многими визуальными элементами, а заказы внутри них исчезают из отчета, хотя все еще учитываются в общем итоге. Всегда пишите Еще, даже если там написано «Неклассифицировано», потому что явный сегмент, который вы видите, лучше молчаливого, который вы не можете видеть.

Пустой ввод соответствует неправильному диапазону. В DAX пустое число при числовом сравнении сравнивается с нулем, поэтому заказ без дохода удовлетворяет требованиям. < 500 и приземляется в Смолл. Если пустое значение означает «неизвестно», а не «ноль», сначала проверьте его: поместите ISBLANK(Orders[Revenue]), "Unknown" как самое первое условие, где его узость приносит ему первое место.

Условия могут сочетаться. Каждое условие представляет собой обычное логическое выражение, поэтому && и || работа: Orders[Revenue] >= 800 && RELATED ( Products[Category] ) = "Furniture", "Large furniture". Просто помните, что сложное условие обычно более строгое, поэтому оно выше простых.

Полное до и после

Оба раза одно и то же требование: заказы группы по размеру и отчет о доходах по группам.

До

Order Size =
IF ( Orders[Revenue] < 800, "Medium",
     IF ( Orders[Revenue] < 500, "Small", "Large" ) )
Small     0 orders          0
Medium   12 orders      6,180
Large     4 orders      3,710
Total    16 orders      9,890

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

после

Order Size =
SWITCH (
    TRUE (),
    ISBLANK ( Orders[Revenue] ),  "Unknown",
    Orders[Revenue] < 500,        "Small",
    Orders[Revenue] < 800,        "Medium",
    "Large"
)
Band      Orders   Revenue   Smallest   Largest
Small          6     2,305        240       480
Medium         6     3,875        510       765
Large          4     3,710        850     1,100
Total         16     9,890        240     1,100

Плоский, упорядоченный сначала по узким, с явным сегментом для пропущенных значений и универсальным элементом внизу. Два дополнительных столбца представляют собой обзор: фактический диапазон каждой полосы находится внутри своего собственного определения, поэтому порядок скорее проверяется, чем предполагается. Добавление четвертой полосы — это одна строка, в нужном месте.

Крайние случаи, которые застают людей врасплох

Шесть, каждая из которых стоила кому-то дня.

Добавление группы позже без ее перемещения. Вот как на самом деле происходит ошибка заказа в реальных моделях. Никто не записывает условия наоборот; кто-то добавляет более узкую полосу внизу шесть месяцев спустя. Перечитывайте весь список каждый раз, когда дополняете его.

Перекрытие порогов. <= 500 затем >= 500 помещает 500 только в первую полосу, что оправдано и часто не соответствует тому, что имелось в виду. Напишите полосы как «под X» до конца, чтобы границы не могли перекрываться по конструкции.

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

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

ПЕРЕКЛЮЧИТЕ меру без защиты HASONEVALUE. В итоговой строке оценивается показатель без фильтра, который почти всегда попадает в верхнюю полосу и помечает всю компанию как «Топ».

Пороги взял из воздуха. 500 и 800 — круглые цифры, а не выводы. Если полосы должны что-то означать, извлеките их из распределения, а это и есть то, что нужно. Выбор порогов из данных и процентили предназначены для.

Почему это работает

Победы в первом матче — это не особенность DAX. Это стандартная семантика защищенного условного оператора, разделяемая поисковыми запросами SQL. CASE, к if/elif цепочки в Python и сопоставление с образцом в большинстве языков: условия упорядочены, вычисление останавливается при первом успехе, а все, что ниже, недостижимо. Вот почему это общее поведение SQL-версия этой страницы описывает идентичную ошибку с одинаковыми номерами и объясняет, почему привычка к чтению обусловливает передачу с самого узкого подхода между всеми инструментами, которые вы будете использовать.

Причину, по которой ошибка выдерживает проверку, стоит назвать отдельно, поскольку речь идет о проверке, а не о синтаксисе. Очевидная проверка сегментации заключается в том, что счетчики суммируются и итоговые суммы согласуются, а неправильно упорядоченный SWITCH проходит и то, и другое. Сверка подтверждает, что ничего не потеряно и не продублировано; он ничего не говорит о том, правильно ли были назначены строки. Проверка, которая работает, описана в четвертом разделе: сообщите фактический минимум и максимум каждой полосы и сравните их с собственным определением полосы. Это общий принцип, который стоит принять во внимание, поскольку одни и те же рассуждения применимы к любому классификация.

Все, что относится к DAX на этой странице, относится к поведению продукта, поэтому авторитетным источником является собственная ссылка Майкрософт. Правило порядка имеет значение, пустой возврат, когда ни одно значение не соответствует и ничего не указано, требование одинакового типа данных и SWITCH(TRUE()) Все шаблоны цитируются выше на странице SWITCH в справочнике DAX.

Одно замечание о том, почему эта страница продолжает просить вас предсказать, прежде чем показать вам ответ. Попытка дать ответ до того, как вы увидите правильный, достоверно повышает, насколько хорошо сохраняется правильный ответ, даже если попытка неверна (Бисра, Лю, Несбит, Салими и Винн, 2018, Обзор педагогической психологии, 30(3), 703–725). Пустой Малый диапазон остается, потому что вас попросили предсказать его, прежде чем вы увидите, что общие суммы все еще согласуются.

Использование этого на вашей собственной модели

Переписывать все условия в унаследованной модели — это ужасно, и вы остановитесь на четвертом. Вместо этого сделайте это по порядку.

  1. Найдите самое глубокое вложенное ЕСЛИ в вашей модели и перепишите ее как SWITCH(TRUE(), ...). Скорее всего, именно он скрывает неправильно упорядоченное условие.
  2. Прочтите условия сверху вниз и убедитесь, что каждый уже, чем тот, что ниже. Это весь обзор.
  3. Добавьте столбцы мин и макс. к любому отчету с полосами один раз и посмотрите на них. Затем удалите их, если хотите; вы уже получили то, для чего они были.
  4. Напишите явное Еще, всегда, даже если написано «Несекретно». Видимое ведро лучше пустого.
  5. Добавить столбец сортировки к любой полосе, которая появится на оси, прежде чем кто-нибудь увидит Большой, Средний, Маленький.

Если у вас под рукой есть бумага, один дополнительный рисунок стоит пяти минут. Нарисуйте свои собственные полосы в виде числовой линии с отмеченными пороговыми значениями, затем напишите рядом с ней условия ПЕРЕКЛЮЧЕНИЯ в том порядке, в котором вы их написали. Везде, где линия перекрыта дважды, это недоступная полоса, и на бумаге это гораздо более очевидно, чем в коде.

Подробнее об этом и еще что-нибудь подобное. Все инструкции находятся в одном месте на индекс направляющих: SQL, Python, Excel, Power BI и связанные с ними рабочие привычки.

Все на одном экране

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

ИдеяЧто это значит
ВЫКЛЮЧАТЕЛЬ простой формыВыражение, затем пары значений и результатов, затем необязательное еще. Только равенство.
ПЕРЕКЛЮЧАТЕЛЬ(ИСТИНА())Каждый слот значения содержит условие. Документированный способ замены вложенных IF.
Победа в первом матчеОценка останавливается при первом истинном условии. Все, что ниже, никогда не тестировалось.
Заказать условияСначала самые строгие. Задокументирован и источник ошибки.
Баг, по нашим даннымПравильно: 6/6/4. Поменяно местами: 0/12/4. Оба согласованы по 16 ордерам, 9890.
Проверка, которая работаетУкажите наименьшее и наибольшее значение каждой полосы в соответствии с ее собственным определением.
Чек, которого нетСверка итогов. Неправильно заказанный SWITCH пропускает его.
Столбец или мераДля нарезки или группировки требуется столбец. Отфильтрованному итогу необходима мера.
Измерьте общий рядНефильтрованный, поэтому обычно попадает в верхнюю полосу. Охрана с помощью HASONEVALUE.
отключенная таблицаТаблица групп без связей, в которой имена групп располагаются по оси.
МИН и МАКС в полосовой мереСчитайте пороговые значения текущей строки диапазона из отключенной таблицы.
Тот же тип данныхВсе результаты и остальное должны совпадать. Напишите и пронумеруйте ошибки.
Больше нетВозвращает ПУСТО. Пустые строки скрываются в визуальных элементах. Всегда пишите другое.
Пустой вводСравнивается с нулем, поэтому попадает в самую нижнюю полосу. Сначала проверьте ISBLANK.
Объединение условий&& и || работа. Сложные условия уже, поэтому ставьте их выше.
Порядок сортировкиПолосы сортируются в алфавитном порядке без числового столбца сортировки.
Единственная привычка, которую следует сохранить. Каждый раз, когда вы пишете или редактируете SWITCH, читайте условия сверху и проверяйте, что каждое из них уже, чем приведенное ниже, а затем один раз выведите фактический минимум и максимум каждой полосы. Сверка итогов не выявит неправильно упорядоченную полосу, в отличие от этих двух проверок. Если сегментация нарушается таким образом, который не описан на этой странице, существует общая шлейф диагностики на предмет застревания.

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

Ссылки

Глубина вложенного IF составляет шесть уровней, и никто не может видеть, какая ветвь сработала.

Power BI для аналитиков составляет 187 страниц, SWITCH читается по ветке, поэтому читатель может проверить правило группирования.

Power BI для аналитиков, 19 долларов США →
Потренируйтесь в этом на модели перед собой.

тот Курс Power BI дает вам повторения: сегментации для записи и проверки, карточки с правилами упорядочивания и пустым возвратом, а также вопросы, которые задают вам вопрос, какая полоса пустует, прежде чем вы ее запустите. Теперь вы владеете методом; комплект - это практика. Ничего устанавливать, учетная запись не требуется.

Откройте комплект Power BI →