我有两张表,分别是数据和报告。
在数据表中,以下列分别是尺寸 A、尺寸 B 和尺寸 C、类型和等级。
在数据表中,我根据大小为每种类型创建了排名。排名列的目的是针对相同大小的多个匹配项,在这种情况下,排名列将有助于确定匹配多个的确切类型。
在报告表格中,以下列是尺寸 A、尺寸 B 和尺寸 C。
在两个表中,Size A、Size B 和 Size C 列是共同的/关系。
我正在尝试根据数据表中的尺寸 A、尺寸 B 和尺寸 C 找出合适的类型。
数据:
类型 | SIZEA | SIZEB | SIZEC | RANK |
---|---|---|---|---|
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 |
报告:
SIZEA | SIZEB | SIZEC | 期望的结果类型 |
---|---|---|---|
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文件供大家参考
答案 0 :(得分:0)
这是另一个公式,它会返回与您当前公式相同的结果,虽然它仍然是一个很长的公式,但更容易理解:
=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
Part 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)
答案 1 :(得分:0)