首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何在Dax查询中引入DEFINE COLUMN

本文介绍DAX中DEFINE COLUMN语句的语法和用例

DEFINE COLUMN语句于2020年12月推出,允许在查询的本地定义计算列。该列未在模型中保留,仅在查询的生存期内存在。除此之外,它在各个方面都是计算列。

为了支持Analysis Services(AS)上的复合模型,需要对DAX进行扩展,使其能够在查询的本地定义计算列。该特性的使用没有限制。因此,你可以在任何DAX查询中利用本地列。我们将查询中定义的计算列称为查询计算列,或简称为查询列。

定义查询列的语法如下:

一旦在查询中定义了列,就可以像模型中的任何其他列一样使用它。从示例查询中可以看到,即使该列在模型中确实不存在,SUMMARIZECOLUMNS仍可以按Sales Category列进行汇总。

作为查询的DEFINE部分的一部分,查询计算列可以在多个EVALUATE语句中使用,就像查询变量,度量和表一样:

查询计算列是在没有过滤器上下文的情况下计算的,这与模型计算列非常相似。确实,你可能会想当然地认为以下两个EVALUATE语句计算的结果相同,而实际上却并非如此:

尽管Product[Popular Product]和[@Popular Product]列的代码是相同的,但是在ADDCOLUMNS中计算的[@Popular Product]列是在CALCULATETABLE的过滤上下文中计算的,它只过滤一年。另一方面,Product[Popular Product]查询列是在任何过滤器上下文之外计算的。

为了获得相同的行为,需要从过滤器上下文中删除任何过滤器,除了从ADDCOLUMNS迭代的产品中删除以保留上下文转换:

上述得出的结论是,仅出于简化代码的目的而使用查询计算的列是危险的做法。实际上,可能会想使用查询计算列来简化以下代码:

试图用以下代码替换大客户销售中的复杂FILTER条件:

不幸的是,由于查询计算列的语义,这两个查询导致非常不同的结果:

结果清楚地表明了两个公式的不同行为。

该功能仍处于预览状态。尽管如此,我们注意到查询列的查询计划与通过ADDCOLUMNS添加的列的查询计划不同。虽然结果相同,但以下两个查询产生了不同的查询计划:

DAX中引入了查询列,专门用于支持复合模型。在这方面,他们发挥了作用,让开发人员定义了查询本地的计算列。在常规查询中使用查询列相当复杂,因为与添加到ADDCOLUMNS的列相比,语义有所不同。

本文翻译自:https://www.sqlbi.com/articles/introducing-define-column-in-dax-queries/

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210203A04F1H00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券