Powerbi 与“最大日期”和“连接”对应的查找值
我有两张桌子,如下所示:Powerbi 与“最大日期”和“连接”对应的查找值,powerbi,dax,powerquery,Powerbi,Dax,Powerquery,我有两张桌子,如下所示: +----+------------+---------+ | ID | MAX_DATE | PURPOSE | +----+------------+---------+ | 1 | 03-03-2020 | B,C | | 2 | 02-02-2020 | A,E | | 3 | 04-05-2020 | X,Y,Z | | 4 | 01-01-2020 | M | | 5 | 06-07-2020 | N
+----+------------+---------+
| ID | MAX_DATE | PURPOSE |
+----+------------+---------+
| 1 | 03-03-2020 | B,C |
| 2 | 02-02-2020 | A,E |
| 3 | 04-05-2020 | X,Y,Z |
| 4 | 01-01-2020 | M |
| 5 | 06-07-2020 | N |
| 6 | | |
+----+------------+---------+
订单:
+----+------------+---------+
| ID | DATE | PURPOSE |
+----+------------+---------+
| 1 | 01-02-2020 | A |
| 1 | 03-03-2020 | B |
| 1 | 03-03-2020 | C |
| 2 | 02-02-2020 | A |
| 2 | 01-02-2020 | D |
| 2 | 02-02-2020 | E |
| 3 | 04-05-2020 | X |
| 3 | 04-05-2020 | Y |
| 3 | 04-05-2020 | Z |
| 4 | 01-01-2020 | M |
| 5 | 06-07-2020 | N |
+----+------------+---------+
客户:
+----+
| ID |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
+----+
我想匹配ID,提取每个ID的最大日期,并连接这些ID的目的
因此,结果表如下所示:
+----+------------+---------+
| ID | MAX_DATE | PURPOSE |
+----+------------+---------+
| 1 | 03-03-2020 | B,C |
| 2 | 02-02-2020 | A,E |
| 3 | 04-05-2020 | X,Y,Z |
| 4 | 01-01-2020 | M |
| 5 | 06-07-2020 | N |
| 6 | | |
+----+------------+---------+
目前,要获取“最大日期”列,我使用以下查询:
MAX_DATE =
VAR _MaxDate =
CALCULATE (
MAX ( ORDER[DATE] ),
FILTER ( ORDER,ORDER[ID] = CUSTOMER[ID] )
)
RETURN
LOOKUPVALUE (
ORDER[DATE],
ORDER[DATE], _MaxDate,
ORDER[ID], CUSTOMER[ID]
我不确定如何使用相同或类似的度量值连接目的列您可以使用电源查询实现所需的输出。只需执行以下步骤- 步骤1:复制您的表格订单并给出名称订单最长日期 第二步:转到新表的高级编辑器订单最长日期并用以下代码替换代码-
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bc09DoAgDAXgu3SmSSmgsz+MOquk97+G0MCiTbq8Ly+vpYAHB+SRGJmYalhAXOeA9TqvNm/K3Jh/I/zd3u12Vg6NI1IafNl82/wox/7SDz6UU+MJaR58gsgL", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, DATE = _t, PURPOSE = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"DATE", type date}, {"PURPOSE", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"max_date", each List.Max([DATE]), type nullable date}}),
#"Merged Queries" = Table.NestedJoin(#"Grouped Rows", {"ID", "max_date"}, Order, {"ID", "DATE"}, "Order", JoinKind.LeftOuter),
#"Expanded Order" = Table.ExpandTableColumn(#"Merged Queries", "Order", {"PURPOSE"}, {"Order.PURPOSE"}),
#"Grouped Rows1" = Table.Group(#"Expanded Order", {"ID"}, {{"AllData", each _, type table [ID=nullable number, max_date=nullable date, Order.PURPOSE=nullable text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows1", "Custom", each List.Max([AllData][max_date])),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each [AllData][Order.PURPOSE]),
#"Extracted Values" = Table.TransformColumns(#"Added Custom1", {"Custom.1", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
#"Renamed Columns" = Table.RenameColumns(#"Extracted Values",{{"Custom", "max_date"}, {let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("bc09DoAgDAXgu3SmSSmgsz+MOquk97+G0MCiTbq8Ly+vpYAHB+SRGJmYalhAXOeA9TqvNm/K3Jh/I/zd3u12Vg6NI1IafNl82/wox/7SDz6UU+MJaR58gsgL", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, DATE = _t, PURPOSE = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"DATE", type date}, {"PURPOSE", type text}}),
#"Grouped Rows" = Table.Group(#"Changed Type", {"ID"}, {{"max_date", each List.Max([DATE]), type nullable date}}),
#"Merged Queries" = Table.NestedJoin(#"Grouped Rows", {"ID", "max_date"}, Order, {"ID", "DATE"}, "Order", JoinKind.LeftOuter),
#"Expanded Order" = Table.ExpandTableColumn(#"Merged Queries", "Order", {"PURPOSE"}, {"Order.PURPOSE"}),
#"Grouped Rows1" = Table.Group(#"Expanded Order", {"ID"}, {{"AllData", each _, type table [ID=nullable number, max_date=nullable date, Order.PURPOSE=nullable text]}}),
#"Added Custom" = Table.AddColumn(#"Grouped Rows1", "Custom", each List.Max([AllData][max_date])),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom.1", each [AllData][Order.PURPOSE]),
#"Extracted Values" = Table.TransformColumns(#"Added Custom1", {"Custom.1", each Text.Combine(List.Transform(_, Text.From), ","), type text}),
#"Renamed Columns" = Table.RenameColumns(#"Extracted Values",{{"Custom", "max_date"}, {"Custom.1", "purpose"}})
in
#"Renamed Columns""Custom.1", "purpose"}})
in
#"Renamed Columns"
这是最终输出(忽略红色框列)-
第三步:现在选择您的客户表并转到合并选项。合并新表订单最大日期如下所示-
第4步:现在展开表,只保留max_date and purpose列,如下所示-
这是您最终需要的输出-
您已经标记了PowerQuery,因此我假设使用它是一种选择 创建一个名为“订单”的查询和一个名为“客户”的查询,以显示上面的表 对此的PowerQuery将是:
let
// Start with CUSTOMER, since if there are any ID values in ORDER that aren't in CUSTOMER we don't want them.
Source = CUSTOMER,
// Left join ORDER
#"Left-Join ORDER" = Table.NestedJoin(Source,{"ID"},ORDER,{"ID"},"ORDER",JoinKind.LeftOuter),
#"Expanded ORDER" = Table.ExpandTableColumn(#"Left-Join ORDER", "ORDER", {"DATE", "PURPOSE"}, {"DATE", "PURPOSE"}),
// Get IDs and MAX_DATE
#"Grouped by ID" = Table.Group(#"Expanded ORDER", {"ID"}, {{"MAX_DATE", each List.Max([DATE]), type date}}),
// Add a column called "rows" where the column values are tables of corresponding #"Expanded ORDER" rows
#"Merged ORDER" = Table.NestedJoin(
#"Grouped by ID",
{"ID", "MAX_DATE"},
// Ignore null date values just for speed
Table.SelectRows(#"Expanded ORDER", each [DATE] <> null),
{"ID", "DATE"},
"rows",JoinKind.LeftOuter
),
// Add the PURPOSE column
#"Aggregated rows[PURPOSE]" = Table.AggregateTableColumn(#"Merged ORDER", "rows", {{"PURPOSE", each Text.Combine(_, ","), "PURPOSE"}}),
#"Changed Type" = Table.TransformColumnTypes(#"Aggregated rows[PURPOSE]",{{"PURPOSE", type text}})
in
#"Changed Type"
要获取目的列,可以使用以下内容:
PURPOSE =
VAR cust = CUSTOMER[ID]
return CALCULATE(CONCATINATEX(ORDER, ORDER[PURPOSE], ","), FILTER(ORDER, cust = ORDER[ID]))
此外,您的MAX_日期可以更轻松地解决(以相同的方式)
哎呀!我错过了关于“只想要与ID和MAX_日期匹配的目标”的部分!修正了,简单的解决方案。。杰出的
MaxDate =
VAR cust = CUSTOMER[ID]
return CALCULATE(MAX('ORDER'[DATE]), FILTER('ORDER', cust = 'ORDER'[ID]))