zoukankan      html  css  js  c++  java
  • 数据可视化之DAX篇(九) 关于DAX中的VAR,你应该避免的一个常见错误

    https://zhuanlan.zhihu.com/p/67803111

    本文源于微博上一位朋友的问题,在计算同比增长率时,以下两种DAX代码有什么不同?

    --------------------

    YOY% 1 =

    VAR sales=SUM('订单'[销售额])

    VAR lysales=

    CALCULATE(

    SUM('订单'[销售额]),

    SAMEPERIODLASTYEAR('日期表'[日期]))

    RETURN DIVIDE(sales-lysales,lysales)

    --------------------

    --------------------

    YOY% 2 =

    VAR sales=SUM('订单'[销售额])

    VAR lysales=

    CALCULATE(

    sales,

    SAMEPERIODLASTYEAR('日期表'[日期]))

    RETURN DIVIDE(sales-lysales,lysales)

    --------------------

    这两种方式,只是在计算上年销售额lysales时,CALCULATE的第一个参数有区别,第一种方式是使用SUM('订单'[销售额]),而第二种方式是利用了上一步VAR定义好的sales来进行运算。

     

    你可以先思考一下,上述两种方式哪一种可以返回期望的结果呢?

     


    将这两个度量值放进矩阵中看看结果,

     

     

    因为2016年没有上年数据,所以YOY%1 2016年的结果为空,也属正常,2017年正常计算出结果。

     

    但是YOY%2 的每个值都是零,为什么是这个结果呢?

    并且这种写法还是参考了微软官方文档中VAR的使用示例:

     

    所以官方的资料中也会有失误的情况,而我之前的文章中(学会VAR,你就离掌握DAX更近了一步)也介绍了这个写法,当时没有细想,也没有实际验证,现在看来,也是很有问题的,这里给大家道个歉。

    第二种写法到底有什么问题呢?

    还是要回到VAR的特征,它定义的是一个变量,但是它一旦定义完成,在当前的计算中就变成了一个固定值,不会再发生变化,所以在计算lysales时,无论是否有 SAMEPERIODLASTYEAR的条件,它都会等于sales,因此导致结果都等于0。

    如果还不明白,我们可以再分别验证一下sales和lysales的结果,

    再建两个度量值:

    --------------------

    sales =

    VAR sales=SUM('订单'[销售额])

    RETURN sales

    --------------------

    --------------------

    lysales =

    VAR sales=SUM('订单'[销售额])

    VAR lysales=

    CALCULATE(

    sales,

    SAMEPERIODLASTYEAR('日期表'[日期]))

    RETURN lysales

    --------------------

    结果如下,

     

     

    lysales的计算结果和sales完全一样!

    以2017年为例,VAR定义的变量sales的结果是1666736,在计算lysales时,就变成了:

    CALCULATE(

    1666736,

    SAMEPERIODLASTYEAR('日期表'[日期]))

    结果当然还是1666736.

     

    如何解决这个问题呢,就是使用本文开头的第一种写法,定义的sales和lysales都要独立根据上下文运算,分别得出正确的结果以后,再进行增长率运算。

    通过这个例子,是不是对VAR的理解又加深了一层呢。

  • 相关阅读:
    WSL2
    坐标系变换
    Python websocket
    PAJ7620 IIC 通信
    Python中assert的使用
    Python中循环的使用
    Linux 生成指定大小文件
    SVN不显示log 显示1970年问题
    阿里云 CS实例 开机自运行脚本文件
    生成UDS安全算法DLL文件
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12807881.html
Copyright © 2011-2022 走看看