zoukankan      html  css  js  c++  java
  • 数据可视化之powerBI技巧(二十)采悟:创建度量值,轻松进行分组统计

    上一篇文章中的分组,都是通过新建列的方式实现的,直观上比较容易理解。不过这样都修改了原始数据的结构,如果我们不在源表上进行修改,直接通过度量值的方式来进行分组,是否可以实现呢?

    答案当然是肯定的。

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

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

     

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

     

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

    编写度量值如下:

     

    成绩分组统计 =
    CALCULATE(
    DISTINCTCOUNT('成绩'[姓名]),
    FILTER('成绩',
    AND(
    '成绩'[数学成绩]<=SELECTEDVALUE('分组表'[最大值]),
    '成绩'[数学成绩]>=SELECTEDVALUE('分组表'[最小值])
    )
    )
    )

     

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

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

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

     

     

     

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

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

    更改后的度量值如下:

     

    成绩分组统计 =
    IF(ISFILTERED('分组表'[分组]),
    CALCULATE(
    DISTINCTCOUNT('成绩'[姓名]),
    FILTER('成绩',
    AND(
    '成绩'[数学成绩]<=SELECTEDVALUE('分组表'[最大值]),
    '成绩'[数学成绩]>=SELECTEDVALUE('分组表'[最小值])
    )
    )
    ),
    DISTINCTCOUNT('成绩'[姓名])
    )

     

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

    以上就是使用度量值进行分组的做法,DAX看起来很长,其实逻辑上比较简单,理解它对进一步掌握DAX有很大帮助。利用度量值,进行数据分析时可以更灵活的使用,下篇文章介绍度量值分组的应用场景。

  • 相关阅读:
    ExecuteNonQuery()返回值
    GridView导入至EXCEL (报错处理:只能在执行 Render() 的过程中调用 RegisterForEventValidation)
    mysql 远程登录
    四舍六入 银行家算法
    linux-grep-tail-find
    spring 事务注解
    aop execution 表达式解析
    事务有效条件
    oracle 日期取 月 日
    spring cloud 定时任务
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12803774.html
Copyright © 2011-2022 走看看