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文件供大家参考
这是另一个公式,它 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 beginning
到 reset
的值,因此最终值将是 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以找到大小大于或等于报告行的行,选择排名然后查找类型。
结果:
我有两个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文件供大家参考
这是另一个公式,它 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 beginning
到 reset
的值,因此最终值将是 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以找到大小大于或等于报告行的行,选择排名然后查找类型。
结果: