Power BI 中的索引和聚合函数

INDEX and AGGREGATE FUNCTION in Power BI

我有两个table是数据和报告。

在数据 table 中,以下列是尺寸 A、尺寸 B 和尺寸 C、类型和等级。

在数据 table 中,我根据尺寸为每种类型创建了排名。 rank 列的目的是为相同大小进行多次匹配,在这种情况下,rank 列将有助于确定确切类型是否匹配多个。

在报告 table 中,以下列是尺寸 A、尺寸 B 和尺寸 C。

在 table 中,尺码 A、尺码 B 和尺码 C 列都是 common/relationship。

我正在尝试根据数据 table 中的尺寸 A、尺寸 B 和尺寸 C 找出合适的类型到报告 table。

数据:

类型 尺码 SIZEB SIZEC 排名
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

举报:

尺码 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

我在报告 table 中应用以下公式,以便根据尺寸 A、尺寸 B 和尺寸 C 获得合适的类型

=INDEX(DATA!$D:$D,AGGREGATE(15,6,(ROW(DATA!$H:$H)-1)/(DATA!$H:$H=1/(1/MAX(((DATA!$E:$E>=$B3)*(DATA!$F:$F>=$A3)+(DATA!$E:$E>=$A3)*(DATA!$F:$F>=$B3)>0)*(DATA!$G:$G>=$C3)*DATA!$H:$H))),1)) 

如何在 Power BI 中应用相同的逻辑?有什么建议吗

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

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

这是另一个公式,它 return 与您当前公式的结果相同,虽然它仍然是一个长公式,但更容易理解:

=INDEX($D:$D,MATCH(MAX(IF($G:$G<$L3,0,
IF((IF($E:$E<$K3,0,1)*IF($F:$F<$J3,0,1))+(IF($E:$E<$J3,0,1)*IF($F:$F<$K3,0,1))>0,1,0))
*$H:$H),$H:$H,0),1)

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

第 1 部分:如果公式正在检查 Size C 的比较,如果您的数据低于 table,则 Type 将为零因此根本不会被考虑因为 zero times any amount 将为零

(IF($G:$G<$L3,0

Part 2:这部分会先检查比较Size A vs Size B,如果低于table比return0则申请其他比较,最后使用 If at the beginningreset 的值,因此最终值将是 0 或 1

IF((IF($E:$E<$K3,0,1)*IF($F:$F<$J3,0,1))+(IF($E:$E<$J3,0,1)*IF($F:$F<$K3,0,1))>0,1,0)

第三部分:从你计算的值来看,如果0次任何排名都会是0,所以从none0次排名比如12或者9,就会从列表中获取最大值,其中大多数是 12

Max((.....)*$H:$H)

第 4 部分:索引匹配 - 最后它与您的公式第一部分相同,但您使用的是 Index row,这让人难以理解

INDEX($D:$D,MATCH(Max(...))

通过删除不必要的部分来简化您的公式:

=INDEX($D:$D,MATCH(MAX(IF($G:$G<$L4,0,
IF(($E:$E>=$K4)*($F:$F>=$J4)+($E:$E>=$J4)*($F:$F>=$K4)>0,1,0))*$H:$H),
$H:$H,0),1)

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

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

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

结果: