我在 Power BI 中有一个仪表板,如下所示:
姓名 | 指定活动 | 等级 | 活动组 |
---|---|---|---|
安娜 | 篮球 | 2 | 运动 |
安娜 | 排球 | 3 | 运动 |
朱莉 | 篮球 | 1 | 运动 |
朱莉 | 网球 | 2 | 运动 |
朱莉 | 吉他 | 4 | 仪器 |
朱莉 | 钢琴 | 5 | 仪器 |
我想将其分组为如下所示:
订购数量 | 姓名 | 指定活动 | 级别 | 活动组 |
---|---|---|---|---|
1 | 安娜 | 篮球 | 2 | 运动 |
1 | 安娜 | 排球 | 3 | 运动 |
2 | 朱莉 | 篮球 | 1 | 运动 |
2 | 朱莉 | 网球 | 2 | 运动 |
3 | 朱莉 | 吉他 | 4 | 仪器 |
3 | 朱莉 | 钢琴 | 5 | 仪器 |
需要澄清的是,如果名称和活动组相同,则它们的排名号码应该相同。如果下一行有不同的名称或活动组,则数字应变大 +1。所以它应该是一个排名列,但有条件。我尝试使用 RANKX 函数,但我不确定如何添加我需要的条件。
我之前要求更复杂地解决这个问题(使用下拉菜单),但到目前为止没有人知道如何解决它,所以我认为也许甚至不可能添加部分下拉菜单,所以我更改了带有排名的下拉菜单。
这不是排名,它更多的是增量计数/索引。
这在 PowerQuery 中相当容易完成:
Name
和 Activity Group
列,然后使用操作 Group by
执行 All rows
。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]
)
)