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

认识Power BI中的非活动关系

经常遇到星友们关于模型的问题:为什么明明已经建立了关系,但是没有筛选作用?仔细一看,原来建立的这个关系显示的是一条虚线。

这篇文章就来介绍一下,为什么有的关系线是虚线?虚线有什么作用,以及如何使用这个虚线关系。

在PowerBI中,两个表之间只能有一个活动关系,活动关系用一条实线显示,如果打算在这两个表之间继续建立更多关系,则会显示为虚线,即非活动关系,也称为虚线关系,虚线关系可以有多条,默认不能发生筛选作用。

以一个最常用的场景来理解,假设订单表中有订单日期以及发货日期,利用订单日期与日期表建立了关系,那么在分析时,都是以订单日期为基础分析的,每天产生了多少订单,订单收入是多少等。

但是如果还需要按照发货日期来分析,比如每天发出的订单金额是多少?就需要按照发货日期与日期表中的日期建立关系,在已有一条活动关系的情况下,再建立一条关系就会以虚线显示,

双击该虚线,进入编辑关系窗口,就可以看到左下角的“使此关系可用”的选项是没有勾选的,

如果你试图勾选它,系统就会提示你,已经有一条关系存在,不允许再建立活动关系。对于活动关系,你也可以去掉上图中的这个勾选,使之变为非活动关系。

继续回到上面的问题。

因为订单日期已经与日期表建立了活动关系,求每个订单日期的订单收入很简单,直接写个度量值就可以了:

收入= SUM( '订单表'[销售额] )

但发货日期与日期表建立的是非活动关系,这个度量值是没法按照发货日期来计算的,那么建立这个关系有什么用呢,如何按发货日期,计算每天发货的订单收入是多少?

这时候就要用到这个非活动关系,利用DAX函数USERELATIONSHIP来临时激活这个虚线关系,按发货日期的收入度量值可以这样写:

收入 按发货日期=

CALCULATE(

  [收入],

USERELATIONSHIP('日期表'[日期],'订单表'[发货日期]))

USERELATIONSHIP函数是专门用来激活非活动关系的,它的参数是构成关系的两列,这两列的顺序无所谓,不影响计算结果,并且USERELATIONSHIP激活关系的前提是,这两列已经在模型中建立了非活动关系,否则将会报错。

USERELATIONSHIP激活非活动关系后,会自动断开原有的活动关系,不过关系的激活以及原有关系的断开都是临时的,且只在该表达式内部生效,并不影响模型中的其他计算。

用矩阵显示这两个度量值的结果如下:

因为当天的订单,不一定当天都能发货,所以,在某个日期或者某个时间段内,按订单日期的收入与按发货日期的收入总会有个时间差。

更进一步的,如果想动态的切换按订单日期的收入、以及按发货日期的收入,则可以建立个辅助表(Power BI 辅助表制作方式汇总),

并利用这个辅助表中的类型生成切片器,然后写个度量值来判断切片器的选项,来返回相应的计算:

然后就可以动态切换了。

通过上面的介绍,是不是理解了非活动关系呢,它与USERELATIONSHIP函数总是同时出现,在不影响原有模型的情况下,灵活的实现另一种关系查询。在之前介绍的关联分析中,也用到了非活动关系,可以再看看这篇文章加深理解:

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

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券