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

Measure or column filtered by a relationship and a slicer

我有一个 table Deals,它有 [DealId][Open Date Id][Closed Date Id] 列,其中最后两列就像Date table 其中有 [Date][DateId] 列。

Power BI 不允许我有 2 个活动关系,所以一个不活动。

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

我是怎么解决的

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

我该如何解决这个问题?

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

中所述

对于您的情况,您可以使用

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

这将创建原始日期 table 的副本。然后你可以创建关系并且只有活跃的关系。这种方式比一堆不活跃的关系更容易维护。

有了这个实现你可以构建这个:

来源:

根据 table 的大小或其他措施导致的数据模型的刚性,我不知道我要说的内容是否适合您的需求。我认为最终重要的是了解您想要展示的内容的局限性。但是,我在这里回答的内容几乎相似:

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

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

并且您想根据两种关系筛选交易

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

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

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

让我们将新的无关 table 定义为:

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

我想要实现的是这样的:

来自像这样的模型:

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

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

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

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,
                USERELATIONSHIP(Dates[Date],Deals[CloseDate]),
                TREATAS(CurrentMonthName, Dates[MonthName]),
                TREATAS(CurrentYear, Dates[Year]),
                TREATAS(CurrentDates, Dates[Date])
                ),
                CALCULATETABLE(Deals,
                TREATAS(CurrentMonthName, Dates[MonthName]),
                TREATAS(CurrentYear, Dates[Year]),
                TREATAS(CurrentDates, Dates[Date])
                )
                )))
RETURN SUMX(Result,[Count])

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

HO&NOTC := 
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(EXCEPT(
                CALCULATETABLE(Deals,
                TREATAS(CurrentMonthName, Dates[MonthName]),
                TREATAS(CurrentYear, Dates[Year]),
                TREATAS(CurrentDates, Dates[Date])
                ),
                CALCULATETABLE(Deals,
                USERELATIONSHIP(Dates[Date],Deals[CloseDate]),
                TREATAS(CurrentMonthName, Dates[MonthName]),
                TREATAS(CurrentYear, Dates[Year]),
                TREATAS(CurrentDates, Dates[Date])
                )
                )))
RETURN SUMX(Result,[Count])

测试

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

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