基于桥接表创建带聚合的DAX计算表实现咨询
通过桥接表关联创建DAX计算表解决方案
数据模型与样本数据
报表配置表(ReportConfig)
| Report | ReportRow | Account | Sign | UniqueKey |
|---|---|---|---|---|
| Rapport129 | 129/* CM | 35100 | 1 | 4177960 |
| Rapport129 | 129/* CM | 35100 | -1 | 4174475 |
| Rapport129 | 129/* CM | 34000 | 1 | 4176966 |
| Rapport129 | 129/* CM | 93220 | -1 | 4179774 |
桥接表(BridgeTable)
| UniqueKey | Konto |
|---|---|
| 4179774 | 93220 |
| 4177960 | 35100 |
| 4176966 | 34000 |
| 4174475 | 35100 |
事实表(FactTable)
| FactKey | Account | Amount |
|---|---|---|
| 1 | 35100 | 10 |
| 2 | 35100 | 20 |
| 3 | 34000 | 100 |
| 4 | 34000 | 200 |
| 5 | 93220 | -500 |
| 6 | 93220 | 300 |
数据关系:ReportConfig 通过 UniqueKey 关联 BridgeTable;BridgeTable 通过 Konto 关联 FactTable 的 Account 字段。
DAX计算表实现方案
方案1:简洁版(依赖已建立的模型关系)
如果数据模型中已正确建立上述关联关系,可直接使用以下DAX表达式创建计算表:
CalculatedReportTable = ADDCOLUMNS( ReportConfig, "TotalAmount", CALCULATE( SUM(FactTable[Amount]), FactTable[Account] = RELATED(BridgeTable[Konto]) ) * ReportConfig[Sign] )
方案2:显式关联版(无需依赖模型关系)
若未建立模型关系,可通过显式关联表来实现:
CalculatedReportTable = VAR JoinedTables = NATURALLEFTOUTERJOIN( NATURALLEFTOUTERJOIN(ReportConfig, BridgeTable), FactTable ) RETURN ADDCOLUMNS( SUMMARIZE( JoinedTables, ReportConfig[Report], ReportConfig[ReportRow], ReportConfig[Account], ReportConfig[Sign], ReportConfig[UniqueKey] ), "TotalAmount", CALCULATE(SUM(FactTable[Amount])) * MAX(ReportConfig[Sign]) )
结果说明
生成的计算表会包含报表配置的所有行,并新增TotalAmount列,该列是对应Account的金额汇总后乘以配置的Sign值。例如:
- 对于
UniqueKey=4177960的行,Fact表中35100的金额总和是30,乘以Sign=1,TotalAmount=30 - 对于
UniqueKey=4174475的行,同样对应35100的总和30,乘以Sign=-1,TotalAmount=-30
内容的提问来源于stack exchange,提问作者glaring
相关产品推荐
相关产品推荐

