← Все курсы · Курс Power BI · Все руководства
SUM против SUMX в DAX: почему для построчного расчета нужен итератор
В конце этой страницы вы сможете просмотреть любую агрегацию DAX и сказать, какая из двух ей нужна, прежде чем писать ее. Вы также сможете обнаружить неправильный вариант в чужой модели, включая версию, которая возвращает число, достаточно близкое для прохождения. Это занимает около двадцати минут. Каждая цифра ниже напечатана рядом с арифметикой, в результате которой она была получена, поэтому вы можете проверить любую из них на бумаге.
Вот ход. Если число, которое вы хотите сложить, уже находится в столбце, используйте SUM(Orders[Units]). Если сначала необходимо проработать каждую строку, используйте SUMX(Orders, Orders[Units] * Orders[UnitPrice]): таблица, затем вычисления выполняются для каждой ее строки.
Краткая версия: SUM добавляет уже существующий столбец. SUMX строит значение для каждой строки, а затем складывает их.
Ошибку, возникающую из-за этого, стоит рассматривать как картинку, потому что арифметика объяснится сама собой, как только вы это сделаете.
- Развилка: число уже находится в столбце?
- Что SUM примет и не примет
- Ошибка: 2630, значит 12995.
- Почему никто не улавливает: вырежьте одну строку, и обе согласятся
- Что на самом деле делает SUMX в каждой строке
- Остальные члены семьи X
- Неправильное число, которое выглядит правильно: среднее значение процентов
- Когда СУММ является правильным ответом
- Полное до и после
- Крайние случаи, которые возвращают число вместо ошибки
- Почему это работает
- Использование этого на вашей собственной модели
- Все на одном экране
Заказы, таблица фактов. Шестнадцать рядов. Цена за единицу проставляется в строке, что и делает таблица заказов, чтобы более позднее изменение цены не переписывало прошлогодние продажи.
| ID заказа | Регион | Продукт | Единицы | Цена за единицу товара |
|---|---|---|---|---|
| 1001 | Север | Рабочий стол | 4 | 220 |
| 1002 | Юг | Стул | 10 | 85 |
| 1003 | Восток | Рабочий стол | 3 | 220 |
| 1004 | Север | Лампа | 6 | 40 |
| 1005 | Юг | Рабочий стол | 3 | 220 |
| 1006 | Восток | Стул | 8 | 85 |
| 1007 | Север | Стул | 5 | 85 |
| 1008 | Запад | Лампа | 12 | 40 |
| 1009 | Юг | Лампа | 7 | 40 |
| 1010 | Восток | Рабочий стол | 5 | 220 |
| 1011 | Север | Рабочий стол | 2 | 220 |
| 1012 | Запад | Стул | 9 | 85 |
| 1013 | Восток | Лампа | 15 | 40 |
| 1014 | Север | Стул | 6 | 85 |
| 1015 | Юг | Рабочий стол | 4 | 220 |
| 1016 | Запад | Рабочий стол | 2 | 220 |
Товары, таблица измерений, присоединенная «один ко многим» к заказам на продукт.
| категория | Продукт | Список цен | Затраты |
|---|---|---|---|
| Мебель | Рабочий стол | 220 | 140 |
| Мебель | Стул | 85 | 52 |
| Освещение | Лампа | 40 | 22 |
Всего 101 единица, и нигде нет столбца доходов. Доход — это число, которое вам нужно построить.
1. Развилка: номер уже в столбце?
Перед объяснением один вопрос, на который стоит ответить по памяти. Подумайте о последней мере, которую вы написали. Скажем, были ли уже где-то сохранены суммированные значения или модель должна была сначала проработать каждое из них.
Этот вопрос определяет, какую функцию вы достигнете, и на него есть два ответа.
Ответ первый: число уже находится в столбце. Единицы, выручка, количество, численность персонала. Кто-то сохранил это значение, по одному значению в каждой строке, и сложить его — это вся работа. Если это правда, ты хочешь SUM, и вы передаете ему колонку.
Ответ второй: номера пока не существует. Линейный доход, когда в таблице указаны только единицы измерения и цена. Маржа, когда стоимость находится на другой таблице. Взвешенная оценка, расширенная сумма, что угодно, в середине которой есть оператор. Если это правда, что-то должно посещать каждую строку, вычислять там значение и только затем складывать их. Это что-то SUMX.
Решающее значение между ними имеет не то, насколько сложной выглядит формула. Вопрос в том, можете ли вы указать на столбец на панели «Поля» и сказать «этот». Если можете, это СУММА. Если вместо этого вам нужно описать вычисление, то это SUMX.
Это важно, потому что неправильный выбор не всегда приводит к ошибке. Иногда он выдает число, и следующие три раздела посвящены тому, что это за число и почему оно выживает.
2. Что SUM примет, а что нет
Справочная страница Майкрософт по SUM содержит один параметр и описывает его в шести словах: «Столбец, содержащий числа для суммирования». Не выражение. Колонка.
Так что это не работает, и это самая распространенная вещь, которую вводит новый пользователь Power BI:
Revenue = SUM ( Orders[Units] * Orders[UnitPrice] )
Power BI отклоняет это сообщение, необычно прямое для механизма формул: Функция СУММ принимает в качестве аргумента только ссылку на столбец. В модели под названием ничего не хранится Units * UnitPrice, поэтому столбца для передачи нет.
Этот отказ является полезным результатом. Это останавливает вас в момент ошибки. Повреждающая версия — это та, которая компилируется, что происходит, когда кто-то пытается обойти ошибку, суммируя каждый столбец отдельно:
Revenue = SUM ( Orders[Units] ) * SUM ( Orders[UnitPrice] )
Два столбца, две допустимые суммы, одно умножение. Power BI принимает его без жалоб, поскольку в нем нет ничего плохого, как в DAX. Это неправильно только как арифметика.
3. Неудача: 2630 значит 12995.
Возьмите первые четыре заказа и сделайте это вручную. Четырех строк достаточно, чтобы проверить каждый шаг, а форма ошибки одинакова при шестнадцати строках или шестнадцати миллионах.
| ID заказа | Единицы | Цена за единицу товара | Линейный доход |
|---|---|---|---|
| 1001 | 4 | 220 | 880 (4 × 220) |
| 1002 | 10 | 85 | 850 (10 × 85) |
| 1003 | 3 | 220 | 660 (3 × 220) |
| 1004 | 6 | 40 | 240 (6 × 40) |
Правильный ответ 2,630, потому что 880 + 850 + 660 + 240 = 2630. Именно это и возвращает SUMX: он обрабатывает каждую строку, а затем складывает четыре результата.
Теперь версия, которая компилируется. SUM(Единицы) равна 4 + 10 + 3 + 6 = 23. SUM(Цена за единицу товара) равна 220 + 85 + 220 + 40 = 565. Умножьте их, и вы получите 12,995, потому что 23 × 565 = 12 995.
Прежде чем читать дальше, скажите, почему 12 995 намного больше, чем 2 630. Это не округление и не двойное соединение. Скажите, из чего состоят эти лишние 10 365?
Это пары, которых никогда не было. Умножение двух сумм аналогично суммированию каждого количества, пересекающегося с каждой ценой: четыре единицы заказа 1001 по цене 85 заказа 1002, шесть единиц заказа 1004 по розничной цене 220 и так далее для всех шестнадцати комбинаций. Четыре ряда образуют 4 × 4 = 16 пар. Только четыре из них настоящие, те, у которых количество и цена совпадают, и эти четыре — 2630.
Разрыв равен остальным двенадцати: 12 995 минус 2 630 = 10 365.
Запустите то же самое для всех шестнадцати заказов, и цифры станут громче. SUMX возвращает 9,890. SUM(Единицы) — 101, SUM(Цена за единицу товара) — 2125 и 101 × 2125 = 214,625. Шестнадцать рядов означают 16×16 = 256 пар, из них 240 — вымышленные.
Вот рабочая мера.
Total Revenue =
SUMX ( Orders, Orders[Units] * Orders[UnitPrice] )
Прочтите это как два аргумента, выполняющих две работы. Orders это стол, по которому можно ходить. Orders[Units] * Orders[UnitPrice] это расчет, который нужно бежать, стоя на каждом его ряду. SUMX добавляет шестнадцать результатов.
4. Почему никто не улавливает: разрежьте на одну строку, и обе согласятся
Прежде чем объяснение, предсказание. У вас есть визуальная таблица, показывающая доход, и вы детализируете ее до одного заказа, чтобы проверить показатель. Скажите, показывают ли сломанную версию и рабочую версию одно и то же число в этой ячейке.
Да, именно так, и именно эту часть стоит вынести со страницы.
Отфильтруйте визуальное изображение только по заказу 1001. SUMX проходит одну строку и возвращает 4 × 220 = 880. Разбитая мера вычисляет SUM(Единицы) по этой строке, которая равна 4, и SUM(Цена за единицу товара) по этой одной строке, которая равна 220, а затем умножается: 4 × 220 = 880. Идентично.
Это не совпадение в отношении этого приспособления. В одной строке доступна только одна пара, поэтому «каждая пара» и «настоящая пара» представляют собой один и тот же набор. Эти две меры не могут противоречить друг другу.
| На что нарезается визуальный элемент | Сломанная мера | Рабочая мера |
|---|---|---|
| Закажите 1001 самостоятельно | 880 | 880 |
| Заказ 1013 в одиночку | 600 (15 × 40) | 600 (15 × 40) |
| Светильники, четыре заказа | 6,400 (40 × 160) | 1,600 |
| Все шестнадцать заказов | 214,625 | 9,890 |
Световому ряду нужна своя линия, потому что именно она показывает, где заканчивается соглашение. Лампы четырех порядков по 6, 12, 7 и 15 штук, все по 40. СУММ дает 240 + 480 + 280 + 600 = 1600. Разбитая мера дает SUM(Единицы) = 40 и SUM(Цена за единицу товара) = 160 и 40 × 160 = 6400. В четыре раза больше, потому что четыре ряда означают шестнадцать пар, а реальными являются только четыре.
Таким образом, тест, который доказывает эффективность меры, — это тест, который не может потерпеть неудачу. Проверка одной строки пропускает меру, которая в общей сложности ошибочна в шестнадцать раз. Это та же форма, что и заливка Excel, первая строка которой правильная как в рабочей, так и в сломанной версии, и именно поэтому в конце этой страницы принято говорить об итогах, а не об осторожности.
5. Что на самом деле делает SUMX с каждой строкой
Майкрософт называет SUMX функция итератораи определяет категорию в одном предложении: «Функция DAX, которая перечисляет все строки заданной таблицы и оценивает заданное выражение для каждой строки».
Слово, которое имеет значение под этим, контекст строки. Контекст строки — это модель, которая знает, в какой строке она находится, что делает Orders[Units] означают число, а не целый столбец. В глоссарии Майкрософт это ясно сказано: контекст строки «представляет «текущую строку» и используется для оценки формул и выражений вычисляемых столбцов, используемых итераторами таблиц».
Итак, последовательность внутри SUMX(Orders, Orders[Units] * Orders[UnitPrice]) является:
- Возьмите строки заказов, которые прошли фильтры на визуальном элементе.
- Встаньте на первый.
Orders[Units]это 4 иOrders[UnitPrice]равно 220, поэтому выражение равно 880. - Переходите к следующему. Повторить. Шестнадцать раз.
- Сложите шестнадцать результатов и верните одно число.
Ничего не сохраняется. В конце столбца доходов нет, и в этом разница между ним и столбцом доходов. Расчетный столбец. Вычисляемый столбец вычислит 880 один раз, сохранит его в файле и будет использовать память навсегда. SUMX вычисляет его, когда визуальный элемент запрашивает, и отбрасывает его.
Лучше знать, чем узнавать одну вещь: контекст строки ничего не фильтрует. Расположение в строке 1001 не ограничивает другие таблицы этим порядком. Ссылка на меру внутри итератора меняет это, и это меняет молча, что является скрытым люком. РАСЧЕТ и фильтрация контекста. Прочтите это, прежде чем писать SUMX(Orders, [Some Measure]).
А теперь представьте, что это происходит на столе, который у вас есть. Возьмите свою собственную таблицу фактов, найдите в отчете одно число, которое нужно было вычислить, а не искать, и скажите вслух, по какой таблице будет идти SUMX и какое выражение будет в каждой строке. Две штуки, вот и весь звонок.
6. Остальные члены семьи X
SUMX не является чем-то особенным. У каждого агрегата в DAX есть двойник X, и все они принимают одни и те же два аргумента в одном и том же порядке: таблица, затем выражение для вычисления в каждой ее строке. Изучение SUMX научит вас всему этому одновременно.
| Обычная версия | Итератор | Доберитесь до итератора, когда |
|---|---|---|
SUM(col) | SUMX(table, expr) | Сначала необходимо рассчитать сумму для каждой строки. |
AVERAGE(col) | AVERAGEX(table, expr) | Вам нужно среднее значение расчета по строкам. |
MAX(col) | MAXX(table, expr) | Самое большое расчетное значение, а не самое большое сохраненное. |
MIN(col) | MINX(table, expr) | То же, в другую сторону. |
COUNT(col) | COUNTX(table, expr) | Подсчет строк, в которых выражение дает число. |
| никто | RANKX(table, expr) | Ранжирование по чему-то, что модель определяет для каждой строки. |
| никто | CONCATENATEX(table, expr, delim) | Превращение строк в одну читаемую строку для карточки. |
CONCATENATEX стоит попробовать в первую очередь, потому что он делает идею построчной записи наглядной. Он принимает необязательный третий аргумент, разделитель, и именно так в заголовке отчета вместо числа отображается «Стол, Стул, Лампа».
У AVERAGEX есть одно поведение, о котором стоит знать, прежде чем оно вас удивит в матрице. Майкрософт заявляет об этом прямо: «Когда нет строк для агрегирования, функция возвращает пустое значение. Когда есть строки, но ни одна из них не соответствует указанным критериям, функция возвращает 0». Пустая ячейка и нулевая ячейка означают разные вещи, и только одна из них рисует полосу.
7. Неправильная цифра, которая выглядит правильно: среднее процентное значение
До этого: для отчета требуется общий процент маржи. Кто-то записывает процент маржи для каждого заказа и усредняет его. Скажите, дает ли это тот же ответ, что и общая прибыль, деленная на общий доход.
Это не так, и в отличие от примера с доходами, разрыв здесь достаточно мал, чтобы его можно было отправить.
Стоимость зависит от продуктов, а не от заказов, поэтому маржа — это число, которое нигде не существует и которое необходимо создавать. RELATED это то, что позволяет строке Заказы читать строку своего собственного продукта на другой стороне отношения.
Total Margin =
SUMX (
Orders,
Orders[Units] * ( Orders[UnitPrice] - RELATED ( Products[Cost] ) )
)
На единицу то есть 220–140 = 80 на столе, 85–52 = 33 на стуле и 40–22 = 18 на лампе. В шестнадцати заказах имеется 23 письменных стола, 38 стульев и 40 светильников, поэтому общая прибыль равна 23 × 80 + 38 × 33 + 40 × 18 = 1840 + 1254 + 720 = 3,814.
Выручка 9890. Таким образом, смешанная маржа равна 3814 / 9890 = 38.56%.
Теперь версия, которая усредняется. Каждый заказ на стол выполняется по 80/220 = 36,36%, каждый стул по 33/85 = 38,82%, каждая лампа по 18/40 = 45,00%, независимо от количества. Существует семь заказов на столы, пять заказов на стулья и четыре заказа на лампы, поэтому:
Average Margin % =
AVERAGEX ( Orders, DIVIDE ( [Order Margin], [Order Revenue] ) )
| Продукт | Допуск % | Заказы | Вклад в средний |
|---|---|---|---|
| Рабочий стол | 36.36% (80 / 220) | 7 | 7 × 36.36 = 254.55 |
| Стул | 38.82% (33 / 85) | 5 | 5 × 38.82 = 194.12 |
| Лампа | 45.00% (18 / 40) | 4 | 4 × 45.00 = 180.00 |
| Общий | 16 | 628.66 / 16 = 39.29% |
39,29% против истинных 38,56%. Ошибочно на 0,73 процентных пункта и вполне правдоподобно в карточке на приборной панели.
Причину стоит сказать одной строкой, ведь это целый класс ошибок. Среднее значение дает каждому заказу один голос. Лампы занимают 4 из 16 заказов, поэтому они приносят 25% голосов, но приносят только 1600 из 9890 доходов, что составляет 16,18%. Лампы также имеют самый высокий процент маржи, поэтому их избыточный вес увеличивает средний показатель.
Отношение итогов не является суммой отношений. Исправление состоит в том, чтобы разделить один раз в конце:
Margin % = DIVIDE ( [Total Margin], [Total Revenue] )
Из этого следует правило: СУММКС числитель, СУММКС знаменатель и разделите эти два числа. Никогда не усредняйте процент, который уже был соотношением, если только кто-то не сказал вам в письменном виде, что он хочет, чтобы каждый заказ учитывался одинаково.
8. Когда СУММ — правильный ответ
Ничто из вышеперечисленного не является аргументом в пользу повсеместного использования итераторов. Собственные рекомендации Майкрософт на самой странице SUMX противоположны: «Если вам не нужно фильтровать столбец, используйте функцию SUM».
СУММ верен, когда значение уже находится в столбце, который охватывает большую часть обычной модели. SUM(Orders[Units]) равно 101, и итератор ничего к этому не добавил бы. Таблицу фактов, в каждой строке которой хранится расширенная сумма, следует суммировать, а не выводить заново.
Стоит упомянуть и второй случай, потому что он выглядит как лень, но таковым не является. Если в вашей таблице фактов уже есть столбец сохраненного дохода, его использование будет более точным, чем повторный расчет единиц, умноженных на цену, поскольку сохраненное значение — это то, что фактически было выставлено в счете. Округление, скидки и переопределение цен — все это хранится в этом сохраненном числе и ни одно из них не участвует в умножении.
И если вы обнаружите, что пишете SUMX(Orders, Orders[Units]), с пустым столбцом в качестве выражения и без каких-либо вычислений, это СУММА с дополнительным синтаксисом. Напишите СУММУ.
Полное до и после
Та же модель, тот же визуальный элемент, те же шестнадцать строк. Одна функция отдельно.
До: SUM(Units) * SUM(UnitPrice) | После: SUMX(Orders, Units * UnitPrice) | |
|---|---|---|
| Он компилируется? | Да | Да |
| Один заказ (1001) | 880 | 880 |
| Светильники, четыре заказа | 6,400 (40 × 160) | 1,600 |
| Столы, семь заказов | 35,420 (23 × 1,540) | 5,060 (23 × 220) |
| Все шестнадцать заказов | 214,625 (101 × 2,125) | 9,890 |
| Что это добавляет | Все 256 сочетаний количества и цены. | 16 пар, которые произошли |
| Что рецензент проверяет в первую очередь | Одна строка, соответствующая | Одна строка, соответствующая |
Последняя строка — это точка страницы. Обе версии проходят проверку, которую проводит большинство людей.
Крайние случаи, которые возвращают число вместо ошибки
Это те, которые производят результат, а не красную закорючку.
- Усреднение процента. Раздел 7 в одну строку:
AVERAGEXпо отношению к каждой строке одинаковый вес, поэтому ответ зависит от того, насколько несбалансированы ваши строки. Вместо этого разделите две суммы. - Пробелы не являются нулями. В справочнике SUMX говорится, что подсчитываются только числа, а «пробелы, логические значения и текст игнорируются». Строка с пустой ценой ничего не дает, кроме ошибок, поэтому частично загруженный столбец дает довольно низкую сумму.
- Мера внутри итератора.
SUMX(Products, [Total Revenue])не делает того, что предполагает синтаксис, поскольку ссылка на меру в контексте строки автоматически запускает переход контекста. Это целый механизм, и он отработан на CALCULATE страница. - Итерация неправильной таблицы.
SUMX(Products, ...)ходит в три ряда иSUMX(Orders, ...)ходит шестнадцать. Оба компилируются. Первый аргумент — это решение, а не шаблон, и если это таблица измерений, вы почти всегда ошибаетесь. Подробнее о том, какая таблица какая в Схема «звезда» в Power BI. - Вложение итератора внутрь итератора. Законно, и это умножает работу: SUMX из 16 строк, содержащий SUMX из 16 строк, оценивается 256 раз. Здесь все в порядке, а в таблице фактов с десятью миллионами строк — нет.
- Использование его там, где принадлежит вычисляемый столбец. Если значение для каждой строки необходимо в качестве среза или оси, мера не может дать вам этого. У этого решения есть своя страница: вычисляемый столбец и мера.
Почему это работает
Причина дизайна – полезная часть. DAX разделяет эти две функции, поскольку они отвечают на разные вопросы, и на справочных страницах Майкрософт об этом говорится в первых строках. СУММ «складывает все числа в столбце». SUMX «возвращает сумму выражения, вычисленного для каждой строки таблицы». Один считывает память, другой выполняет расчет.
К ошибке стоит отнестись серьезно, потому что это частный случай чего-то общего: расчет итогов — это не тот же расчет, который выполняется для отдельных строк, а затем суммируется. Это не особенность Power BI. У. С. Робинсон продемонстрировал то же самое для корреляций в 1950 году, показав, что отношения, рассчитанные на основе сгруппированных данных переписи, не соответствуют отношениям между людьми внутри этих групп. Это открытие стало известно как экологическая ошибка (Робинсон, 1950, Американское социологическое обозрение, 15(3), 351–357). Арифметика здесь проще, чем у него, но ошибка та же: сначала агрегируйте, и связь на уровне строк исчезает еще до того, как вы ее используете.
Причина, по которой он выдерживает проверку кода, заключается в арифметике, а не в психологии. Каждая проверка одной строки возвращает идентичные результаты обоих измерений, как показано в разделе 4. Таким образом, свидетельства рецензента реальны, и это свидетельство ни о чем. Единственный тест, который разделяет эти два показателя, — это тест, охватывающий более одной строки, что означает сумму, которую вы спрогнозировали до того, как на нее посмотрели.
Одно замечание в шпаргалке ниже. Он создан для того, чтобы его изучать и вспоминать, а не читать, потому что тестирование переноса материала в новые ситуации лучше, чем его повторное изучение, что здесь важно, поскольку вы будете применять это к моделям, которые совсем не похожи на приведенную выше (Батлер, 2010, Журнал экспериментальной психологии: обучение, память и познание, 36(5), 1118–1133).
Использование этого на вашей собственной модели
Проверка каждой меры в унаследованном файле утомительна, и вы остановитесь на второй таблице. Вместо этого сделайте это по порядку.
- Найдите в списке мер
) * SUMи) / SUM. Два агрегата в сочетании с оператором между ними — это шаблон. Большинство попаданий будут в порядке. Те, кого нет, все здесь. - Для каждого совпадения спрашивайте, принадлежат ли эти два столбца к одной и той же строке. Единицы измерения и цена в одной строке представляют собой пару на уровне строки, и умножать их суммы неправильно. Выручка и численность персонала из разных таблиц обычно отсутствуют, и правильно разделить их суммы.
- Проверяйте общее количество, а не ряд. Снимите фильтр, прочитайте общую сумму и сравните ее с чем-то, что вы знаете. Сумма дохода, в двадцать раз превышающая ваш годовой объем продаж, терпит неудачу за одну секунду.
- Проверьте группу, содержащую более одной строки. Если вы тестировали только однострочный срез, вы ничего не тестировали. Выберите продукт, за которым находится наибольшее количество заказов.
- Найдите каждый усредненный процент. Все, что называется «Средний X %» или «Средняя маржа», стоит открыть. Если он усредняет соотношение, замените его на РАЗДЕЛИТЬ на две суммы и сообщите владельцу отчета, что число изменится.
- Напишите предполагаемую арифметику в описании меры. «Сумма единиц, умноженная на цену за единицу, за строку» — это одно предложение, оно присутствует в модели и делает возможным отзыв следующего человека.
Если у вас под рукой есть бумага, один дополнительный эскиз исправит это навсегда. Нарисуйте сетку коробок размером четыре на четыре. Напишите четыре количества сбоку и четыре цены сверху. Заштрихуйте четыре клетки, в которых количество соответствует своей цене. То, что вы заштриховали, — это СУММ, а вся сетка — это то, что дает умножение двух сумм. Вам не нужно будет искать это снова.
Все на одном экране
Это лист поиска. Закройте правую колонку, проработайте левую и произнесите каждый ответ вслух, прежде чем проверять его.
| вещь | Что он делает |
|---|---|
SUM(col) | Добавляет столбец, который уже существует. Один аргумент, и это должен быть столбец. |
SUMX(table, expr) | Вычисляет выражение в каждой строке, а затем суммирует результаты. |
| Вопрос, который нужно задать | Могу ли я указать столбец на панели «Поля»? Если нет, то это SUMX. |
| Итератор | Функция, которая просматривает каждую строку таблицы и вычисляет в ней выражение. |
| контекст строки | Модель знает, в каком ряду она стоит. |
| Контекст строки не | Фильтруйте что угодно. Ссылка на меру меняет ситуацию. |
SUM(a) * SUM(b) | Добавляет каждую пару а с б. 16 рядов означают 256 пар. |
| Почему он проходит проверку | Обе меры, разделенные на одну строку, возвращают одно и то же число. |
| Тест, который работает | Сумма, которую вы предсказали еще до того, как прочитали. |
| Семья Х | СРЗНАЧ, MAXX, MINX, СЧЕТХ, РАНГX, КОНКАТЕНАТЕКС. Те же два аргумента. |
| Среднее соотношение | Каждая строка имеет одинаковый вес. 39,29%, где правда 38,56%. |
| Исправление соотношения | DIVIDE([Total Margin], [Total Revenue]). В конце разделите один раз. |
| Чтение другой таблицы | RELATED, от многих сторон к одной стороне. |
| Пробелы в SUMX | Игнорируется, а не ноль. Полузагруженная колонна тихонько падает. |
SUMX(t, t[col]) | СУММА с дополнительным синтаксисом. Напишите СУММУ. |
| Когда SUM верен | Значение сохраняется. Майкрософт: «Если вам не нужно фильтровать столбец, используйте функцию СУММ». |
Еще одна мысль, и мне бы искренне хотелось услышать ответы других людей. Худшая версия, которую я видел, — это средний процент скидки по представительской карте. Она была построена как среднее значение скидок на заказ, она была примерно на два пункта ниже реальной смешанной цифры и котировалась в документах совета директоров в течение трех четвертей, прежде чем кто-либо разделил эти две суммы. Какой из них дольше всего оставался незамеченным в модели, доставшейся вам по наследству?
Ссылки
- Робинсон, WS (1950). Экологические корреляции и поведение особей. Американское социологическое обозрение, 15(3), 351–357.
- Батлер, AC (2010). Повторное тестирование обеспечивает лучшую передачу знаний по сравнению с повторным обучением. Журнал экспериментальной психологии: обучение, память и познание, 36(5), 1118–1133.
- Майкрософт. Функция СУММ (DAX), функция СУММ (DAX), функция СРЗНАЧ (DAX), функция CONCATENATEX (DAX) и глоссарий ДАКС. Microsoft Learn. Все приведенные выше цитаты взяты с этих справочных страниц.
Power BI для аналитиков состоит из 187 страниц, меры строятся по одному аргументу за раз, с проверками, которые выявляют неправильное агрегирование до того, как оно достигнет карточки, и практическими вопросами, которые печатают ответ и стоящие за ним арифметические действия.
Power BI для аналитиков, 19 долларов США →тот Курс Power BI дает вам повторы: меры, которые компилируются и лгут, итоговые значения, которые нужно сначала спрогнозировать, и вопросы, которые спрашивают, по какой таблице должен пройти итератор, а не какое имя функции правильное. Теперь вы владеете методом; комплект - это практика. Ничего устанавливать, учетная запись не требуется.
Откройте комплект Power BI →