按关系和切片器过滤的度量或列

问题描述

我有一个Deals,其中包含 [DealId][Open Date Id][Closed Date Id] 列,其中最后 2 列就像 Date 表的外键其中有 [Date],[DateId] 列。

Power BI 不会让我有 2 个活动的关系,所以一个是非活动的。

现在我想创建一些视觉效果,指示在自定义时间范围内打开和关闭的交易(使用切片器)。

我是如何尝试解决

最接近的解决方案是使用 LOOKUPVALUE 创建一个计算列,并将关闭和打开日期直接添加到 Deals 表中。并使用 2 个不同的切片器创建了 2 个不同的页面,但这远不是我想要的解决方案。

我该如何解决这个问题?

解决方法

在这种情况下,最简单的方法是通过复制日期表来实现角色扮演维度功能。 Power BI 引擎不支持角色扮演维度,因此小表的解决方法只是复制它们,如 this article 中所述。

在您的情况下,您可以使用

创建一个表“Date_for_closed”
Date_for_closed = ALL('Date')

这会创建原始日期表的副本。然后你可以创建关系并且只有活跃的关系。这样维护起来比一堆不活跃的关系更容易。

enter image description here

通过这个实现,你可以构建这个:

enter image description here

来自这个来源:

enter image description here

,

我不知道我要说的内容是否适合您基于表格的大小或由于其他措施导致的数据模型的刚性的需求。我认为最终重要的是要了解您想要展示的内容的局限性。但是,我在这里回答了几乎类似的问题:https://stackoverflow.com/a/66792957/15460989

据我所知,您有两个类似于:

Deals = {[DealID] [OpenDate] [CloseDate] [Quantity] [Price] ...}
Dates = {[Date] [MonthName] [MonthNumber] [Year] ...}

并且您想根据两种关系过滤交易

USERELATIONSHIP (Dates [Date],Deals [OpenDate])
USERELATIONSHIP (Dates [Date],Deals [CloseDate])

我不打算讨论复制日期表的选项,因为之前使用两个切片器进行了介绍。

但是,如果我的模型的特征允许我使用具有两种关系(一个是活动的,另一个是非活动的)的表,而我的可视化使用不相关表的内容,该怎么办?

让我们将新的不相关表定义为:

HarvestingDates = {[Date] [MonthName] [MonthNumber] [Year] ...}

而我想要实现的是这样的:

enter image description here

来自这样的模型:

enter image description here

Deals[DealID]: Unique values.
Deals[OpenDate]: Repeated and missing dates
Deals[CloseDate]: A random number between 0 and 5 is added to Deals [OpenDate]

我没有选择开始日期和结束日期,而是选择与模型无关的日期范围,与交易相关的上下文来自度量。示例:

Opened Deals:在特定日期范围内打开并通过可视化汇总的所有交易。

HOpenedDeals: =
CALCULATE(
    COUNTROWS(Deals),TREATAS(
        VALUES(HarvestingDate[Date]),Dates[Date]
        )
)

已完成的交易:在特定日期范围内完成的所有交易并通过可视化汇总。

HClosedDeals:=
CALCULATE(
    COUNTROWS(Deals),USERELATIONSHIP(Dates[Date],Deals[CloseDate]),TREATAS(VALUES(HarvestingDate[Date]),Dates[Date])
)

打开和关闭的交易:可视化汇总的同一日期范围内的所有打开和关闭的交易

HOpened&Closed := 
VAR TotalRow= SUMMARIZE(HarvestingDate,HarvestingDate[Year],HarvestingDate[MonthName])
VAR CurrentDates=VALUES(HarvestingDate[Date])
VAR Result=
ADDCOLUMNS(TotalRow,"Count",VAR CurrentMonthName= {CALCULATE(VALUES(HarvestingDate[MonthName]))}
VAR CurrentYear= {CALCULATE(VALUES(HarvestingDate[Year]))}
RETURN
COUNTROWS(INTERSECT(
                CALCULATETABLE(Deals,TREATAS(CurrentMonthName,Dates[MonthName]),TREATAS(CurrentYear,Dates[Year]),TREATAS(CurrentDates,Dates[Date])
                ),CALCULATETABLE(Deals,Dates[Date])
                )
                )))
RETURN SUMX(Result,[Count])

未完成和未完成的交易:通过可视化汇总的同一日期范围内的所有未完成和未完成的交易

HO&NOTC := 
VAR TotalRow= SUMMARIZE(HarvestingDate,VAR CurrentMonthName= {CALCULATE(VALUES(HarvestingDate[MonthName]))}
VAR CurrentYear= {CALCULATE(VALUES(HarvestingDate[Year]))}
RETURN
COUNTROWS(EXCEPT(
                CALCULATETABLE(Deals,[Count])

测试

Date range: {5/27/2021…5/31/2021}

enter image description here

我相信这可以改进,但正如我在开头所说的那样,这只是一个想法。干杯!