何为投影函数(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 列来添加其他列。为了检索每个产品的对应值,你需要加入 CALCULATE 和 VALUES,注意,当产品 ID 不是表的唯一键时查询会报错。
建议总是使用 SUMMARIZE 来执行对表的投影,因为它更容易阅读,并且比其他 DAX 函数具有更好的性能 |