Cosplay比较狭义的解释是模仿、装扮虚拟世界的角色,也被称为角色扮演。由此,在网络上衍生出了新的含义,往往被用来形容“假扮某类人的人”:
那么,什么是PowerBI中的Cosplay呢?
说白了也还是饰演多个角色,只不过主人公变成了维度表。从技术角度来讲,就是一个维度表与同一个事实表的不同列之间建立关系。比方说你有一张日期表,还有一张事实表,事实表中有多个时间列,你想用这张日期表去关联多个不同的日期列。
具体就是下面这个案例,日期表的日期列可以对应Invoice Date ,也可以对应 Delivery Date,视角不同,结果自然也不同。
一旦建立了这个模型,就意味着日期表的date列和销售表的Invoice Date发票日期建立了关联,显示为实线;而Delivery Date发货日期的关系只能是虚线状态,表明未激活。
那么问题来了,如何让报告使用者可以快速地在两种视角之间进行切换呢?
常规解决思路
有两种常用的解决办法,分别说一下:
1.多个日期表
可以通过建立两个或多个日期表,每个日期表分别和事实表的相关日期进行关联,以达到切换的目的。如果只有两个日期列倒还好,如果模型也比较简单也还好。如果事实表中一旦有多个日期列,或者还有其他的表需要关联日期表,那么模型的搭建将是一件非常痛苦的事情。
关于多个日期表的妙处,我在这篇文章中也提到过,大家可以参考:
【运营】任意两个时间段的复购率?Power BI一招帮你搞定
2.单一日期表,多个度量值
模型仍然要使用最开始所讲的:
解决思路是通过建立不同的度量值来使用不同的关系:
Ext Price by Delivery Date =CALCULATE([Ext Price], USERELATIONSHIP('Sales'[Delivery Date], 'Date'[Date]))
不过,与建立多个日期表类似,如果是只有两个日期表或者度量值不多的情况下,这种办法还是比较好用的,但是之后随着度量值逐渐增多,你不得不每次同时建立好几个度量值,且需要思考每次选用哪个度量值。
解决方案:
以上两种解决方案的缺点都很清楚,主要问题是确实不够直观,不够友好。以下是我比较喜欢用的一种方式:
1.新建一个筛选表
基础模型是一个日期表,对事实表建立一个激活关系和一个未激活关系,除此之外,新加了一个date filter表:
这个表并不是要用来筛选某些日期,而是要用来选择使用哪一个关系的。你可以用DAX来建这个表,也可以直接手动输入,里面的内容只有一列两行(看实际的事实表中的日期数量):: “Delivery Date“; “Invoice Date”。
2.写度量值
Ext Price (Filter Aware) =
VAR SelectedDate = SELECTEDVALUE('Date Filter'[Date To Filter], "Invoice Date")
VAR UseInvoiceDate = CALCULATE([Ext Price], USERELATIONSHIP('Sales'[Invoice Date], 'Date'[Date]))
VAR UseDeliveryDate = CALCULATE([Ext Price], USERELATIONSHIP('Sales'[Delivery Date], 'Date'[Date]))
RETURN
SWITCH(
SelectedDate, "Invoice Date",
UseInvoiceDate, "Delivery Date",
UseDeliveryDate, UseInvoiceDate)
度量值看上比它本身复杂得多。第一个VAR确定选择的date filter方式,默认为“Invoice Date”。
接下来的UseInvoiceDate 和 UseDeliveryDate两个度量值,表示的是分别使用两个关系。最后用SWITCH选择并返回使用特定关系的度量值。
使用这种方法,最终用户只要通过切片器就可以切换所要使用的日期,也会标注默认使用Invoice Date。于我而言可以少编写几个度量值,维护起来也方便。
Isn't it?
本文分享自 PowerBI生命管理大师学谦 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!