PowerBI分组统计,利用度量值如何实现?

在刚开始学习powerBI时,经常习惯于用计算列,分组也都是通过新建列的方式实现的,直观上比较容易理解。

不过这样都修改了原始数据的结构,如果我们不在源表上进行修改,直接通过度量值的方式来进行分组,是否可以实现呢?

答案当然是肯定的。

采用度量值的方式首先定义好分组的类别和标准,然后把需要分组的数据分别统计到指定的分组中。

依然按照上篇文章的数据,统计优秀、良好、及格和不及格的学生分别有多少?

成绩表中的数据结构不做任何更改,我们先创建一个分组表,

如果成绩落在最小值和最大值之间,就归属于该分组。

编写度量值如下:

成绩分组统计 =

CALCULATE(

    DISTINCTCOUNT('成绩'[姓名]),

    FILTER('成绩',

       AND(

         '成绩'[数学成绩]<=SELECTEDVALUE('分组表'[最大值]),

         '成绩'[数学成绩]>=SELECTEDVALUE('分组表'[最小值])

       )

    ) 

)

使用度量值和新建列的不同之处就是,新建列的行上下文是确定的,可以直接使用行字段,而度量值的外部上下文是动态的,所以无法直接和某个具体指标匹配,这时就要用到SELECTEDVALUE函数,它根据外部上下文的环境来进行动态匹配运算。

编写度量值的表达式时,不知道如何查找外部上下文时,一定不要忘了SELECTEDVALUE函数。

利用矩阵来看看度量值的结果,

这样每个类别的人数就统计出来了,不过有个问题是,总计行没有计算出来。原因是由于SELECTEDVALUE函数函数只查找了分组表中的类别,而该表并没有总计这个值,所以无法计算显示为空。

为了使总计正常显示,可以再加个判断函数ISFILTERED,如果分组列中有该分类,就正常执行上面的度量值计算,否则返回成绩表中人数合计。

更改后的度量值如下:

成绩分组统计 =

IF(ISFILTERED('分组表'[分组]),

  CALCULATE(

    DISTINCTCOUNT('成绩'[姓名]),

    FILTER('成绩',

      AND(

        '成绩'[数学成绩]<=SELECTEDVALUE('分组表'[最大值]),

        '成绩'[数学成绩]>=SELECTEDVALUE('分组表'[最小值])

      )

    )

  ),

  DISTINCTCOUNT('成绩'[姓名])

)

然后总计行会正常显示。并且源数据发生变化,度量值返回的结果也会同步更新。

以上就是使用度量值进行分组的做法,DAX看起来很长,其实逻辑上比较简单,理解它对进一步掌握DAX有很大帮助。

利用度量值,进行数据分析时可以更灵活的使用,以后还有更多文章介绍度量值分组的应用场景。

-精彩推荐-

PowerBI数据分析和可视化实战案例

PowerBI时间相关的度量值,都在这里了

PDF转Excel,这个秘籍推荐给你

采悟 from PowerBI星球

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章