如何用DAX的EVALUATE函数合并SSAS-Tabular多表的Source.Name列?
合并多表Source.Name列的DAX实现方案
要将SSAS Tabular模型中多个表的Source.Name列值合并为统一的列表/数组,可通过DAX的UNION、SELECTCOLUMNS等函数实现,以下是几种常用场景的代码:
1. 返回去重后的Source.Name值表
如果需要去除重复的文件名,使用DISTINCT配合UNION:
EVALUATE DISTINCT ( UNION ( SELECTCOLUMNS ( Table1, "Source.Name", Table1[Source.Name] ), SELECTCOLUMNS ( Table2, "Source.Name", Table2[Source.Name] ), SELECTCOLUMNS ( Table3, "Source.Name", Table3[Source.Name] ) ) )
SELECTCOLUMNS:提取单表的Source.Name列并统一列名,确保UNION可以正常合并UNION:将多个表的单列数据合并为一张表DISTINCT:剔除合并结果中的重复值
2. 返回包含所有重复值的Source.Name值表
如果需要保留所有原始数据(包括重复文件名),去掉DISTINCT即可:
EVALUATE UNION ( SELECTCOLUMNS ( Table1, "Source.Name", Table1[Source.Name] ), SELECTCOLUMNS ( Table2, "Source.Name", Table2[Source.Name] ), SELECTCOLUMNS ( Table3, "Source.Name", Table3[Source.Name] ) )
3. 返回逗号分隔的字符串形式列表
如果需要生成类似数组的字符串(便于直接查看或后续处理),使用CONCATENATEX拼接结果:
EVALUATE ROW ( "SourceNamesList", CONCATENATEX ( DISTINCT ( UNION ( SELECTCOLUMNS ( Table1, "Source.Name", Table1[Source.Name] ), SELECTCOLUMNS ( Table2, "Source.Name", Table2[Source.Name] ), SELECTCOLUMNS ( Table3, "Source.Name", Table3[Source.Name] ) ) ), [Source.Name], ", " ) )
CONCATENATEX:遍历合并去重后的表,将每个Source.Name值用逗号连接成字符串ROW:将拼接后的字符串放在一个自定义列中返回
以上代码可直接在DAX Studio中执行,也可通过Pyadomd库执行DAX查询获取结果。
内容的提问来源于stack exchange,提问作者solid
相关产品推荐
相关产品推荐

