没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
DAX
神功第
1
卷我们学到了很多知识,建议大家学习
DAX
神功以
文字版
为主,多练
习,视频版为辅。我这个人很懒惰,无意义的事情我从来不做。我既然担务这么多时
间写文字版,恰恰证明它重要,原理课,看视频真的不是最佳选择。
2020
年末已有前
辈用视频讲原理,但是失败了。原因在于,人脑的速度远底于语言的速度,本身原理
就需要思考和理解,原理课不同于案例的讲解。
原理课的最佳学习方法是:我写文字,你阅读,你在测试过程中去理解。
一、为什么要用变量
1.
代码美观,可读性更强
这个问题因人而异,就好比你喜欢一个女演员,你认为她长得很好看,但是,总会有
很多人认为你眼光有问题。所以,美观和可读性是因人而异的。
2.
提高性能,这才是重点
学会一门功夫以后,可以随时且多次的使用。不需要每次使用前再重新学一次吧?
情景一:张无忌不使用变量
步骤1:五年练成九阳神功
步骤2:练乾坤大挪移时需要九阳神功做钥匙:五年练成九阳神功,1天练成乾坤大挪
移
步骤3:来到光明顶,已经是明教兄弟5周年祭日了
这里只是举例,在DAX函数计算上,没有这么夸张
孙兴华个人想法:数据量较大时,建议使用Pandas或SQL等,汽车改装的确可以
提高速度,但是改装成本高,也不安全;你追求速度,为何不使用速度更快的交通工
具呢?
情景二:张无忌使用变量
定义以下两个变量:
变量1:九阳神功=5年
变量2:乾坤大挪移=1天 因为有九阳神功做钥匙
使用:直接调用变量即可
光明顶力战六大派=九阳神功 + 乾坤大挪移
注意1.变量名不能与表同名
我个人的建议:新建列(不同表格的列除外),度量值,表名,变量名 尽量使用唯
一名称,避免混淆
你不用脑子记忆哪些可以,哪些冲突,这完全是无意义的事情
一个公司的领导没有办法在招聘时不招同姓名的员工
但是,一个学校的教务处人员,他完全有能力将同姓名的学生不分在一个班级。
你现在就有能力,不将上述内容定义为重名
注意2:变
量
名不能使用中文
二、变量可以赋值什么类型?
《DAX神功》第1卷第7回: 证明了变量可以是一张表
一班男生 =
var tb1 = FILTER('Sheet1','Sheet1'[性别]="男")
return
FILTER(tb1,'Sheet1'[班级]="一班")
《DAX神功》第1卷第17回: 证明了变量可以是一个值
占比1=
VAR x = sum(Sheet1[销量])
VAR y = CALCULATE(sum(Sheet1[销量]),ALL(Sheet1))
return
DIVIDE(x,y)
Ps
:当然,这个时候使用度量值计算也可以,我们只是举例而已
网友提问:变量也可以是一个列呀,你使用过你怎么不承认呢?
《DAX神功》第1卷第14回
新建列 =
var x='Sheet1'[
序号
]
return
sumx(FILTER('Sheet1','Sheet1'[
序号
]=x+1),'Sheet1'[
销售日期
])
01.VAR变量
2021
年
8
月
29
日
7:32
分区 DAX神功第二卷 的第 1 页
答:如果你问出这样的问题,那么你没认真听课,时间不够可以一周学一集,欲速则
不达。变量等于某个列时,代表的是这个列的当前行,仍然是一个值。
三、当标量值做变量时
1.
变量要按顺序引用
以VBA为例,基本所有语言都遵循这一原则
我们只是将变量a与变量b的顺序交换,结果就不同了,为什么?有小学数学基础便可
理解。
VBA
对没有定义的变量默认为
0
或空字符,但是
DAX
对没有定义的变量不能引用
DAX
中无论新建列还是度量值情况都是这样的:
测试1 =
VAR a=1
VAR b=a+1
VAR c=a+b
Return
c
2.
变量在其自身的
VAR/Retrun
代码之外不可用
【有争议】
【新建列】毛利额1=Calculate(sumx('Sheet1','Sheet1'[销量]*'Sheet1'[售
价]-'Sheet1'[销量]*'Sheet1'[进价]))
【新建列】
毛利额2 =
VAR x='Sheet1'[
销量
]*'Sheet1'[
售价
]
VAR y='Sheet1'[
销量
]*'Sheet1'[
进价
]
分区 DAX神功第二卷 的第 2 页
VAR y='Sheet1'[
销量
]*'Sheet1'[
进价
]
return
CALCULATE(sumx('Sheet1',x-y),all(Sheet1[毛利额1]))
解释:《DAX神功》第1卷第14回讲到,当新建列时,变量是某列代表当前行
Ps:
因为我们在一个表中新建列时,使用了多次
Calculate
,会出现循环依赖,所以我
们要取消【毛利额
1
】的筛选,详见《
DAX
神功》第
1
卷第
20
回 循环依赖什么鬼?
接下来我们看看度量值应该怎么写?
【度量值】毛利额3 = Sumx('Sheet1','Sheet1'[销量]*'Sheet1'[售价]-'Sheet1'[销
量]*'Sheet1'[进价])
解释:Sumx创建行上下文,放到度量值中,就自动转换成筛选上下文
但是变量这样写就不行了,具体原因在《DAX神功》第1卷第14回讲过了
毛利额4 =
var x='Sheet1'[
销量
]*'Sheet1'[
售价
]
var y='Sheet1'[
销量
]*'Sheet1'[
进价
]
return
sumx('Sheet1',x-y)
解释:我们讲当前行时,讨论过这样的情况
那应该怎么写呢?
毛利额4 =
var x=SELECTEDVALUE('Sheet1'[销量])*SELECTEDVALUE('Sheet1'[售价])
var y=SELECTEDVALUE('Sheet1'[销量])*SELECTEDVALUE('Sheet1'[进价])
return
sumx('Sheet1',x-y)
但是,这样写太麻烦了,没有总计是小事,假设有十多个列四则运算怎么办?
毛利额5 =
sumx('Sheet1',
var x='Sheet1'[
销量
]*'Sheet1'[
售价
]
var y='Sheet1'[
销量
]*'Sheet1'[
进价
]
return
x-y
)
解释:将变量定义在迭代函数里面,迭代函数本身就是逐行扫描,就代表着当前行
分区 DAX神功第二卷 的第 3 页
在这个知识点上,《DAX神功》与《The Definitive Guide to DAX》推导的方式不
同,《The Definitive Guide to DAX》是以嵌套的概念推导,《DAX神功》是以当前
行概念推导
接下来我们再看一下毛利额6:
证明:在同一个VAR/Retrun代码块之内,定义的变量可以使用
毛利额6 =
sumx('Sheet1',
var x='Sheet1'[销量]*'Sheet1'[售价]
return
x
-
var y='Sheet1'[销量]*'Sheet1'[进价]
return
y
)
解释:在迭代函数,定义变量x并输出 减去 定义变量y并输出
这符合规则:在同一个VAR/Retrun代码块之内,定义的变量可以使用
有争议的地方在于:《The Definitive Guide to DAX》指出变量在其自身的
VAR/Retrun代码之外不可用
但是《The Definitive Guide to DAX》中案例举例是正确的,书中大致意思如下:
但是它的例子并不能说明,自身的VAR/Retrun代码之外不可用
因为你并没有重新定义VAR函数
分区 DAX神功第二卷 的第 4 页
书中原文总结,定义在自身VAR/Return之外不可用,VAR/Return中声明的变量
在return结束后不再可见,引用它会产生错误
关于这个问题,我在PowerBI 2021.6月版本测试通过,并没有发现不可用或引用错
误:
毛利额7 =
sumx('Sheet1',
var x='Sheet1'[销量]*'Sheet1'[售价]
var z=0
return
z
+
var y='Sheet1'[销量]*'Sheet1'[进价]
return
x-y
)
所以,书中说的这一点是有分歧的,拿出来与大家共同探讨,互通有无。
四、当变量做为一张表时
《DAX神功》第1卷第7回: 证明了变量可以是一张表
分区 DAX神功第二卷 的第 5 页
剩余209页未读,继续阅读
Bingo_Excel
- 粉丝: 9
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0