使用DAX函数基于关键字列关联两表生成指定结构新表的需求
实现方案
现有数据表
Table1
| key 1 | marks |
|---|---|
| a | 1 |
| a | 11 |
| b | 2 |
| b | 22 |
| c | 3 |
| c | 33 |
Table2
| key 2 | book |
|---|---|
| a | aa |
| a | aaa |
| b | bb |
| b | bbb |
| c | cc |
| c | ccc |
常见目标表实现
根据不同的目标表结构需求,提供两种DAX实现方案:
方案1:生成每个key下marks与book的全组合表
如果目标表需要每个key对应的所有marks和book的交叉组合,执行以下DAX代码创建新表:
TargetTable = GENERATE( // 获取唯一关键字集合 DISTINCT(Table1[key 1]), // 基于当前关键字,关联获取对应的marks和book列表并生成交叉组合 ADDCOLUMNS( CROSSJOIN( CALCULATETABLE(VALUES(Table1[marks]), Table1[key 1] = EARLIER(Table1[key 1])), CALCULATETABLE(VALUES(Table2[book]), Table2[key 2] = EARLIER(Table1[key 1])) ), "key", EARLIER(Table1[key 1]) ) )
生成的表结构示例:
| key | marks | book |
|---|---|---|
| a | 1 | aa |
| a | 1 | aaa |
| a | 11 | aa |
| a | 11 | aaa |
| b | 2 | bb |
| b | 2 | bbb |
| ... | ... | ... |
方案2:生成每个key聚合marks和book的单行表
如果目标表需要每个key一行,聚合显示所有对应的marks和book,执行以下DAX代码创建新表:
TargetTable = ADDCOLUMNS( DISTINCT(Table1[key 1]), "marks集合", CONCATENATEX(CALCULATETABLE(Table1, Table1[key 1] = EARLIER(Table1[key 1])), [marks], ", "), "book集合", CONCATENATEX(CALCULATETABLE(Table2, Table2[key 2] = EARLIER(Table1[key 1])), [book], ", ") )
生成的表结构示例:
| key 1 | marks集合 | book集合 |
|---|---|---|
| a | 1, 11 | aa, aaa |
| b | 2, 22 | bb, bbb |
| c | 3, 33 | cc, ccc |
内容的提问来源于stack exchange,提问作者Vidya
相关产品推荐
相关产品推荐

