表变量是什么_DAX学习:使用VAR定义变量
前面介绍如何使用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的理解。
公众号:PowerBI星球
表变量是什么_DAX学习:使用VAR定义变量相关推荐
- css里面的let,js中let和var定义变量的区别
javascript 严格模式 第一次接触let关键字,有一个要非常非常要注意的概念就是"javascript 严格模式",比如下述的代码运行就会报错: let hello = ' ...
- js中let和var定义变量的区别
let变量之前没见过,刚遇到,探探究竟. 以下转自:http://blog.csdn.net/nfer_zhuang/article/details/48781671 声明后未赋值,表现相同 (fun ...
- python 声明变量类型_python基础学习03数据类型和变量
数据类型和变量 1. 数据类型 1.1 整数 Python中不限制整数正负及大小,例如:1,-1,100,-100等等.计算机常用十进制和十六进制表示数值,比如十六进制表示方法是用前缀0x加后缀0-9 ...
- html页面使用var变量,使用var定义变量和不使用var的本质区别
最基本的var关键字是上下文的,而不采用var是全局的这就不讨论了 "不管是使用var关键字(在全局上下文)还是不使用var关键字(在任何地方),都可以声明一个变量".这貌似一个错 ...
- let和var定义变量的区别
ES6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 声明后未赋值,表现相同 (function() {var varTest;let le ...
- python 定义变量_用python解决动态的定义变量名(并给其赋值方法:大数据处理)...
前言: 今天为大家带来的内容是:用python解决动态的定义变量名(并给其赋值方法:大数据处理)具有很好的参考价值,希望对大家有所帮助.喜欢本文内容的记得点赞转发收藏不迷路哦!!! 最近消费kafka ...
- java自定义变量解析,Thymeleaf内置对象、定义变量、URL参数及标签自定义属性
如标题所述,这篇文章主要讲述Thymeleaf中的内置对象(list解析.日期格式化.数字格式化等).定义变量.获取URL的参数和在页面标签中自定义属性的应用. 如果对Thymeleaf的基本使用.m ...
- 【C语言】全局变量、本地变量、静态本地变量(书写规范代码,正确定义变量,防止未知错误)
参考中国大学MOOC 浙江大学翁恺C语言程序设计在线课程 作用域:一段程序代码中所用到的名字并不总是有效/可用的,而限定这个名字的可用性的代码范围就是这个名字的作用域. 生存期:从对象分配到内存开始, ...
- c语言stm8变量存储类型,STM8使用----STVD(COSMIC)定义变量指定其类型和位定义
STM8使用----STVD(COSMIC)定义变量指定其类型和位定义 http://www.51hei.com/bbs/dpj-31009-1.html (出处: 单片机论坛) stm8 stvd下 ...
最新文章
- asp.net 网页做一个浮动层_你们要的HTML、CSS布局技巧:如何规范搭建网页架构?
- Python A+B问题
- Android通过意图使用内置的音频播放器
- java统计一个字符串中每个字符出现的次数_剑指offer算法题054:字符流中第一个不重复的字符...
- Android 8.0学习(8)---内核文件系统优化
- 基于win32的windows画板程序
- php 扫描仪对接,Mac_Mac怎么连接扫描仪?苹果电脑Mac添加扫描仪教程, 有很多的用户需要用到扫 - phpStudy...
- 即将发布的 JDK 11 包含了什么?
- java新职篇:面向对象之抽象
- 上门挂画服务_瀑布山水画挂在哪里好 弄懂这2点挂画没烦恼
- 2. JavaScript Boolean 对象
- 机器学习系列(5)_从白富美相亲看特征预处理与选择(上)
- 巨详细的iphone新手教程
- 一键把动态IP自动设置为静态IP
- Android Jetpack 之 DataStore 初探
- 2022美团CTF个人决赛WP
- 读取 RV1126 CPU温度 NPU CPU频率
- 01Linux之计算机硬件软件介绍
- 智能插座 一Homekit智能家居
- 用了这么久的消息队列,你知道为什么需要它吗?
热门文章
- Postman用法简介-Http请求模拟工具
- 语言非递归求解树的高度_算法素颜(11):无死角“盘”它!二分查找树
- 2017云栖大会门票转让_「揭秘GP」云栖大会 | Greenplum 6.0 内核优化解读和7.0展望...
- android 如何 root权限获取,如何获取android手机root权限获取
- ES6 深拷贝_你别自以为是:ES6误区 之 Object.assign()、const
- 一个java文件里面可以写多少个class
- 卡尔曼_卡尔曼滤波最完整公式推导
- Spring jndi连接数据库
- 程序员述职报告范文_物流人员述职报告范文(通用5篇)
- 项目入口_新进展!石家庄地铁项目长安公园站出入口全部封顶