• 数据可视化之DAX篇(八) DAX学习:使用VAR定义变量


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

    前面介绍如何使用DAX生成日期表的时候,使用了VAR,有人留言问这个VAR怎么理解,那么这篇文章就来介绍VAR以及它的用法。

     

    VAR是VARIABLE的缩写,意思为变量,任何一个编程语言中,变量都是一个非常重要的基础概念,DAX当然也是一种语言,也有变量这个概念。如果以前学过编程,对这个应该很熟悉;没学过也没有关系,看了本文你就理解了。

     

    我们人都有记忆能力,电脑也有记忆能力,并且比人的记忆能力更强大更稳定,那么如何利用电脑的记忆能力呢,就是利用变量。

     

    变量就是可以改变的量,比如把当天日期定义为一个变量,那么通过这个变量电脑就记住了今天是4月29号,到了明天就变成4月30号了。

    通过变量可以随心所欲的控制电脑的记忆,需要了就用,用完了可随时丢开,再想使用了再拿过来。

    与变量想对应的就是常量,比如新中国成立日期是1949年10月1日,就是一个常量,电脑中定义以后,无论时光怎么流逝,电脑中这个记忆都不会改变。

    在DAX中,就是通过VAR来控制电脑的记忆的。

     

    VAR语法

     

    VAR的语法规范很简单,就是把一个表达式定义为一个名称,

    VAR 变量名=表达式

     

    其中变量名不能和模型中现有的表名、字段名相同,也不能使用数字作为第一个字符,不能使用空格等,这个不用刻意记,如果提示变量名不符合规范,重新命名一下就是了。

    定义变量是为了使用,是要返回结果的,这个操作由RETURN来完成,具体使用方式,看下面的示例。

     

    VAR使用示例

     

    假如有一个产品销售数据,现在计算每种产品的同比增长率,如果不使用VAR,我们可能是这样来计算的,

     

    1,新建度量值,

     

    [Sales]=SUM(销售表[销售额])

     

    2,计算去年销售额,

     

    [Saleslastyear]=CALCULATE([Sales],SAMEPERIODLASTYEAR(日期表[日期])

     

    3,计算同比增长率

     

    [YoY%]=DIVIDE([Sales]-[Saleslastyear],[Saleslastyear])

     

    而使用VAR,新建一个度量值就可以搞定:

     

    [YoY%]=
    VAR Sales=SUM(销售表[销售额])
    VAR Saleslastyear=
    CALCULATE(SUM(销售表[销售额]),SAMEPERIODLASTYEAR(日期表[日期])
    RETURN
    DIVIDE(Sales-Saleslastyear,Saleslastyear)

     

    这个度量值先定义一个变量“Sales”,然后再定义第二个变量的时候,两个变量定义完成后,返回两个变量相除的结果。

     

    如果把这个度量值放入到上下文中,比如当前上下文为产品甲,电脑中会先记住产品甲的“Sales”,然后记住产品甲的“Saleslastyear”,最后通过RETURN后面的表达式,调用上面的记忆,执行运算,得到产品甲的同比增长率。

     

    通过这个例子可以看出,VAR可以简化度量值的书写,并便于理解。并且它完成运算以后结果就被电脑记忆下来,需要时可以随时调用,而无需重新运算,大大提升了DAX的运算性能。

    它还有一个小功能就是替代EARLIER函数。

     

    替代EARLIER函数

     

    在之前介绍EARLIER函数的时候,曾举了一个计算累计销量的例子,

     

     

    用的是下面的DAX编写的新建列:

     

    SUMX (FILTER('订单表',[序号]<=EARLIER([序号])&&
    [产品名称]=EARLIER([产品名称])),[销售数量])

     

    现在用VAR可以这样写:

     

    VAR Index=[序号]
    VAR ProductID=[产品名称]

    RETURN
    CALCULATE(SUM([销售数量]),filter('订单表',
    [序号]<=Index&&[产品名称]=ProductID))

     

    可以返回同样的结果,比EARLIER更易于理解。

    上一篇文章中生成日期表的DAX,其中有两种方式也是综合使用VAR的例子,再仔细看一遍也可以加深对VAR的理解。

  • 相关阅读:
    Spring Boot 的各种start
    Lombok介绍、使用方法和总结
    JS字符串与二进制的相互转化
    java字符串与二进制的相互转化
    DevExpress WPF v18.2新版亮点(六)
    用MyEclipse开发REST Web Service
    .NET界面控件DevExpress发布v18.2.4|附下载
    DevExpress WPF v18.2新版亮点(五)
    「版本升级」MyEclipse CI 2018.12.0正式发布
    MyEclipse使用教程:在Web项目中使用Web片段
  • 原文地址:https://www.cnblogs.com/qiu-hua/p/12807828.html
Copyright © 2020-2023  润新知