[英]INDEX and AGGREGATE FUNCTION in Power BI
我有两个表,分别是数据和报告。
在数据表中,以下列为尺寸 A、尺寸 B 和尺寸 C、类型和等级。
在数据表中,我根据大小为每种类型创建了排名。 rank 列的目的是针对相同大小进行多次匹配,在这种情况下,rank 列将有助于确定匹配多个的确切类型。
在报告表中,以下列为尺寸 A、尺寸 B 和尺寸 C。
在这两个表中,尺寸 A、尺寸 B 和尺寸 C 列是共同/关系。
我正在尝试根据从数据表到报告表的尺寸 A、尺寸 B 和尺寸 C 找出合适的类型。
数据:
类型 | 尺码 | 大小 | 尺寸 | 秩 |
---|---|---|---|---|
A6 | 420 | 600 | 440 | 11.00 |
A4 | 640 | 600 | 480 | 9.00 |
A5 | 890 | 1100 | 1330 | 2.00 |
A6 | 1335 | 1100 | 2350 | 1.00 |
A7 | 890 | 1100 | 390 | 5.00 |
A8 | 890 | 1100 | 530 | 3.00 |
A9 | 670 | 1100 | 540 | 4.00 |
A10 | 670 | 1100 | 440 | 6.00 |
A11 | 320 | 1100 | 440 | 10.00 |
A12 | 600 | 400 | 400 | 12.00 |
A13 | 800 | 600 | 400 | 8.00 |
A14 | 1000 | 600 | 500 | 7.00 |
报告:
尺码 | 大小 | 尺寸 | 期望的结果类型 |
---|---|---|---|
400 | 300 | 140 | A12 |
A12 | |||
250 | 250 | 160 | A12 |
600 | 400 | 285 | A12 |
400 | 300 | 150 | A12 |
280 | 230 | 170 | A12 |
320 | 320 | 320 | A12 |
320 | 320 | 320 | A12 |
600 | 400 | 140 | A12 |
400 | 300 | 140 | A12 |
400 | 300 | 140 | A12 |
370 | 320 | 340 | A12 |
320 | 240 | 250 | A12 |
300 | 200 | 90 | A12 |
400 | 290 | 140 | A12 |
我在报告表中应用以下公式,以便根据尺寸 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文件供大家参考
这是另一个公式,它将根据您当前的公式返回相同的结果,虽然它仍然是一个很长的公式,但更容易理解:
=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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.