ИНДЕКС и АГРЕГАТНАЯ ФУНКЦИЯ в Power BI

#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 для вашей справки

https://www.dropbox.com/scl/fi/iq0gteeyazrg79q7a4tb1/AUTO-MODIFY-REQ.xlsx?dl=0amp;rlkey=nyyerjsg7if2dz30z9iqo6kdc

Комментарии:

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. Спасибо за ваш ответ. Я могу подождать, пока ты снова не ответишь. Не могли бы вы, пожалуйста, помочь мне, когда у вас будет время. Спасибо.