#powerbi #aggregate-functions #multi-index
Вопрос:
У меня есть две таблицы-данные и отчет.
В таблице данных следующие столбцы: Размер A, Размер B и Размер C, Тип и ранг.
В таблице данных я создал рейтинг для каждого типа в зависимости от размеров. Целью столбца ранга было несколько совпадений для одного и того же размера. В этом случае столбец ранга поможет определить точный тип, если совпадало более одного.
В таблице отчета следующие столбцы имеют размер A, Размер B и Размер C.
В обеих таблицах столбцы размера A, Размера B и размера C являются общими/отношениями.
Я пытаюсь найти подходящий тип в соответствии с размером A, размером B и размером C из таблицы данных в таблицу отчета.
Данные:
Тип | РАЗМЕР | РАЗМЕР | РАЗМЕР | ранг |
---|---|---|---|---|
А6 | 420 | 600 | 440 | 11.00 |
А4 | 640 | 600 | 480 | 9.00 |
A5 | 890 | 1100 | 1330 | 2.00 |
А6 | 1335 | 1100 | 2350 | 1.00 |
A7 | 890 | 1100 | 390 | 5.00 |
A8 | 890 | 1100 | 530 | 3.00 |
A9 | 670 | 1100 | 540 | 4.00 |
А10 | 670 | 1100 | 440 | 6.00 |
А11 | 320 | 1100 | 440 | 10.00 |
А12 | 600 | 400 | 400 | 12.00 |
А13 | 800 | 600 | 400 | 8.00 |
А14 | 1000 | 600 | 500 | 7.00 |
Сообщить:
РАЗМЕР | РАЗМЕР | РАЗМЕР | ЖЕЛАЕМЫЙ РЕЗУЛЬТАТ-ТИП |
---|---|---|---|
400 | 300 | 140 | А12 |
А12 | |||
250 | 250 | 160 | А12 |
600 | 400 | 285 | А12 |
400 | 300 | 150 | А12 |
280 | 230 | 170 | А12 |
320 | 320 | 320 | А12 |
320 | 320 | 320 | А12 |
600 | 400 | 140 | А12 |
400 | 300 | 140 | А12 |
400 | 300 | 140 | А12 |
370 | 320 | 340 | А12 |
320 | 240 | 250 | А12 |
300 | 200 | 90 | А12 |
400 | 290 | 140 | А12 |
Я применяю следующую формулу в таблице отчета, чтобы получить соответствующий тип в соответствии с размером A, размером B и размером C
=INDEX(DATA!$D$2:$D$16,AGGREGATE(15,6,(ROW(DATA!$H$2:$H$16)-1)/(DATA!$H$2:$H$16=1/(1/MAX(((DATA!$E$2:$E$16>=$B3)*(DATA!$F$2:$F$16>=$A3) (DATA!$E$2:$E$16>=$A3)*(DATA!$F$2:$F$16>=$B3)>0)*(DATA!$G$2:$G$16>=$C3)*DATA!$H$2:$H$16))),1))
Как я могу применить ту же логику в Power BI? Любой совет, пожалуйста.
Я ищу новые параметры расчета столбца. При этом поделитесь файлом Excel для вашей справки
Комментарии:
1. Тебе нужно то
ranking
илиtype
это ? Похоже, что очень длинная формула возвращается толькоA12
в конце, есть ли какая-нибудь ошибка?2. Я ищу тип, а не ранг.
3. хорошо, позвольте мне сначала посмотреть, смогу ли я понять вашу формулу.
4. Я использовал столбец ранга, чтобы получить тип распределения в соответствии с размерами в обеих таблицах. Пример — Если мы ищем тип В таблице отчета для 1-й строки, размер которой будет соответствовать от A4 до A14, в этом случае мы должны выбрать соответствующий тип в соответствии с размером. Вот почему я использую столбец ранга.
5. Спасибо за вашу поддержку и помощь. Это очень сложный сценарий
Ответ №1:
Вот еще одна формула, которая вернет тот же результат, что и в вашей текущей формуле, хотя это все еще длинная формула, но ее легче понять:
=INDEX($D$2:$D$13,MATCH(MAX(IF($G$2:$G$13<$L3,0,
IF((IF($E$2:$E$13<$K3,0,1)*IF($F$2:$F$13<$J3,0,1)) (IF($E$2:$E$13<$J3,0,1)*IF($F$2:$F$13<$K3,0,1))>0,1,0))
*$H$2:$H$13),$H$2:$H$13,0),1)
Поэтому я разберу его, чтобы объяснить, как это работает:
Часть 1: Это если формула проверяет сравнение Size C
, если ваши данные ниже, чем в таблице, значение для Type
будет равно нулю, поэтому вообще не будет учитываться, потому zero times any amount
что будет равно нулю
(IF($G$2:$G$13<$L3,0
Часть 2: Эта часть сначала проверяет сравнение Size A vs Size B
, если значение ниже таблицы, чем 0, и применяет для другого сравнения, затем завершает использование If at the beginning
reset
значения так, чтобы конечное значение было 0 или 1
IF((IF($E$2:$E$13<$K3,0,1)*IF($F$2:$F$13<$J3,0,1)) (IF($E$2:$E$13<$J3,0,1)*IF($F$2:$F$13<$K3,0,1))>0,1,0)
Часть 3: Из значения, которое вы вычисляете, если 0 раз любой рейтинг будет равен нулю, поэтому из нулевого рейтинга, такого как 12 или 9, он получит максимальное значение из списка, большинство из них 12
Max((.....)*$H$2:$H$13)
Часть 4: Соответствие индексу — Наконец, это то же самое, что и первая часть вашей формулы, но вы используете Index row
такие методы, которые затрудняют понимание
INDEX($D$2:$D$13,MATCH(Max(...))
Более короткая версия вашей формулы путем удаления ненужной части:
=INDEX($D$2:$D$13,MATCH(MAX(IF($G$2:$G$13<$L4,0,
IF(($E$2:$E$13>=$K4)*($F$2:$F$13>=$J4) ($E$2:$E$13>=$J4)*($F$2:$F$13>=$K4)>0,1,0))*$H$2:$H$13),
$H$2:$H$13,0),1)
Ответ №2:
Вы можете добавить столбец в таблицу отчета, например:
Desired = LOOKUPVALUE(DataR[TYPE],DataR[RANK], MAXX(FILTER(DataR, DataR[SIZEA] >= ReportR[SIZEA] amp;amp; DataR[SIZEB] >= ReportR[SIZEB] amp;amp; DataR[SIZEC] >= ReportR[SIZEC]), DataR[RANK]))
Сначала он фильтрует таблицу, чтобы найти строку, размеры которой больше или равны строке отчета, выбирает ранг, а затем выполняет поиск по типу.
Комментарии:
1. Нет, ваш результат неверен, на самом деле проблема в том , что некоторые типы
A6
, я думаю, уже довольно близки, хотя и не уверены, что их легко решить в BI?2. Привет. Большое вам спасибо за вашу помощь и предоставление решений. Результат формулы(ваше решение) почти совпадает с результатами формулы Excel, некоторые из них разного типа, а некоторые из них являются пробелами в соответствии с желаемым результатом. Причина в другом, потому что я использовал опцию поворота в формуле Excel. В таблице данных Тип A может перейти в таблицу отчета типа B, а в таблице данных типа B может перейти в таблицу отчета A.
3. Доброе утро. Можете ли вы, пожалуйста, посоветовать, можно ли добавить еще одну логику в вашу волнующую.
4. Я был занят, не могу обещать вам, когда у меня будет время разобраться в этом..
5. Спасибо за ваш ответ. Я могу подождать, пока ты снова не ответишь. Не могли бы вы, пожалуйста, помочь мне, когда у вас будет время. Спасибо.