Powerbi 由关系和切片器筛选的度量值或列
我有一个表Powerbi 由关系和切片器筛选的度量值或列,powerbi,dax,data-analysis,dimensional-modeling,slicers,Powerbi,Dax,Data Analysis,Dimensional Modeling,Slicers,我有一个表Deals,其中有列[DealId],[Open Date Id],[Closed Date Id],其中最后两列就像Date表的外键,该表有[DateId]列 Power BI不允许我有两个活动的关系,因此其中一个处于非活动状态 现在我想创建一些视觉效果,指示在自定义时间范围内(使用切片器)打开和关闭的交易 我是如何试图解决的 最接近于此的解决方案是使用LOOKUPVALUE创建一个计算列,并将关闭和打开日期直接添加到Deals表中。用两个不同的切片器创建了两个不同的页面,但这远远不
Deals
,其中有列[DealId]
,[Open Date Id]
,[Closed Date Id]
,其中最后两列就像Date
表的外键,该表有[DateId]
列
Power BI不允许我有两个活动的关系,因此其中一个处于非活动状态
现在我想创建一些视觉效果,指示在自定义时间范围内(使用切片器)打开和关闭的交易
我是如何试图解决的
最接近于此的解决方案是使用LOOKUPVALUE
创建一个计算列,并将关闭和打开日期直接添加到Deals表中。用两个不同的切片器创建了两个不同的页面,但这远远不是我想要的解决方案
如何解决此问题?在这种情况下,最简单的方法是通过复制日期表来实现角色扮演维度功能。Power BI engine不支持角色扮演维度,因此小表的解决方法只是复制它们,如中所述 在您的例子中,您可以使用 这将创建原始日期表的副本。然后,您可以创建关系,并且只有活动的关系。这种方式比一堆不活跃的关系更容易维持 实现此功能后,您可以构建: 从这个来源:
我不知道我将要说的内容是否适合您的需要,这取决于表的大小或由于其他度量而导致的数据模型的刚性。我认为最终重要的是理解你想要展示的东西的局限性。然而,我在这里回答了一些几乎相似的问题: 据我所知,您有两张类似的表格:
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] ...}
我想达到的目标是:
从这样一个模型:
我没有选择开始日期和结束日期,而是选择与模型无关的日期范围,与交易相关的上下文来自度量。例如:
打开的交易:在特定日期范围内打开并通过可视化进行汇总的所有交易
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])
)
已完成交易:在特定日期范围内完成并通过可视化进行汇总的所有交易
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])
打开和未关闭的交易:通过可视化汇总相同日期范围内的所有打开和未关闭的交易
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])
试验
我相信这是可以改进的,但正如我在开始时所说,这只是一个想法。干杯 谢谢大家!!所以,没有办法为关闭和打开的日期id都使用一个日期切片器?也许有一种方法可以使一个切片器依赖于另一个切片器,并使一个切片器不可见(如果可能的话)?我不知道这是否可能,因为我是PowerBi新手:)这是个好问题。我一直使用切片器只对一个字段进行切片,所以我能说的是,我现在想不出一种方法来进行切片。也许这是可能的,但不是没有一些数据重新排列-额外的列等,但即使在这种情况下,我只是不知道现在。