【问题标题】:How to count duplicate values with multiple columns in Power BI by row wise如何逐行计算power bi中多列的重复值
【发布时间】:2021-12-05 11:12:03
【问题描述】:

我有 4 列(A1、A2、A3 和 A4),我想通过对索引列进行分组来计算这 4 列中相同/重复的值。例如(如果“索引 1”在“A1”中找到了值,并且在 A2 列旁边存在相同的值,那么它应该删除它。如果它不在 A1 列旁边,那么它应该保留。例如“1 索引”可以在 4 列中只取一个唯一值。

【问题讨论】:

    标签: powerbi dax word-frequency


    【解决方案1】:

    我会使用 Pivot 和 Unpivot 来获得这个结果。

    从模拟数据集开始:

    我可以把它变成这样:

    这是供您查看的高级查询:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZZDdCoMwDIXfpddezG3u51mKF9FJG2Zt0Anu7ZfUdWQUSs7hfIeU1lpTm8rASB5Yv6etrDmqWGNhJ5V1w0ujc4lyQ3BTxA5C+OGLCjCW/MrmCUSgdFozvbEZIXQPicP6x+5sNswjBuznOCknnfrAAQmffeS5oEtX75oa8lnkcX8wLe+0YXBM2w8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, A1 = _t, A2 = _t, A3 = _t, A4 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"A1", type text}, {"A2", type text}, {"A3", type text}, {"A4", type text}}),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"ID"}, "Attribute", "Value"),
        #"Filtered Rows" = Table.SelectRows(#"Unpivoted Other Columns", each [Value] <> null and [Value] <> ""),
        #"Removed Duplicates" = Table.Distinct(#"Filtered Rows", {"Value", "ID"}),
        #"Pivoted Column" = Table.Pivot(#"Removed Duplicates", List.Distinct(#"Removed Duplicates"[Attribute]), "Attribute", "Value"),
        #"Replaced Value" = Table.ReplaceValue(#"Pivoted Column",null,"",Replacer.ReplaceValue,{"A1", "A2", "A3", "A4"})
    in
        #"Replaced Value"
    

    我们的想法是,您将对列进行反透视,以便可以利用“删除重复项”功能。然后将数据集转回其原始形式。

    如果您想通过向左移动值来缩小差距,您需要做更多的工作。当数据未透视时,在子组上创建一个新索引。这是一个中级任务,Curbal 有一个很好的例子 (https://www.youtube.com/watch?v=7CqXdSEN2k4)。从 unpivot 中丢弃您的“属性”列,并改用新的子组索引。

    这是班次的高级编辑器:

    let
        Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("ZZDdCoMwDIXfpddezG3u51mKF9FJG2Zt0Anu7ZfUdWQUSs7hfIeU1lpTm8rASB5Yv6etrDmqWGNhJ5V1w0ujc4lyQ3BTxA5C+OGLCjCW/MrmCUSgdFozvbEZIXQPicP6x+5sNswjBuznOCknnfrAAQmffeS5oEtX75oa8lnkcX8wLe+0YXBM2w8=", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ID = _t, A1 = _t, A2 = _t, A3 = _t, A4 = _t]),
        #"Changed Type" = Table.TransformColumnTypes(Source,{{"ID", Int64.Type}, {"A1", type text}, {"A2", type text}, {"A3", type text}, {"A4", type text}}),
        #"Unpivoted Other Columns" = Table.UnpivotOtherColumns(#"Changed Type", {"ID"}, "Attribute", "Value"),
        #"Filtered Rows" = Table.SelectRows(#"Unpivoted Other Columns", each [Value] <> null and [Value] <> ""),
        #"Removed Duplicates" = Table.Distinct(#"Filtered Rows", {"Value", "ID"}),
        #"Grouped Rows" = Table.Group(#"Removed Duplicates", {"ID"}, {{"Data", each Table.AddIndexColumn(_, "AttributeRenumber", 1, 1), type table [ID=nullable number, Attribute=text, Value=text, AttributeRenumber=text]}}),
        #"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"ID"}),
        #"Expanded Data" = Table.ExpandTableColumn(#"Removed Columns", "Data", {"ID", "Attribute", "Value", "AttributeRenumber"}, {"ID", "Attribute", "Value", "AttributeRenumber"}),
        #"Add Prefix" = Table.TransformColumns(#"Expanded Data",{{"AttributeRenumber", each "A" & Number.ToText(_) , type text}}),
        #"Removed Columns1" = Table.RemoveColumns(#"Add Prefix",{"Attribute"}),
        #"Pivoted Column" = Table.Pivot(#"Removed Columns1", List.Distinct(#"Removed Columns1"[AttributeRenumber]), "AttributeRenumber", "Value"),
        #"Replaced Value" = Table.ReplaceValue(#"Pivoted Column",null,"",Replacer.ReplaceValue,{"A1", "A2", "A3"})
    in
        #"Replaced Value"
    

    【讨论】:

    • 这真的很有帮助。谢谢亲爱的有意义的帮助。
    猜你喜欢
    • 1970-01-01
    • 2022-09-27
    • 2022-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多