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