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. laravel模板使用

    {{ $var }} - 打印内容 {{ $var or 'default' }} - 打印内容并带一个默认值 {{{ $var }}} - 打印转义内容 {{-- Comment --}} - 注释 ...

  2. <Win10开发>一些小知识。

    这篇文章分享一下UWP开发的一些零散的小知识. 1.设置应用的最小尺寸 主要用在PC上,UWA在PC可以被鼠标随意摆弄,可大可小,界面的响应式设计是一大特点.不过有些时候还是要考虑,我们的App界面元 ...

  3. OpenSSL & 加密解密

    OpenSSL&加密解密(思维导图) 1. 网络通信概述 传输层协议 进程间通信 监听端口 SSL 裸套接字 2. 加密和解密 2.1 加密的方式 对称加密 公钥加密 单向加密 认证加密 2. ...

  4. [CF696D]Legen...

    题目   点这里看题目. 分析   首先对于模式串建立 AC 自动机,并且计算出每个状态\(p\)的贡献总和\(con(p)\).   考虑一个朴素的 DP :   \(f(i,p)\):当前串长度为 ...

  5. spark源码解析大全

      第1章 Spark 整体概述 1.1 整体概念   Apache Spark 是一个开源的通用集群计算系统,它提供了 High-level 编程 API,支持 Scala.Java 和 Pytho ...

  6. Cookie 和 Session 关系详解

     什么是 Cookie 和 Session ? 什么是 Cookie HTTP Cookie(也叫 Web Cookie或浏览器 Cookie)是服务器发送到用户浏览器并保存在本地的一小块数据,它会在 ...

  7. Latex 安装 教程

    需要安装texlive和编辑器texstudio. 安装教程如https://www.cnblogs.com/dingruihfut/p/9690073.html

  8. 用VC++6.0,双击主对话框中的按钮时,不能跳转到代码处

    1. 首先在项目中--[生成]build--[清除解决方案]clean 2. 关闭项目 3. 删除项目中的[Debug]下所有文件 4. 把*.aps,*.clw,*.ncb,*.opt删掉----- ...

  9. GeckoDriver+Selenium+Python的安装和使用

    如果没有安装GeckoDriver会提示: selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executab ...

  10. VB.NET在基类中定义共享事件(类似于C#中的静态事件)

    基类: Public Class userFun Private Shared _PnlStatus As String ‘必须设为共享字段,如果不设为Shared,将不能传递字符串内容 Public ...