专栏名称: PowerBI星球
海量干货,帮你轻松上手 Power BI
目录
相关文章推荐
不正常人类研究中心  ·  全自动闯祸机和全自动洗地机 ·  2 天前  
英式没品笑话百科  ·  “嘿,你想看看我昨晚在餐厅吃的豪华大餐吗?” ... ·  2 天前  
英式没品笑话百科  ·  无情铁手 英式没品笑话百科的微博视频 ... ·  2 天前  
英式没品笑话百科  ·  魔鬼啊这是 -20250219155611 ·  3 天前  
51好读  ›  专栏  ›  PowerBI星球

Power BI中的关系线为什么是虚线?如何使用虚线关系?

PowerBI星球  · 公众号  ·  · 2024-09-14 12:03

正文

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


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




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


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


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



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


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




继续回到上面的问题。


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


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


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


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


收入 按发货日期 =
CALCULATE(
[收入],
USERELATIONSHIP('日期表'[日期],'订单表'[发货日期]) )


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


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


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



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


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



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



然后就可以动态切换了。



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

如何用Power BI分析产品关联度?












请到「今天看啥」查看全文