从数据到信息
从信息到洞察

认识投影函数

何为投影函数(Projection)

关系代数中有五个基本运算:选择、投影、笛卡尔积、集合并、集合差,它们能实现大多数我们常用的数据检索操作。此外还有连接、集合交、除运算等,它们都可以通过五个基本运算表示出来。

投影运算作用于单个关系 R,得到由 R 的一个列子集构成的新关系,如图所示:

图示:投影运算

DAX 中的投影函数

DAX 作为查询语言的时候,缺少像投影这样的功能。实际上,DAX 允许你向表中添加列,但不能从表中直接删除某些列。为了实现投影运算,你可以使用 SUMMARIZE 从当前表中提取指定的列,或者使用 ADDCOLUMNS 从一个必须包含在查询中的列开始,添加新的列,这种方式添加的是原表已有的列。在本章的后面你会了解到,当你向表中添加原表不存在的新列时,我们称之为添加派生列,这是更常见的情景。

下面的代码从 Product 表中提取产品 ID,产品名称和价格三列

SELECT [Product Id], [Product Name], [List Price] FROM Product
EVALUATE
ADDCOLUMNS(
    DISTINCT( Product[Product Id] ),
    "Product Name", CALCULATE( VALUES( Product[Product Name] ) ),
    "List Price", CALCULATE( VALUES( Product[List Price] ) )
)
EVALUATE
SUMMARIZE(
    Product,
    Product[Product Id], 
    Product[Product Name],
    Product[List Price]
)

DAX 可以通过两种方式获得相同的结果。你可以利用 Product ID 列的唯一性,通过 ADDCOLUMNS 函数基于此 ID 列来添加其他列。为了检索每个产品的对应值,你需要加入 CALCULATEVALUES,注意,当产品 ID 不是表的唯一键时查询会报错。

建议总是使用 SUMMARIZE 来执行对表的投影,因为它更容易阅读,并且比其他 DAX 函数具有更好的性能

7
说点什么

1000
 
鼓掌微笑开心憧憬爱你色并不觉得吃瓜doge二哈喵喵思考笑哭捂脸悲伤大哭抓狂汗偷笑打脸捂眼黑线问号晕拜拜闭嘴衰咒骂ok作揖
3 评论数
4 被回复的评论
4 订阅评论的人数
 
查看最近回复
查看最热评论
  订阅本文评论  
最新 最旧 得票最多
提醒
成员
153****0115

您好,老师。
发现使用summarize提取两列,如果行出现了重复值,summarize会保留重复行,根据关系代数的投影,是会消除重复行的,是这样吗?

成员
153****0115

重新尝试了一下,就是关系代数投影的效果,会删除掉重复行(仅保留一行)

游客
Jacob

老师,没明白,难道SELECTCOLUMNS不是投影吗?投影算是数据沿袭的一种吗?

成员
bbzhdlp

要是有视频就好啦,没有视频有些还是比较难懂

DAX 圣经

导读

初识 DAX

DAX 基础知识

DAX 原理

DAX 高级原理

基础函数类型

迭代函数

CALCULATE 函数

CALCULATE 调节器

基础表函数

条件判断函数

查找匹配函数

时间智能函数

统计类函数

投影函数

分组/连接函数

集合函数

其他函数