【问题标题】:Combine two (tables or lists) to create output of unique combinations in Power BI组合两个(表或列表)以在 Power BI 中创建唯一组合的输出
【发布时间】:2020-04-15 15:05:02
【问题描述】:

尝试在 Power BI 中组合两个查询以获得唯一组合的输出。

例如一个列表(或列):A、B、C

和另一个列表(或列):1、2、3、4、5、6、7

输出应为:A1、A2、A3、A4、A5、A6、A7、B1、B2、B3、B4、B5、B6、B7、C1、C2、C3、C4、C5、C6、C7

有没有办法做到这一点? (是的,我的行数不相等) 只是不知道最好或正确的方法(尝试使用与帮助列结合并在创建重复项时遇到死胡同,除非我做错了)

【问题讨论】:

    标签: powerbi powerquery powerbi-desktop


    【解决方案1】:

    这本质上是两个列表的笛卡尔积(又称叉积)。

    如果你只有两个文本列表,你可以像这样做一个单行:

    List.Combine(List.Transform(List1, (L1) => List.Transform(List2, (L2) => L1 & L2)))
    

    这表示对于第一个列表中的每个项目 X,创建一个列表,该列表是第二个列表,每个元素都附加 X。这给出了一个列表列表,使用 combine 函数将其展平为单个列表。


    不过,想要对 table 执行此操作并不少见。在这种情况下,类似的想法是在一个表上定义一个新列,其中每一行是另一个表的整个列表/列,然后扩展该新列。

    假设我们想要Table1[Column1]Table2[Column2] 的叉积:

    let
        Table1 = <Table1 Source>,
        AddCustom = Table.AddColumn(Table1 , "Custom", each Table2),
        Expand = Table.ExpandTableColumn(AddCustom, "Custom", {"Column2"}, {"Column2"}),
        Concatenate = Table.AddColumn(Expand, "Concatenate", each [Column1] & [Column2])
    in
        Concatenate
    

    编辑: 您也可以在展开之前进行连接:

    let
        Table1 = <Table1 Source>,
        AddCustom = Table.AddColumn(Table1 , "Custom",
                        (T1) => List.Transform(Table2[Column2], each T1[Column1] & _)),
        Expanded = Table.ExpandListColumn(AddCustom, "Custom")
    in
        Expanded
    

    更详细的参考资料:

    Cartesian Product Joins

    Cartesian Join of two queries...

    【讨论】:

    • 作为列表还是表格更容易?在 power bi 中,它很容易走任何一条路,但是有什么建议或推荐呢?
    • 对您的工作流程更有意义或对您感觉更舒适的方式。
    • 这一步的数据类型也很重要吗?
    • 成功了!!非常感谢,它们都是独一无二的价值,非常完美!
    • 类型很重要,因为您必须将非文本类型转换为文本才能附加它们。
    猜你喜欢
    • 1970-01-01
    • 2019-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-29
    相关资源
    最近更新 更多