PowerBI中使用DAX统计同名行数量的技术求助
PowerBI DAX实现同名行计数及后续累计和计算
一、修正同名行计数的DAX代码
你的核心问题是DAX代码列名不匹配,加上上下文处理不当,导致返回错误结果。以下是正确的实现方式:
假设你的表名为「成本表」,列名为Name和Cost,新增NameCount计算列的正确DAX:
方法1:使用ALLEXCEPT清除无关筛选
NameCount = CALCULATE(COUNTROWS('成本表'), ALLEXCEPT('成本表', '成本表'[Name]))
方法2:使用EARLIER引用当前行上下文
NameCount = COUNTROWS(FILTER('成本表', '成本表'[Name] = EARLIER('成本表'[Name])))
两种写法都能为每一行返回对应Name在表中的总出现次数,得到你期望的结果:
| Name | Cost | NameCount |
|---|---|---|
| Albert | 2137 | 2 |
| Daniel | 2234 | 1 |
| Albert | 2137 | 2 |
| Mark | 2234 | 1 |
二、原代码错误原因
- 列名不匹配:你的原始表格列是
Name,但代码中使用的是Parents[ParentName],导致筛选条件无法正确匹配目标数据; - 上下文处理问题:即使列名正确,
MAX(Parents[ParentName])在部分场景下无法稳定获取当前行的Name值,而ALLEXCEPT或EARLIER的写法能更可靠地处理行上下文,确保计数准确。
三、后续Cost累计和计算
1. 新增Cost/NameCount计算列
CostPerName = '成本表'[Cost] / '成本表'[NameCount]
2. 计算累计和
如果需要统计所有行的CostPerName总和,直接使用SUM函数即可:
累计Cost总和 = SUM('成本表'[CostPerName])
由于同名行的Cost值一致,最终累计和等价于所有不同Name的Cost值之和(例如Albert的两行CostPerName相加等于2137,和单个Albert的Cost值相同)。
内容的提问来源于stack exchange,提问作者Jakobee
相关产品推荐
相关产品推荐

