求助:使用DAX实现多列中RC值的跨列统计计数
原始表结构
Data表
| 订单 | RC1 | RC2 | RC3 |
|---|---|---|---|
| 1000 | 100 | 164 | 100 |
| 1001 | 134 | 100 | null |
| 1002 | 164 | null | 134 |
RC表
| RC | 描述 |
|---|---|
| 100 | 苹果 |
| 134 | 香蕉 |
| 164 | 椰子 |
解决方案
方法一:Power Query预处理(推荐,模型更简洁)
- 打开Power Query编辑器,导入Data表
- 选中订单列,右键选择「逆透视其他列」,将RC1/RC2/RC3转换为行数据,得到结构如下:
订单 属性 值 1000 RC1 100 1000 RC2 164 1000 RC3 100 1001 RC1 134 1001 RC2 100 1002 RC1 164 1002 RC3 134 - 过滤掉「值」列为null的行,将「值」列重命名为RC,关闭并上载回模型
- 在数据模型中建立RC表的
RC列与处理后Data表的RC列的一对一关系 - 在RC表中添加计算列或度量值统计:
计数 = COUNTROWS(RELATEDTABLE(Data))
方法二:直接编写DAX度量值(无需修改原始模型)
如果不想调整表结构,可在RC表中创建如下度量值,直接统计当前RC在Data表三列中的总出现次数:
RC计数 = VAR 当前RC = SELECTEDVALUE(RC[RC]) RETURN SUMX( Data, (Data[RC1] = 当前RC) + (Data[RC2] = 当前RC) + (Data[RC3] = 当前RC) )
原理说明:
SELECTEDVALUE(RC[RC])获取当前行的RC编码SUMX遍历Data表每一行,每行中匹配当前RC的列返回1(布尔值True对应1),不匹配返回0,累加所有行的结果即为总次数
也可以用多个CALCULATE组合的写法,效果一致:
RC计数 = CALCULATE(COUNTROWS(Data), Data[RC1] = SELECTEDVALUE(RC[RC])) + CALCULATE(COUNTROWS(Data), Data[RC2] = SELECTEDVALUE(RC[RC])) + CALCULATE(COUNTROWS(Data), Data[RC3] = SELECTEDVALUE(RC[RC]))
预期输出
| RC | 描述 | 计数 |
|---|---|---|
| 100 | 苹果 | 3 |
| 134 | 香蕉 | 2 |
| 164 | 椰子 | 2 |
内容的提问来源于stack exchange,提问作者TrbsCs
相关产品推荐
相关产品推荐

