PowerBI中统计多列内各学习方法的出现次数
问题:PowerBI多列学习方法的跨列总次数统计
已将字符串拆分后得到含Learnt 1至Learnt 4列的Excel数据,样本如下:
| Learnt 1 | Learnt 2 | Learnt 3 | Learnt 4 |
|---|---|---|---|
| Books | 空白 | 空白 | 空白 |
| Online | Books | 空白 | 空白 |
| 空白 | Books | Bootcamp | 空白 |
| Bootcamp | 空白 | Books | 空白 |
需求:统计每种学习方法在所有列的总出现次数,预期结果:Books:4、Online:1、Bootcamp:2。
尝试使用USERELATIONSHIP关联存储所有学习方法的Table1,但未成功,所用DAX代码如下:
CountinlearntocodeColumns = CALCULATE ( COUNTROWS ( LearningMethodTable ), USERELATIONSHIP ( Table1[Method], LearningMethodTable[Learnt 1] ) ) + CALCULATE ( COUNTROWS ( LearningMethodTable ), USERELATIONSHIP ( Table1[Method], LearningMethodTable[Learnt 2] ) ) + CALCULATE ( COUNTROWS ( LearningMethodTable ), USERELATIONSHIP ( Table1[Method], LearningMethodTable[Learnt 3] ) )
方法1:Power Query逆透视列(最简便)
无需复杂DAX,直接将多列转为单列后计数:
- 导入数据后进入Power Query编辑器
- 选中
Learnt 1至Learnt 4四列 - 点击转换选项卡 → 逆透视列 → 逆透视选中的列
- 删除自动生成的
属性列,仅保留值列 - 筛选掉
值列中的空白行 - 加载数据回PowerBI,直接用计数功能统计每种方法的出现次数
方法2:正确的DAX度量值写法(无需修改数据源结构)
原DAX的问题在于USERELATIONSHIP的逻辑不匹配场景,以下是两种可行的DAX方案:
方案A:基于筛选的求和
假设:
LearningMethodTable是原始四列数据表格Table1是包含所有唯一学习方法的维度表(列名Method)
创建度量值:
总出现次数 = VAR 当前方法 = SELECTEDVALUE(Table1[Method]) RETURN COUNTROWS(FILTER(LearningMethodTable, LearningMethodTable[Learnt 1] = 当前方法)) + COUNTROWS(FILTER(LearningMethodTable, LearningMethodTable[Learnt 2] = 当前方法)) + COUNTROWS(FILTER(LearningMethodTable, LearningMethodTable[Learnt 3] = 当前方法)) + COUNTROWS(FILTER(LearningMethodTable, LearningMethodTable[Learnt 4] = 当前方法))
使用时,将Table1[Method]拖入表格视觉对象,再添加该度量值即可得到结果。
方案B:SUMX逐行计算
更简洁的写法:
总出现次数 = VAR 当前方法 = SELECTEDVALUE(Table1[Method]) RETURN SUMX( LearningMethodTable, INT(NOT ISBLANK(LearningMethodTable[Learnt 1]) && LearningMethodTable[Learnt 1] = 当前方法) + INT(NOT ISBLANK(LearningMethodTable[Learnt 2]) && LearningMethodTable[Learnt 2] = 当前方法) + INT(NOT ISBLANK(LearningMethodTable[Learnt 3]) && LearningMethodTable[Learnt 3] = 当前方法) + INT(NOT ISBLANK(LearningMethodTable[Learnt 4]) && LearningMethodTable[Learnt 4] = 当前方法) )
内容的提问来源于stack exchange,提问作者gitit312
相关产品推荐
相关产品推荐

