PowerBI之DAX神功:第1卷第3回 表名规范与表构造函数
表名规范
我们以新建列为例:

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

因为“销售数量”和“新的销售量”这两个列都在【销售表】中,所以我们可以省略表名。就好比一家人之间可以不称呼全名,我跟我大兄弟说话,拍他一下就行了。但是我去马路上问路,见人就说:"哎!嘿!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,我们建立以下度量值:
总销量 = 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 {"散","袋"})

最终结果都是正确的:
