【问题标题】:Count unique column values in Power BI and replace them with their name and count total计算 Power BI 中的唯一列值并将其替换为它们的名称和总数
【发布时间】:2021-05-08 05:33:51
【问题描述】:

在 Power BI 中,如何计算列中的唯一值并将这些值替换为值名称和总数?以这种方式做事似乎是在视觉图例中获取总数的唯一方法。

起始数据示例:

Type
Example1
Example1
Example2
Example3
Example2
Example5
Example3
Example4
Example1
Example5
Example1
Example1
Example2
Example3
Example2
Example5
Example3
Example4
Example1
Example5
Example1

想要的结果:

Type
Example1 (7)
Example1 (7)
Example2 (4)
Example3 (4)
Example2 (4)
Example5 (4)
Example3 (4)
Example4 (2)
Example1 (7)
Example5 (4)
Example1 (7)
Example1 (7)
Example2 (4)
Example3 (4)
Example2 (4)
Example5 (4)
Example3 (4)
Example4 (2)
Example1 (7)
Example5 (4)
Example1 (7)

【问题讨论】:

    标签: powerbi dax powerquery powerbi-desktop


    【解决方案1】:

    你可以像这样使用 Powerquery。

    在示例中,我从 Excel 中获取了一个输入表,这意味着您必须相应地调整 Source

    let
        Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
        #"Hinzugefügter Index" = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
        groupedbyType = Table.Group(#"Hinzugefügter Index", {"Type"}, {{"CountIt", each _, type table [Type=text, Index=number]}}),
        addCol = Table.AddColumn(groupedbyType, "Count", each List.Count([CountIt][Type])),
        #"Erweiterte CountIt" = Table.ExpandTableColumn(addCol, "CountIt", {"Index"}, {"CountIt.Index"}),
        #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Erweiterte CountIt", "Result", each [Type] & " (" & Text.From([Count]) & ")"),
        #"Sortierte Zeilen" = Table.Sort(#"Hinzugefügte benutzerdefinierte Spalte",{{"CountIt.Index", Order.Ascending}}),
        #"Entfernte Spalten" = Table.RemoveColumns(#"Sortierte Zeilen",{"Type", "CountIt.Index", "Count"})
    in
        #"Entfernte Spalten"
    

    Power Query 的第一步看起来像

    最后一步看起来像

    我正在做的是

    • 稍后我添加一个索引来恢复排序
    • 我按类型分组,但保留行
    • 我计算每组的行数
    • 我扩展结果
    • 我根据要求将类型和计数结果结合起来
    • 我恢复排序
    • 我删除了所有其他列

    更新:以下步骤与翻译步骤相同

    let
        Source = Excel.CurrentWorkbook(){[Name="Tabelle1"]}[Content],
        addedIndex = Table.AddIndexColumn(Source, "Index", 1, 1, Int64.Type),
        groupedbyType = Table.Group(addedIndex, {"Type"}, {{"CountIt", each _, type table [Type=text, Index=number]}}),
        addCol = Table.AddColumn(groupedbyType, "Count", each Table.RowCount([CountIt])),
        extendCountIt = Table.ExpandTableColumn(addCol, "CountIt", {"Index"}, {"CountIt.Index"}),
        addedColResult = Table.AddColumn(extendCountIt, "Result", each [Type] & " (" & Text.From([Count]) & ")"),
        sortAgain = Table.Sort(addedColResult,{{"CountIt.Index", Order.Ascending}}),
        removedCol = Table.RemoveColumns(sortAgain,{"Type", "CountIt.Index", "Count"})
    in
        removedCol
    

    Power BI 更新:对于 Power BI,M 代码可能类似于使用 Excel 文件作为数据源的代码。

    let
        Source = Excel.Workbook(File.Contents("Excelfilename.xlsx"), null, true),
        Table1 = Source{[Item="Tabelle1",Kind="Table"]}[Data],
        addedIndex = Table.AddIndexColumn(Table1, "Index", 1, 1, Int64.Type),
        groupedbyType = Table.Group(addedIndex, {"Type"}, {{"CountIt", each _, type table [Type=text, Index=number]}}),
        addCol = Table.AddColumn(groupedbyType, "Count", each Table.RowCount([CountIt])),
        extendCountIt = Table.ExpandTableColumn(addCol, "CountIt", {"Index"}, {"CountIt.Index"}),
        addedColResult = Table.AddColumn(extendCountIt, "Result", each [Type] & " (" & Text.From([Count]) & ")"),
        sortAgain = Table.Sort(addedColResult,{{"CountIt.Index", Order.Ascending}}),
        removedCol = Table.RemoveColumns(sortAgain,{"Type", "CountIt.Index", "Count"})
    in
        removedCol
    

    【讨论】:

    • 你有英文对应的吗?德语变量让人有点难以理解。
    • 谢谢!绝对有帮助。我注意到的一件事是我似乎无法访问表格的 Power Query 编辑器。包含相关数据的表是计算表。我是否可以应用您的上述步骤,还是必须使用 DAX?我是 Power BI 的新手,因此将 Dax 和 Power Query 分开是相当不直观的。
    • 根据您的描述,这可能是不可能的,但不确定。因此,我认为最好创建一个包含更多详细信息的新帖子,以获得有效的答案。
    • 我设法返工,所以我不再使用计算表,所以我可以使用您在 Power Query 中提供的内容,但代码似乎不起作用。在AddedIndex 之前一切正常,之后就不再工作了。 CountIt 来自哪里?
    • CountIt 是使用Table.Group 创建的新列的名称。 在那之后,它不再工作是什么意思?发布的代码在 Excel 文件中适用于我。
    【解决方案2】:

    替代方法

    let Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Added Custom" = Table.AddColumn(Source,"count",(i)=>Table.RowCount(Table.SelectRows(Source, each [Type]=i[Type])), type number),
    #"Added Custom1" = Table.AddColumn(#"Added Custom", "Custom", each [Type] & " (" & Text.From([count]) & ")"),
    #"Removed Other Columns" = Table.SelectColumns(#"Added Custom1",{"Custom"})
    in  #"Removed Other Columns"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2022-01-10
      • 2018-03-05
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      相关资源
      最近更新 更多