请求编写DAX度量值:计算学生技能完成数相对整体中位数的占比
解决DAX度量值计算学生技能完成数相对全体中位数百分比的问题
问题背景
现有学生技能完成数据如下:
| Student Name | Head to Toe |
|---|---|
| Student 1 | 2 |
| Student 2 | 3 |
| Student 3 | 5 |
| Student 4 | 6 |
全体学生的Head to Toe技能完成数中位数为4,需要创建DAX度量值,在应用学生姓名筛选时,展示当前学生的技能完成数相对于该全体中位数的百分比。
原度量值的问题
你编写的度量值无法正常工作的核心原因:
%HeadtoToe = VAR HTCohort= SUM(Assessment_Skills[Head_To_Toe]) VAR HTStudent = MEDIAN(Assessment_Skills[Head_To_Toe]) VAR RESULT = DIVIDE(HTCohort,HTStudent) RETURN RESULT
当应用学生姓名筛选时,MEDIAN(Assessment_Skills[Head_To_Toe])只会计算当前筛选出的单个学生的数值(单个值的中位数就是其本身),导致最终结果始终为100%,完全不符合需求。
正确的DAX度量值
要获取不受筛选影响的全体学生中位数,需要使用ALL()函数清除筛选上下文,确保无论选择哪个学生,中位数都取全体数据的计算结果:
%HeadtoToe = VAR TotalMedian = MEDIAN(ALL(Assessment_Skills[Head_To_Toe])) VAR StudentValue = SUM(Assessment_Skills[Head_To_Toe]) RETURN DIVIDE(StudentValue, TotalMedian, 0)
代码解释
TotalMedian:通过ALL(Assessment_Skills[Head_To_Toe])清除该列的筛选上下文,固定计算全体学生的Head to Toe中位数(此处为4)。StudentValue:获取当前筛选学生的Head to Toe完成数(单个学生对应唯一值,用SUM/MAX/MIN均可)。DIVIDE:安全计算百分比,第三个参数0是除零时的默认返回值,避免出现报错。
测试结果
应用学生筛选后,各学生的计算结果如下:
- Student 1:2/4 = 50%
- Student 2:3/4 = 75%
- Student 3:5/4 = 125%
- Student 4:6/4 = 150%
内容的提问来源于stack exchange,提问作者TSA Sonak WNMU
相关产品推荐
相关产品推荐

