Power BI(DAX):按行统计指定数值出现次数
在Power BI中用DAX按行统计指定数值列表的出现次数
需求说明
需创建DAX度量值,按行统计指定数值列表(如17、19)在该行多列中的出现次数;因数据行数过多无法采用转置方法,且后续要支持多组不同目标数值列表的统计。
原始数据示例
| 列A | 列B | 列C | 列D | |
|---|---|---|---|---|
| 第1行 | 19 | 17 | 16 | 16 |
| 第2行 | 17 | 19 | 20 | 19 |
期望结果
| 出现次数 | |
|---|---|
| 第1行 | 2 |
| 第2行 | 3 |
解决方案
1. 固定目标数值的度量值
如果目标数值固定(如仅统计17、19),可直接逐列判断并累加次数:
出现次数 = INT(SELECTEDVALUE('表'[列A]) IN {17,19}) + INT(SELECTEDVALUE('表'[列B]) IN {17,19}) + INT(SELECTEDVALUE('表'[列C]) IN {17,19}) + INT(SELECTEDVALUE('表'[列D]) IN {17,19})
- 原理:
INT(条件)将符合条件的情况转为1,不符合转为0,累加后得到该行总出现次数;SELECTEDVALUE用于获取当前行上下文对应列的值。
2. 支持多组目标数值的动态度量值
若需切换不同目标数值组统计,先创建一个目标数值参数表(手动输入或导入),示例结构如下:
| 组名称 | 目标数值 |
|---|---|
| 组1(17/19) | 17 |
| 组1(17/19) | 19 |
| 组2(16/20) | 16 |
| 组2(16/20) | 20 |
再创建动态度量值,根据选择的组自动匹配目标数值:
动态出现次数 = VAR TargetValues = VALUES('目标数值组'[目标数值]) RETURN INT(SELECTEDVALUE('表'[列A]) IN TargetValues) + INT(SELECTEDVALUE('表'[列B]) IN TargetValues) + INT(SELECTEDVALUE('表'[列C]) IN TargetValues) + INT(SELECTEDVALUE('表'[列D]) IN TargetValues)
- 使用时添加切片器选择「组名称」,即可切换不同目标组的统计结果。
3. 列数量较多时的简化写法
当需统计的列数量较多时,可将当前行的列转为临时表后统计,避免逐列编写判断:
出现次数 = VAR TargetValues = {17,19} -- 替换为VALUES('目标数值组'[目标数值])可实现动态统计 VAR RowColumnValues = UNION( ROW("数值", SELECTEDVALUE('表'[列A])), ROW("数值", SELECTEDVALUE('表'[列B])), ROW("数值", SELECTEDVALUE('表'[列C])), ROW("数值", SELECTEDVALUE('表'[列D])) -- 继续添加需要统计的列 ) RETURN COUNTROWS(FILTER(RowColumnValues, [数值] IN TargetValues))
- 原理:通过
UNION和ROW将当前行各列值整合为临时表,再用COUNTROWS统计其中符合目标数值的行数。
内容的提问来源于stack exchange,提问作者brightlilac
相关产品推荐
相关产品推荐

