PowerBI中基于日期角色切片器展示度量值底层数据的方案
问题描述
在Sam Nseir的帮助下已解决诸多问题,现有如下数据:
| UniqueID | OrderDate | Shipping Date | Delivery Date | Division | Region |
|---|---|---|---|---|---|
| A174 | 8/18/2022 13:14 | AZ | AZ1 | ||
| A196 | 11/17/2022 19:33 | 21-Sep-23 | 21-Sep-23 | MP | MP1 |
| A197 | 1/11/2023 17:24 | 21-Nov-23 | MP | MP1 | |
| A179 | 5/30/2023 12:55 | 21-Oct-23 | 21-Oct-23 | WB | WB1 |
| A178 | 6/23/2023 21:19 | 21-Sep-23 | WB | WB1 | |
| A180 | 6/27/2023 19:16 | 21-Sep-23 | 21-Sep-23 | AZ | AZ1 |
| A195 | 9/21/2023 19:06 | 21-Oct-23 | 21-Oct-23 | AZ | AZ1 |
我需要在PowerBI的表格图表中展示上述数据,但选择2023年时,UniqueID为A196的订单无法显示——这是因为DateTable与OrderDate之间是活动关系,而Shipping Date和Delivery Date与DateTable之间是两个非活动关系。
我创建了一个包含三行数据的Date Role表,用作切片器来选择OrderDate、Shipping Date和Delivery Date。
需求说明
- 选择Shipping Date时,应显示所有带有Shipping Date的行,即使这些行超出当前DateTable上下文;
- 但如果选择3月,则仅显示符合3月的数据(此时结果应为0)。
现有可统计此类订单数量的度量值(已修正原语法错误):
Date Role Count = var oRole = CONTAINS('Date Role', 'Date Role'[Role], "OrderDate") var sRole = CONTAINS('Date Role', 'Date Role'[Role], "Shipping Date") var dRole = CONTAINS('Date Role', 'Date Role'[Role], "Delivery Date") var oValues = CALCULATETABLE( DISTINCT(Data[UniqueID]), NOT ISBLANK(Data[UniqueID]) = oRole ) var sValues = CALCULATETABLE( DISTINCT(Data[UniqueID]), USERELATIONSHIP(DATETABLE[DATE], Data[Shipping Date]), NOT ISBLANK(Data[UniqueID]) = sRole ) var dValues = CALCULATETABLE( DISTINCT(Data[UniqueID]), USERELATIONSHIP(DATETABLE[DATE],Data[Delivery Date]), NOT ISBLANK(Data[UniqueID]) = dRole ) RETURN COUNTROWS( DISTINCT( UNION( oValues, sValues, dValues ) ) )
解决方案
要在表格图表中展示该度量值对应的底层数据,需创建一个筛选度量值来控制表格显示,步骤如下:
- 创建用于筛选的度量值:
Show Row = var oRole = CONTAINS('Date Role', 'Date Role'[Role], "OrderDate") var sRole = CONTAINS('Date Role', 'Date Role'[Role], "Shipping Date") var dRole = CONTAINS('Date Role', 'Date Role'[Role], "Delivery Date") var oValues = CALCULATETABLE( DISTINCT(Data[UniqueID]), NOT ISBLANK(Data[UniqueID]) = oRole ) var sValues = CALCULATETABLE( DISTINCT(Data[UniqueID]), USERELATIONSHIP(DATETABLE[DATE], Data[Shipping Date]), NOT ISBLANK(Data[UniqueID]) = sRole ) var dValues = CALCULATETABLE( DISTINCT(Data[UniqueID]), USERELATIONSHIP(DATETABLE[DATE],Data[Delivery Date]), NOT ISBLANK(Data[UniqueID]) = dRole ) var validIDs = UNION( oValues, sValues, dValues ) RETURN IF( CONTAINS(validIDs, Data[UniqueID], MAX(Data[UniqueID]) ), 1, 0)
将
Show Row度量值添加到表格图表的视觉级筛选器中,设置筛选条件为「等于1」。在表格图表中添加需要展示的字段(如UniqueID、OrderDate、Shipping Date等),保留DateTable切片器和Date Role切片器的交互。
原理说明
- 该筛选度量值会根据当前选择的Date Role和DateTable上下文,判断每一行的UniqueID是否属于符合条件的集合;
- 只有返回1的行才会在表格中显示,完全匹配原
Date Role Count度量值统计的底层数据; - 选择Shipping Date时,即使OrderDate不在2023年(如A196),只要Shipping Date符合条件(或无具体月份筛选时显示所有有Shipping Date的行),就会被展示;
- 选择3月时,无符合条件的行,表格会显示为空。
内容的提问来源于stack exchange,提问作者Joker
相关产品推荐
相关产品推荐

