没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
这一卷大家放轻松,没有太多用脑过度的知识,主要讲解DAX高级关系,但是在实际应用中,我们普遍是化繁为简的,表格数量也是越少越好的,有些人会说为了
更多颗粒度,我需要使用很多表格。那你想一想,你分析不出结果或是结果错了,颗粒度还是最重要的吗?这就好比我们玩FPS游戏时,为了捡一把好的装备,结
果被暴头了,这种情况还不如拿个普遍装备站到最后的。不是不可以有“高要求”,但是要先有能力,再说要求。
一、主键和外键不一样,怎么建立关系
我们在SQL中的处理方法:截取表1学号列,从第2个字符开始截取到最后一个字符。然后再与表2的学号列建立关系。SQL语句如下(Access下测试)
Select 表1.学号,表1.姓名,表2.电话 FROM 表1 Left JOIN 表2 ON Mid(表1.学号,2) = 表2.学号
查询结果:
那么在DAX中用计算列怎么处理呢?
新建列 = mid('表1'[学号],2,len('表1'[学号])-1)
Ps
:这是教学目的讲述在主键与外键不同的情况下如何处理,暂时使用
1
对
1
关系举例,
1
对多也是同理。
当然方法不只一种,你也可以对表2增加字母A,再与表1的学号列建立关系。
新建列 = "A" & '表2'[学号]
特别注意:如果使用mid函数,它与Excel工作表函数、VBA、SQL等都不一样,DAX中的mid函数要求输全3个参数,mid(字符串,从哪里开始,截取几个)
防抬扛:如果主键和外键不是这样的,例如主键abc,外键123;既然这两张表你认为他有联系,想必主键与外键你的企业曾经修改过,或者有自己的一套对应方
案。你可以使用VBA的字典或者PowerQuery先进行数据清洗后再使用DAX建模。
二、双主键(复合主键)问题
权威指南上提供了一个例子,但是它的表和数据都太多了,其实目的很简单
我大致用自己的理解说一下:
先说业务:以销售表第一行为例,一店商品A01,实际销售金额1元,如果不打折我的正常售价应该是多少钱?1 / 0.7 = 1.43元 其它行都以此类推
你不能使用日期连线,也不能使用商品编码连线,在数据库中,我们可以直接建立多条关系
01.使用计算列创建物理关系
2021年7月26日
12:10
分区
DAX
神功第四卷 的第
1
页
SQL
代码:
SELECT 销售表.日期, 销售表.门店, 销售表.商品编码, 销售表.销售, 折扣表.折扣 FROM 折扣表 INNER JOIN 销售表 ON (折扣表.商品编码 = 销售表.商品编码) AND (折扣表.折扣日期 =
销售表.日期)
那么在DAX中如何使用新建列搞定:
折扣表新建列 = '折扣表'[折扣日期] & "-" & '折扣表'[商品编码]
销售表新建列 = '销售表'[日期] & "," & '销售表'[商品编码]
权威指南上并没有向我这样去做,而是使用COMBINEVALUES函数,函数作用:将多个文本字符串联接成一个文本字符串。支持 DirectQuery 模型中的多列关系。
语法:COMBINEVALUES(分割符,第1列,第2列,........第N列)
COMBINEVALUES新建列 = COMBINEVALUES("-",'折扣表'[折扣日期],'折扣表'[商品编码])
返回结果:
Import
和
DirectQuery
主要有以下区别:
Import
:被选中的表单和列会被以复制的形式导入到
PowerBI
里。当你创建或者使用可视化时,
PowerBI
使用的是导入本地的数据。如果源数据发生变化,你必须
通过刷新方式相当于将所有的数据重新导入一次才能在
Power BI
中看的更新。
DirectQuery
:源数据不会被导入或者复制到
Power BI
里。相关数据源的表单和列会出现在
Power BI
的字段中。当你创建或者使用可视化时,
PowerBI
会直接从数
据源中查找数据,这就相当于你的数据永远是最新的。
跟我学过Access的小伙伴,Import就类似导入表,DirectQuery方式就类似链接表。
Excel
文件我们使用导入表就可以了,你可以想一想,如果你连接的
MySQL
服务器,
SQL Server
服务器,他可能把服务器上的内容复制到你的电脑上吗?先别管速
度问题,你硬盘也存不下呀。这时采用的就是链接表形式。
所以在我们导入Excel表格的情况下,以上两种新建列方式在速度上并无区别。
三、如果只是想从另一张表中获取列内容,建议LOOKUPVALUE
分区
DAX
神功第四卷 的第
2
页
三、如果只是想从另一张表中获取列内容,建议LOOKUPVALUE
《DAX神功》第1卷第6回 我提到了Lookupvalue表之间可以不建立关系(但是你来PowerBI并不是只添列加着玩来,迟早都要建立关系的)
我们现在提供的只是一个教学案例,你实际工作表,这两个表肯定有N多列,如果你只是想V过来很少的列,那么选择Lookupvalue也是不错的选择。
语法:Lookupvalue(把哪张表的哪个列拿过来, 找那张表上的谁, 找自己表里的谁.....)
当日期和商品编码都满足条件时,我们将折扣V过来:
新建列 = LOOKUPVALUE(
'折扣表'[折扣],
'折扣表'[商品编码],'销售表'[商品编码],
'折扣表'[折扣日期],'销售表'[日期]
)
返回结果:
分区
DAX
神功第四卷 的第
3
页
提到基于范围的关系,第一个应该想到的是分数区间,例如95~100是优秀,0~59是不及格。在工作中,还有很多区间范围,例如最基础的客单价。
有些人问我,为什么你总拿卖菜的举例,这里就有一个最大的问题,如果我是财务,且我现在是给财务讲知识,那我应该用财务知识举例,但我不是财务,且现在我面向所有人,就要用
所有人都懂的案例,卖菜、卖水果、开个网店,明显是不需要指定专业的,谁都懂的知识。我4岁就带着儿时的小伙伴,拿着一堆塑料玩具水果在马路边上过家家,小伙伴手里还抱着个洋
娃娃。当时我在上幼儿园。
一、区间范围
我想将上面区间表的评价列,V到客户表中,是无法直接做的。
区间表行数比较少,我们只需要通过IF或SWITCH方式来写,你要思考一个问题,新增一个列真的比加入一张表更消耗性能吗? 有这个可能,但不一定。
我们可以通过以下两种方式新建列:详见《孙兴华讲PowerBI火力全开》笔记12.2和12.3
评价 = IF('客户表'[消费金额]<=30,"小",IF('客户表'[消费金额]<=100,"中",IF('客户表'[消费金额]<=300,"大","超大")))
由于IF语句嵌套太多时,容易乱,这时Switch更适合做这样事:
图片来自《火力全开》笔记12.3
根据《火力全开》第12课讲的知识,我们可以将新建列代码写成下面的样子:
评价 =
SWITCH(TRUE(),
'客户表'[消费金额]<=30,"小",
'客户表'[消费金额]<=100,"中",
'客户表'[消费金额]<=300,"大",
"超大"
)
二、回答网友问题
问:中文版《权威指南》第454和455页的案例测试出现问题!
答:别照着抄,这不是学语言。它的案例上一张销售表,一张区间表,这两张表本来就没关系?可能是作者跟你开了一个玩笑,也可能写到这一篇时正好是愚人节,西方人对愚人节很重
视的,我小时候在愚人节时告诉同学,老师找你,同学去了办公室,老师问清了情况把我批了一顿,批我的理由:这不是中国人的节日。我大概举例说明一下:
【1】作者先通过Switch函数给客户表增加列(我这里的客户表就好比人家的销售表),新建列函数如下:
序号 =
SWITCH(TRUE(),
'客户表'[消费金额]<=30,1,
'客户表'[消费金额]<=100,2,
'客户表'[消费金额]<=300,3,
4
)
返回结果:
【2】将客户表与区间表建立关系。你先别笑:)
02.创建基于范围的关系
2022
年
1
月
31
日
9:06
分区
DAX
神功第四卷 的第
4
页
【3】再到客户表中新建列
评价 =
var tb1=FILTER('区间表','区间表'[最小]<='客户表'[消费金额] && '区间表'[最大]>'客户表'[消费金额])
return
CALCULATE(VALUES('区间表'[评价]),tb1)
《DAX神功》第1卷第10回 我们讲到,一行一列的表,可以返回标量值,上面的公式:筛选区间表最小金额小于等于客户表消费金额,且区间表最大金额大于客户表消费金额的这张
表,用这张表再筛选出对应的标量值。
星爷:怎么样,开不开心,意不意外?哈哈哈哈...
先别抬扛,我知识写成下面的代码也可以:但是你无法通过序号建立两张表的关系,要解决这个问题,我们需要下节课来讲
序号 =
var tb1=FILTER('区间表','区间表'[最小]<='客户表'[消费金额] && '区间表'[最大]>'客户表'[消费金额])
return
CALCULATE(VALUES('区间表'[序号]),tb1)
最终,区间表也导入了,关系有了,新建列也建立了。可能有人会说,这样做有一个好处,因为现在的评价字数比较少,如果字数多,我们先用switch返回1,2,3,4,5,6... 这样好
一些。如果你打字速度慢最根本的解决方法是练打字速度,如果你短期无法提升打字速度也有办法:将客户表中的最大那列前N项复制过来,评价那列前N项复制过来。
敲上A列的'客户表'[消费金额]<=,与C和E列的逗号引号,分别选A3:A5、C3:C5、E3:E5,按Ctrl+D向下填充。《孙兴华讲Excel基础篇》都讲过这些最基础的知识。
我们在G列把A到E列都连接起来:
将G3:G5复制到记事本,添加开头和结尾,搞定:
现在,你知道DAX大师跟你开的这个玩笑了吧?不需要哪门知识学到精通,哪怕是皮毛,只要思路对,都可以融汇贯通。人脑容量是有限的,一种东西装满了,自然就要舍弃其它的东西,
比如科学家英语数学都好,但是他们没有像我这样天天打游戏、刷剧、无条件免费讲课出来让网络讲师生气的:)科学家将所有时间都放在学习和科研工作上面了。
三、特殊情况
分区
DAX
神功第四卷 的第
5
页
剩余92页未读,继续阅读
资源评论
Bingo_Excel
- 粉丝: 9
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功