Power BI中如何获取指定Account字段所有子项的金额总和?
问题说明
我有一张包含账户和总金额的fact表:
| Account | Amount |
|---|---|
| CC1035 | -19000 |
| CC1284 | 123400 |
| CC1909 | 200 |
| CC1024 | 3500 |
还有一张account表,通过递归获取了所有父级并划分层级(账户可能属于不同层级和分支,比如CC1909同时属于CC_Shared -> CC_Adm和CC_Report -> RCC -> CC_CSC_Sold两个路径):
| Parent | Account | Level1 | Level2 | Level3 | Level4 |
|---|---|---|---|---|---|
| CC_Shared | CC_Shared | ||||
| CC_Shared | CC_Adm | CC_Shared | CC_Adm | ||
| CC_Adm | CC1035 | CC_Shared | CC_Adm | CC1035 | |
| CC_Adm | CC1284 | CC_Shared | CC_Adm | CC1284 | |
| CC_Adm | CC1909 | CC_Shared | CC_Adm | CC1909 | |
| CC_Report | CC_Report | ||||
| CC_Report | RCC | CC_Report | RCC | ||
| RCC | CC_CSC_Sold | CC_Report | RCC | CC_CSC_Sold | |
| CC_CSC_Sold | CC1909 | CC_Report | RCC | CC_CSC_Sold | CC1909 |
| CC_CSC_Sold | CC1024 | CC_Report | RCC | CC_CSC_Sold | CC1024 |
需求:
- 使用切片器选择任意账户(如选择"CC_Adm"),返回其所有子项的总金额(此例应为
-19000 + 123400 + 200 = 104600) - 用Level1-4层级构建利润表展示子项数据
- 之前尝试过
Concatenate和度量值,但切片器使用时始终失败,求解决方案
解决方案
一、模型关联调整
确保fact表和account表通过Account字段建立多对多关系(因为一个账户可能出现在account表的多条记录中,对应不同层级路径)。
二、编写核心DAX度量值
创建一个度量值来计算选中账户下所有子项的金额总和,判断当前账户是否是目标账户的子节点(即目标账户出现在该子节点的Level1-4任意层级中):
子项总金额 = VAR SelectedAccounts = VALUES('account'[Account]) RETURN SUMX( FILTER( 'fact', COUNTROWS( FILTER( 'account', 'account'[Account] = 'fact'[Account] && ( 'account'[Level1] IN SelectedAccounts || 'account'[Level2] IN SelectedAccounts || 'account'[Level3] IN SelectedAccounts || 'account'[Level4] IN SelectedAccounts ) ) ) > 0 ), 'fact'[Amount] )
三、构建利润表展示
- 在报表中添加切片器,选择
account表的Account字段作为筛选项 - 添加矩阵可视化,将Level1、Level2、Level3、Level4依次拖到行区域,将上述度量值拖到值区域
- 若需要只展示选中账户下的层级分支,可以添加筛选器,过滤矩阵中Level1-4包含选中账户的行
四、补充说明
- 这个度量值会自动匹配所有包含选中账户作为父级的子账户,不管子账户处于哪个层级
- 如果需要排除选中账户本身(只计算其子项),可以在FILTER中添加额外条件,排除account表中Account等于选中账户的记录
- 若层级超过4级,只需扩展度量值中的Level判断条件即可
内容的提问来源于stack exchange,提问作者Lucivan Batista
相关产品推荐
相关产品推荐

