欢迎光临散文网 会员登陆 & 注册

PowerBI之DAX神功:第1卷第3回 表名规范与表构造函数

2021-08-03 08:09 作者:孙兴华zz  | 我要投稿

表名规范

我们以新建列为例:

销售表

我们需要在【销售表】中创建"新的销售量"这列,两种写法均可:

因为“销售数量”和“新的销售量”这两个列都在【销售表】中,所以我们可以省略表名。就好比一家人之间可以不称呼全名,我跟我大兄弟说话,拍他一下就行了。但是我去马路上问路,见人就说:"哎!嘿!XXX地怎么去?" 冯导在电影《老炮》中做出了明确回复。

但是,如果我们在'销售表'中新建【销售金额】这一列,但是要引用'商品表'中的【进价】列,这时要注明'商品表'的表名

商品表
销售表

如果我们需要在【销售表】中新建"销售金额"这一列,公式如下:

关于这个问题,《孙兴华讲PowerBI火力全开》中也做了详细讲解,就好比你们班的老师,叫自己班的学生可以直接叫姓名,但是让你去其它班找某个同学时,一定会说找哪个班的哪个人?

只是DAX比较坑,你仔细观察下面这个【新建列】的写法:

销售金额 = [销售数量]*RELATED('商品表'[进价])

你知道,【销售数量】是列名,但是别人读你代码的时候,【销售数量】是列名还是度量值?当你遇到错误返回检查时,是不是也会有这个疑惑呢?建议:都写表名,可以一眼看出它是度量值还是列名。

销售金额 = '销售表'[销售数量]*RELATED('商品表'[进价])

我在视频案例中省略是因为我的模型比较简单,你实际工作中,不建议省略。

我讲VBA时还不定义变量,不释放内存呢,但是我在视频中告诉大家,要养成良好习惯,我只是为了节省时间,你不要省。


DAX中的表构造函数{()}

我们先从最简单的开始:返回只包含一列的表


我们现在加大一点难度:返回包含一列或多列的表,注意:所有行的标量表达式数量必须相同


表 = {

    ("张三","男",25,Date(2021,12,09),Currency(5000.00),TRUE),

    ("李四","女",26,Date(2021,11,11),Currency(8000.00),False),

    ("王五","男",19,Date(2021,9,1),Currency(6000.00),False)

}


        如果没有指定数据类型或某列不同行的数据类型不同时,DAX会自动将该列转为自动识别的数据类型

        但是没有表头,这个时候我们会想起《孙兴华讲PowerBI火力全开》笔记第26课: SelectColumns


表 = 

VAR tb = 

{

("张三","男",25,Date(2021,12,09),Currency(5000.00),TRUE),

("李四","女",26,Date(2021,11,11),Currency(8000.00),False),

("王五","男",19,Date(2021,9,1),Currency(6000.00),False)

}

Return

SelectColumns(tb , "姓名" , [Value1] , "性别" , [Value2] , "享年" , [Value3] , "猝于" , [Value4] , "抚恤金" , [Value5], "是否发放" , [Value6])


        无论是《The Definitive Guide to DAX》还是微软的帮助文档,也没有讲到表头这里,但是你学过的函数要举一反三的去使用。你认为讲到这里已经超纲了?还没有!

《孙兴华讲PowerBI火力全开》笔记第04课,讲CALCULATE中的筛选器时我们讲到了in和not in的使用


图1-3-1

如图1-3-1,我们建立以下度量值:

总销量 = sum('销售表'[销量]) 

品名包含ABC的销量 = CALCULATE([总销量],'商品表'[品名] in {"A","B","C"})

品名不包含ABC的销量  = CALCULATE([总销量],not '商品表'[品名] in {"A","B","C"})

但是,你有没有想过,多条件时,我们怎么处理?例如:品名包含ABC和规格包含盒袋的销量

有两种写法:(举一反三,再增加几种条件写法是一样的)

写法1 = CALCULATE([总销量],('商品表'[品名],'商品表'[规格]) in {("A","散"),("B","袋")})

写法2 = CALCULATE([总销量],'商品表'[品名] in {"A","B","C"},'商品表'[规格] in {"散","袋"})

最终结果都是正确的:

本文章配套视频已经同步更新:

https://www.bilibili.com/video/BV1YE411E7p3


PowerBI之DAX神功:第1卷第3回 表名规范与表构造函数的评论 (共 条)

分享到微博请遵守国家法律