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的理解。

数据可视化之DAX篇(八) DAX学习:使用VAR定义变量的更多相关文章

  1. python基础练习题(题目 学习使用auto定义变量的用法)

    day28 --------------------------------------------------------------- 实例042:变量作用域 题目 学习使用auto定义变量的用法 ...

  2. 数据可视化之PowerQuery篇(四)二维表转一维表,看这篇文章就够了

    https://zhuanlan.zhihu.com/p/69187094 数据分析的源数据应该是规范的,而规范的其中一个标准就是数据源应该是一维表,它会让之后的数据分析工作变得简单高效. 在之前的文 ...

  3. 数据可视化之分析篇(六)使用Power BI进行流失客户分析

    https://zhuanlan.zhihu.com/p/73358029 为了提升销量,在不断吸引新客户的同时,还要防止老客户离你而去,但每一个顾客不可能永远是你的客户,不可避免的都会经历新客户.活 ...

  4. 数据可视化之分析篇(五)如何使用Power BI计算新客户数量?

    https://zhuanlan.zhihu.com/p/65119988 每个企业的经营活动都是围绕着客户而开展的,在服务好老客户的同时,不断开拓新客户是每个企业的经营目标之一. 开拓新客户必然要付 ...

  5. 数据可视化之PowerQuery篇(十六)使用Power BI进行流失客户分析

    https://zhuanlan.zhihu.com/p/73358029 为了提升销量,在不断吸引新客户的同时,还要防止老客户离你而去,但每一个顾客不可能永远是你的客户,不可避免的都会经历新客户.活 ...

  6. 数据可视化之PowerQuery篇(十五)如何使用Power BI计算新客户数量?

    https://zhuanlan.zhihu.com/p/65119988 每个企业的经营活动都是围绕着客户而开展的,在服务好老客户的同时,不断开拓新客户是每个企业的经营目标之一. 开拓新客户必然要付 ...

  7. 数据可视化之 图表篇(四) 那些精美的Power BI可视化图表

    之前使用自定义图表,每次新打开一个新文件时,都需要重新添加,无法保存,在PowerBI 6月更新中,这个功能得到了很大改善,可以将自定义的图表固定在内置图表面板上了. 添加自定义图表后,右键>固 ...

  8. 数据可视化之 图表篇(二)如何用Power BI制作疫情地图?

    丁香园制作的这个地图可视化,相信大家每天都会看好几遍,这里不讨论具体数据,仅来探讨一下PowerBI地图技术. 这个地图很简洁,主要有三个特征: 1,使用着色地图,根据数据自动配色 2,只显示中国地图 ...

  9. 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇

    作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...

随机推荐

  1. pip应用实例

    homepage 目录 1. 安装 1.1. 指定版本 1.2. 用户权限 1.3. 读取requirments.txt 1.4. 不使用缓存文件 1.5. 指定extras_require 2. 镜 ...

  2. 良心之作送你几个Xsheel使用小技巧

    ❝ 工作中无可避免的会使用到Xsheel,接下来咔咔给你介绍几个小技巧,让你工作游刃有余. ❞ 一.告别繁琐 你的Xsheel连接后是不是这样的 哦!这个也太烦了我至少得在敲俩次命令才能到我的工作目录 ...

  3. 13.实战交付一套dubbo微服务到k8s集群(6)之交付dubbo服务的消费者集群到K8S

    构建dubbo-demo-consumer,可以使用和dubbo-demo-service的流水线来构建 1.登录jenkins构建dubbo-demo-consumer  2.填写构建dubbo-d ...

  4. 11.实战交付一套dubbo微服务到k8s集群(4)之使用Jenkins进行持续构建交付dubo服务的提供者

    1.登录到jenkins,新建一个项目 2.新建流水线 3.设置保留的天数及份数 4. 添加参数 # 参数 . name: git_repo type: string description: 项目在 ...

  5. 【String注解驱动开发】面试官让我说说:如何使用FactoryBean向Spring容器中注册bean?

    写在前面 在前面的文章中,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration结合@Bean向Spring容器中注册bean:可以按照条件向Spring容器中 ...

  6. 浅析pplx库的设计与实现。

    主要有三部分组成,threadpool,scheduler,task. 三者关系如上图示,pplx只着重实现了task部分功能,scheduler跟threadpool只是简略实现. threadpo ...

  7. 说说TCP的三次握手和四次挥手

    一.传输控制协议TCP简介 1.1 简介 TCP(Transmission Control Protocol) 传输控制协议,是一种 面向连接的.可靠的.基于字节流的传输层 通信协议. TCP是一种面 ...

  8. android handle详解2 主线程给子线程发送消息

    按照android handler详解分析的原理我们可以知道,在主线程中创建handle对象的时候,主线程默认创建了一个loop对象使用threalocal函数将loop对象和主线程绑定. 我们能不能 ...

  9. Spark中自定义累加器

    通过继承AccumulatorV2可以实现自定义累加器. 官方案例可参考:http://spark.apache.org/docs/latest/rdd-programming-guide.html# ...

  10. python高阶-Linux基础命令集

    声明: 1)仅作为个人学习,如有冒犯,告知速删! 2)不想误导,如有错误,不吝指教! 1: 查看文件信息:ls ls常用参数: 参数 含义 -a 显示指定目录下所有子目录与文件,包括隐藏文件 -l 以 ...