首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PowerBI DAX 如何使用变量表里的列

PowerBI DAX 如何使用变量表里的列

作者头像
BI佐罗
发布2021-09-17 10:41:09
4K0
发布2021-09-17 10:41:09
举报
文章被收录于专栏:PowerBI战友联盟PowerBI战友联盟
大部分人都会在进入 Power BI 的学习后对这个问题感到不适,看看你是不是也是一样的。

很多时候,我们可能需要使用变量表中的列,例如:

VAR vTable = FILTER( 'Order' , [Discount] <> 0 )

这里定义了一个 vTable 表示订单中没有折扣的那些订单。

进一步地,我们想对这个表求和,可能会这样写:

VAR vResult = SUM( vTable[LineSellout] )

这里是希望表达计算销售额,但会遭遇一个语法错误,这里不能使用 vTable[LineSellout]

解决方案

表,在 DAX 分为模型表以及非模型表。

直接加载到 DAX 数据模型的就是模型表,又称为:基表(base table)。

用 VAR 定义的表,的确是一个表,但这个表,并不是数据模型中的表,也就不是基表。

如果希望使用基表中列,可以使用这样的语法:

表[列]

因此,

VAR vResult = SUM( 'Order'[LineSellout] )

是有效的正确语法,而

VAR vResult = SUM( vTable[LineSellout] )

是无效的错误语法。

如果希望使用非基表中的列,则不可以直接引用到,要结合具体的场景来选择合适的函数。

聚合运算

如果希望直接进行聚合运算,则:

VAR vResult = SUMX( vTable , [LineSellout] )

这里的 vTable 作为表使用,而 [LineSellout] 作为其中的列被引用到。

取出某列

如果想直接取出某列,也必须注意使用的方式,例如,错误的方式如下:

VAR vList = VALUES( vTable[LineSellout] )

这就是一个错误的语法,因为 vTable[LineSellout] 并不是合理的引用。

正确的做法如下:

VAR vList = SELECTCOLUMNS( vTable , "LineSellout" , [LineSellout] )

这样就可以返回其中某个列作为的表。

更多的思考

首先,关于表与基表的问题,在此前的文章中有深刻的讨论,可以参考。

其次,要强调一个问题,或者一个思考,那就是:

既然 VALUESDISTINCTCOUNT 都不能使用到诸如 vTable[LineSellout] 的列,那么,是不是存在某个场景,是无法实现表达的?

这一思考,是本质的,对于一套公式语言来说,这考察了该语言的完备性,如果存在这种情况,则是 DAX 的缺失和必须弥补的问题了。

幸好,这种情况是不存在的,对此问题的理论讨论会更复杂,也会枯燥,这里不再展开。对于大家而言,我们只要记住:DAX 很强,很成熟,很好用,都可以实现即可。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-09-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PowerBI战友联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 解决方案
  • 聚合运算
  • 取出某列
  • 更多的思考
相关产品与服务
腾讯云 BI
腾讯云 BI(Business Intelligence,BI)提供从数据源接入、数据建模到数据可视化分析全流程的BI能力,帮助经营者快速获取决策数据依据。系统采用敏捷自助式设计,使用者仅需通过简单拖拽即可完成原本复杂的报表开发过程,并支持报表的分享、推送等企业协作场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档