我需要创建一个基于另一列但取决于运行报告的日期筛选器的计算列。
如果该项目拥有超过一年,则为"可比",如果少于一年,则为"不可比较"。
我有Item
,DateOfPurchase
在T1
和Date
在T2
(Period
表( 我已经使用today()
提出了 DAX,但它只有在我们报告今天的日期时才有效。
这不起作用(不知道为什么(
=if( dateadd( 'Item'[PurchaseDate],1,year)<today(),"Comp","Non-Comp")
这有效,但仅适用于当前时期
=DATEDIFF('Item'[PurchaseDate],today(),MONTH)
= if('Item'[DateDiff]>12,"Comp","NonComp")
但是,在运行不同期间的报告时,我不能使用该列,因为属性对以前的期间无效。
由于计算列仅计算一次,因此在处理/刷新表时,不能将计算列用于方案。
相反,请考虑使用断开连接的参数表。在您的情况下,这将是一个包含 1 列和只有 2 行的表:"Comp"和"NonComp"。您可以将其创建为计算表,如下所示:
ParameterTable = DATETABLE("Value", STRING, {{"Comp", "NonComp"}})
根据用户在此表上选择的内容(可以使用SELECTEDVALUE(ParameterTable[Value])
找到该表(,改为在度量值中应用相关逻辑:
BaseMeasure =
// Whatever you are trying to calculate
SUM(Item[Amount])
Measure =
// This measure will respect the user selection (Comp / NonComp) and the current period:
VAR compValue = SELECTEDVALUE(ParameterTable[Value])
VAR today = MAX('Date'[Period])
RETURN
SWITCH(
compValue,
"Comp", CALCULATE( [BaseMeasure] , DATEDIFF('Item'[PurchaseDate], today, MONTH) > 12),
"NonComp", CALCULATE( [BaseMeasure] , DATEDIFF('Item'[PurchaseDate], today, MONTH) < 12),
[BaseMeasure] // Fallback, in case user didn't select Comp/NonComp
)
如果报表中有多个基本度量,则需要为每个基本度量实现此模式。