Power BI:根据条件对表进行排名

问题描述 投票:0回答:1

我在 Power BI 中有一个仪表板,如下所示:

姓名 指定活动 等级 活动组
安娜 篮球 2 运动
安娜 排球 3 运动
朱莉 篮球 1 运动
朱莉 网球 2 运动
朱莉 吉他 4 仪器
朱莉 钢琴 5 仪器

我想将其分组为如下所示:

订购数量 姓名 指定活动 级别 活动组
1 安娜 篮球 2 运动
1 安娜 排球 3 运动
2 朱莉 篮球 1 运动
2 朱莉 网球 2 运动
3 朱莉 吉他 4 仪器
3 朱莉 钢琴 5 仪器

需要澄清的是,如果名称和活动组相同,则它们的排名号码应该相同。如果下一行有不同的名称或活动组,则数字应变大 +1。所以它应该是一个排名列,但有条件。我尝试使用 RANKX 函数,但我不确定如何添加我需要的条件。

我之前要求更复杂地解决这个问题(使用下拉菜单),但到目前为止没有人知道如何解决它,所以我认为也许甚至不可能添加部分下拉菜单,所以我更改了带有排名的下拉菜单。

powerbi powerquery data-analysis powerbi-desktop
1个回答
0
投票

这不是排名,它更多的是增量计数/索引。

这在 PowerQuery 中相当容易完成:

  1. 选择
    Name
    Activity Group
    列,然后使用操作
    Group by
    执行
    All rows
  2. 添加从 1 开始的索引列。
  3. 使用
    Specified Activity
    Level
    列扩展步骤 1 中的表格列。

这是上述内容的 PQ:

let
  Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WcszLS1TSUXJKLM5OLUlKzMkBcoyAOLggv6ikWClWB64kLD8nJ7USqsQYVYlXaU5mKroxhtjVhKTm5WUWY1oDk3cvzSxJLAIyTIDYM6+4pKg0NzWvBEVNQGZiXj6QNkVTEgsA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Name = _t, #"Specified Activity" = _t, Level = _t, #"Activity Group" = _t]),
  #"Grouped rows" = Table.Group(Source, {"Name", "Activity Group"}, {{"Rows", each _, type nullable table[Name = nullable text, #"Specified Activity" = nullable text, Level = nullable text, #"Activity Group" = nullable text]}}),
  #"Added index" = Table.AddIndexColumn(#"Grouped rows", "Index", 1, 1, Int64.Type),
  #"Expanded Rows" = Table.ExpandTableColumn(#"Added index", "Rows", {"Specified Activity", "Level"}, {"Specified Activity", "Level"}) 
in
  #"Expanded Rows"

或者,如果您需要在 DAX 中执行此操作,请使用以下命令在表上创建计算列:

Ordered Number = 
  COUNTROWS(
    SUMMARIZE(
      FILTER(
        'YourTable',
        [Name] & "_" & [Activity Group] <= EARLIER([Name]) & "_" & EARLIER([Activity Group])
      ),
      [Name],
      [Activity Group]
    )
  )
© www.soinside.com 2019 - 2024. All rights reserved.