数据可视化之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的理解。
数据可视化之DAX篇(八) DAX学习:使用VAR定义变量的更多相关文章
- python基础练习题(题目 学习使用auto定义变量的用法)
day28 --------------------------------------------------------------- 实例042:变量作用域 题目 学习使用auto定义变量的用法 ...
- 数据可视化之PowerQuery篇(四)二维表转一维表,看这篇文章就够了
https://zhuanlan.zhihu.com/p/69187094 数据分析的源数据应该是规范的,而规范的其中一个标准就是数据源应该是一维表,它会让之后的数据分析工作变得简单高效. 在之前的文 ...
- 数据可视化之分析篇(六)使用Power BI进行流失客户分析
https://zhuanlan.zhihu.com/p/73358029 为了提升销量,在不断吸引新客户的同时,还要防止老客户离你而去,但每一个顾客不可能永远是你的客户,不可避免的都会经历新客户.活 ...
- 数据可视化之分析篇(五)如何使用Power BI计算新客户数量?
https://zhuanlan.zhihu.com/p/65119988 每个企业的经营活动都是围绕着客户而开展的,在服务好老客户的同时,不断开拓新客户是每个企业的经营目标之一. 开拓新客户必然要付 ...
- 数据可视化之PowerQuery篇(十六)使用Power BI进行流失客户分析
https://zhuanlan.zhihu.com/p/73358029 为了提升销量,在不断吸引新客户的同时,还要防止老客户离你而去,但每一个顾客不可能永远是你的客户,不可避免的都会经历新客户.活 ...
- 数据可视化之PowerQuery篇(十五)如何使用Power BI计算新客户数量?
https://zhuanlan.zhihu.com/p/65119988 每个企业的经营活动都是围绕着客户而开展的,在服务好老客户的同时,不断开拓新客户是每个企业的经营目标之一. 开拓新客户必然要付 ...
- 数据可视化之 图表篇(四) 那些精美的Power BI可视化图表
之前使用自定义图表,每次新打开一个新文件时,都需要重新添加,无法保存,在PowerBI 6月更新中,这个功能得到了很大改善,可以将自定义的图表固定在内置图表面板上了. 添加自定义图表后,右键>固 ...
- 数据可视化之 图表篇(二)如何用Power BI制作疫情地图?
丁香园制作的这个地图可视化,相信大家每天都会看好几遍,这里不讨论具体数据,仅来探讨一下PowerBI地图技术. 这个地图很简洁,主要有三个特征: 1,使用着色地图,根据数据自动配色 2,只显示中国地图 ...
- 【WaaCaa】一款开源科学作图/数据可视化工具 —— 诞生篇
作为一个理工男.用过了形形色色能够用于科学作图/数据可视化软件:从大学时做实验课推荐用于分析简单採集数据的 Origin; 毕业论文时用来呈现实验时序信号和离线分析脑电信号的 MATLAB.后面还发现 ...
随机推荐
- FWT,FST入门
0.目录 目录 0.目录 1.什么是 FWT 2. FWT 怎么做 2.1. 或卷积 2.2.与卷积 2.3.异或卷积 2.4.例题 3. FST 3.1. FST 怎么做 3.2.例题 1.什么是 ...
- webpack介绍—上
6.1 webpack概念的引入 在网页中会引用哪些常见的静态资源? JS .js. .jsx ..coffee. .ts(TypeScript 类 C# 语言) CSS .css. .less. . ...
- cute-cnblogs 一期样式原文
cute-cnblogs 说明 "我经常有那种感觉,如果这个事情来了,你却没有勇敢地去解决掉,它一定会再来.生活真是这样,它会一次次地让你去做这个功课直到你学会为止." -- &l ...
- vue 生命周期:
vue 生命周期: 1. beforeCreate()创建组件; 2. created() 创建完成; 3. beforeMounte() 组件被挂裁前; ...
- 终于搞明白Unicode,ASCII,UTF8,UCS2编码是啥了
[本文版权归微信公众号"代码艺术"(ID:onblog)所有,若是转载请务必保留本段原创声明,违者必究.若是文章有不足之处,欢迎关注微信公众号私信与我进行交流!] 前言 本文起因于 ...
- 学习oracle的SQL语句 练习
--1.查询emp表,显示薪水大于2000,且工作类别是MANAGER的雇员信息 select * from emp where sal > 2000and job = 'MANAGER'; - ...
- linux主机连接sftp报错received unexpected end-of-file from SFTP server
SFTP 连接主机失败,提示信息如下: 登陆目标主机,编辑查看 /etc/ssh/sshd_config 文件,找到 Subsystem 关键字 替换为 Subsystem sftp internal ...
- Docker入门(1):概述
1.摘要 在这篇文章中,我将介绍一下为什么需要虚拟化的环境. 然后我将介绍耳熟能详的虚拟化技术:虚拟机,并大致的介绍一下虚拟机的原理,希望能够让你知道虚拟机的优劣. 在之后,针对虚拟机存在的问题,引出 ...
- Visual C++线程同步技术剖析:临界区,时间,信号量,互斥量
使线程同步 在程序中使用多线程时,一般很少有多个线程能在其生命期内进行完全独立的操作.更多的情况是一些线程进行某些处理操作,而其他的线程必须对其处理结果进行了解.正常情况下对这种处理结果的了解应当在其 ...
- javamelody对Java Application进行监控
前面写过对于webapp,用javamelody来监控.分析性能是挺方便的:那要对普通的java应用进行监控,只需要在应用上启动一个嵌入式web容器就可以了. javamelody里面的war包就用了 ...