我需要根据条件表过滤我的订单表。问题是我的条件表可以有任意数量的行

问题描述 投票:0回答:1

我需要根据条件表过滤我的订单表。问题是我的条件表可以有任意数量的行。 我的表格格式如下 -

条件集 收款人 托运人 接收器
C1 B1, B2
C2 S1, S3 R3
C3 B3, B4 S3, S4 R2,R3,R4
订单号 收款人 托运人 接收器
1 B4 S4 R4
2 B2 S3 R2
3 B2 S3 R1
4 B4 S1 R3
5 B3 S4 R1
6 B5 S3 R3
7 B1 S3 R5
8 B2 S3 R6
9 B4 S5 R6
10 B3 S3 R2

需要按以下方式申请条件-

  1. 对于条件表中的每一行 - 它是 3 个代码之间的 AND 条件。
  2. 然后我们 UNION 每一行的结果

对于我的上表,我的结果是 -

  1. 对于 C1 - 2、3、7、8
  2. C2 - 4, 6
  3. 对于 C3 - 10 最终结果 - 2、3、4、6、7、8、10

在这种情况下等效的 SQL 是 -

SELECT OrderNo FROM Orders WHERE
(BillTo IN (B1, B2))   OR        --C1
(Shipper IN (S1, S3) AND Receiver IN (R3)) OR     --C2
(BillTo IN (B3, B4) AND Shipper IN (S3, S4) AND Receiver IN (R2, R3, R4))   --C3

我需要能够遍历条件表,因为条件集的数量可以动态变化。

有人可以帮助在 Power BI 中实施吗?

用 PowerBi 模型试过,没用。 我期待一个关于如何在 PowerBi 中实现这个的解决方案

powerbi dax powerquery powerbi-desktop powerbi-embedded
1个回答
0
投票

如果您要为 Table1 使用 M 代码,这会添加一列以匹配 Table2 中的行

let  Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Replaced Value" = Table.ReplaceValue(Source,", ",",",Replacer.ReplaceText,{"BillTo", "Shipper", "Receiver"}),
Part1=Table.AddColumn( #"Replaced Value", "Part1", each try Table.Combine(List.Transform(Text.Split([BillTo],","),  (x)=>Table.SelectRows(Table2, each Text.Contains([BillTo],x))))[OrderNo] otherwise null),
Part2=Table.AddColumn( Part1, "Part2", each try Table.Combine(List.Transform(Text.Split([Shipper],","),  (x)=>Table.SelectRows(Table2, each Text.Contains([Shipper],x))))[OrderNo] otherwise null),
Part3=Table.AddColumn( Part2, "Part3", each try Table.Combine(List.Transform(Text.Split([Receiver],","),  (x)=>Table.SelectRows(Table2, each Text.Contains([Receiver],x))))[OrderNo] otherwise null),
#"Added Custom" = Table.AddColumn(Part3, "Matches", each try Table.Combine(List.Transform(List.Intersect(List.RemoveNulls({[Part1],[Part2],[Part3]})),(x)=>Table.SelectRows(Table2, each [OrderNo]=x))) otherwise null),
#"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Part1", "Part2", "Part3"})
in #"Removed Columns"

© www.soinside.com 2019 - 2024. All rights reserved.