如何基于事实表定义按ID分组取Name最大值的新表(DAX)
DAX实现按ID分组取Name最大值
事实表(假设表名为SomeTable)
| ID | Name |
|---|---|
| 1 | Apples |
| 1 | Apple |
| 1 | Aples |
| 2 | Oranges |
目标结果表
| ID | Name |
|---|---|
| 1 | Apples |
| 2 | Oranges |
DAX实现代码
使用SUMMARIZECOLUMNS函数可直接实现按ID分组并取Name最大值的需求,代码如下:
NewTable = SUMMARIZECOLUMNS ( SomeTable[ID], "Name", MAX ( SomeTable[Name] ) )
代码说明
SUMMARIZECOLUMNS的第一个参数指定分组依据列SomeTable[ID],实现按ID分组;- 第二个参数定义聚合列:通过
MAX(SomeTable[Name])计算每个ID分组下Name字段的最大值,并将结果列命名为"Name"。
补充实现(使用SUMMARIZE函数)
若习惯使用SUMMARIZE,也可达到同样效果:
NewTable = SUMMARIZE ( SomeTable, SomeTable[ID], "Name", MAX ( SomeTable[Name] ) )
与SQL的对应关系
你提供的SQL语句:
select ID, max(Name) as Name from SomeTable group by ID
DAX中的分组逻辑与SQL完全对应:GROUP BY ID对应DAX的分组列SomeTable[ID],MAX(Name)对应DAX的MAX(SomeTable[Name])。
内容的提问来源于stack exchange,提问作者John Joseph
相关产品推荐
相关产品推荐

