Power BI 中的索引和聚合函数

时间:2021-06-11 21:47:56

标签: powerbi aggregate-functions multi-index

我有两张表,分别是数据和报告。

在数据表中,以下列分别是尺寸 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)) 

enter image description here

enter image description here

如何在 Power BI 中应用相同的逻辑?请任何建议。

我正在寻找新的计算列选项。特此分享Excel文件供大家参考

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

2 个答案:

答案 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)

enter image description here

所以我将分解它来解释它是如何工作的:

第 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)

您可以在报告表中添加一个列,例如:

Desired = LOOKUPVALUE(DataR[TYPE],DataR[RANK], MAXX(FILTER(DataR, DataR[SIZEA] >= ReportR[SIZEA] && DataR[SIZEB] >= ReportR[SIZEB] && DataR[SIZEC] >= ReportR[SIZEC]), DataR[RANK]))

它首先过滤表格以找到大小大于或等于报告行的行,选择排名,然后查找类型。

结果: enter image description here