经常遇到星友们关于模型的问题:为什么明明已经建立了关系,但是没有筛选作用?仔细一看,原来建立的这个关系显示的是一条虚线。
这篇文章就来介绍一下,为什么有的关系线是虚线?虚线有什么作用,以及如何使用这个虚线关系。
在PowerBI中,两个表之间只能有一个活动关系,活动关系用一条实线显示,如果打算在这两个表之间继续建立更多关系,则会显示为虚线,即非活动关系,也称为虚线关系,虚线关系可以有多条,默认不能发生筛选作用。
以一个最常用的场景来理解,假设订单表中有订单日期以及发货日期,利用订单日期与日期表建立了关系,那么在分析时,都是以订单日期为基础分析的,每天产生了多少订单,订单收入是多少等。
但是如果还需要按照发货日期来分析,比如每天发出的订单金额是多少?就需要按照发货日期与日期表中的日期建立关系,在已有一条活动关系的情况下,再建立一条关系就会以虚线显示,
双击该虚线,进入编辑关系窗口,就可以看到左下角的“使此关系可用”的选项是没有勾选的,
如果你试图勾选它,系统就会提示你,已经有一条关系存在,不允许再建立活动关系。对于活动关系,你也可以去掉上图中的这个勾选,使之变为非活动关系。
继续回到上面的问题。
因为订单日期已经与日期表建立了活动关系,求每个订单日期的订单收入很简单,直接写个度量值就可以了:
收入 = SUM( '订单表'[销售额] )
但发货日期与日期表建立的是非活动关系,这个度量值是没法按照发货日期来计算的,那么建立这个关系有什么用呢,如何按发货日期,计算每天发货的订单收入是多少?
这时候就要用到这个非活动关系,利用DAX函数USERELATIONSHIP来临时激活这个虚线关系,按发货日期的收入度量值可以这样写:
USERELATIONSHIP函数是专门用来激活非活动关系的,它的参数是构成关系的两列,这两列的顺序无所谓,不影响计算结果,并且USERELATIONSHIP激活关系的前提是,这两列已经在模型中建立了非活动关系,否则将会报错。
USERELATIONSHIP激活非活动关系后,会自动断开原有的活动关系,不过关系的激活以及原有关系的断开都是临时的,且只在该表达式内部生效,并不影响模型中的其他计算。
用矩阵显示这两个度量值的结果如下:
因为当天的订单,不一定当天都能发货,所以,在某个日期或者某个时间段内,按订单日期的收入与按发货日期的收入总会有个时间差。
更进一步的,如果想动态的切换按订单日期的收入、以及按发货日期的收入,则可以建立个辅助表(Power BI 辅助表制作方式汇总),
并利用这个辅助表中的类型生成切片器,然后写个度量值来判断切片器的选项,来返回相应的计算:
然后就可以动态切换了。
通过上面的介绍,是不是理解了非活动关系呢,它与USERELATIONSHIP函数总是同时出现,在不影响原有模型的情况下,灵活的实现另一种关系查询。在之前介绍的关联分析中,也用到了非活动关系,可以再看看这篇文章加深理解:
如果你想深入学习Power BI,欢迎加入PowerBI星球学习社群,获取更多学习资源,和6k+ 深度学习者一起精进~