示例工作簿:http://1drv.ms/1VDgAjf
我有一张类似于:
的表格ActiveDate CommenceDate Amount
-------------------------------------------
20150115 20150201 10
20150115 20150201 2
20150223 20150301 3
20150223 20150202 5
我需要计算以下内容:
Date Amount
---------------------
25-Jan-15 0
30-Jan-15 0
04-Feb-15 12
09-Feb-15 12
14-Feb-15 12
19-Feb-15 12
24-Feb-15 17
01-Mar-15 20
06-Mar-15 20
11-Mar-15 20
所以......在Excel中我用以下语句对此进行了测试:
=SUMIFS(
Table[amount]
,Table[commence] ,"<="&TEXT(<<DateRef>>, "yyyymmdd")
,Table[active] ,"<="&TEXT(<<DateRef>>, "yyyymmdd")
)
这很好..我的问题是,我如何在DAX中复制它?
这是我最好的刺戳(假设一个日期维度,它连接到&#34; CommenceDate&#34;):
TotalAmount :=
CALCULATE (
SUM ( Table[Amount] ),
FILTER (
ALL ( 'Date'[Date] ),
'Date'[Date] <= MAX ( 'Date'[Date] )
)
)
我最好的想法(而且我认为这是一个非常糟糕的想法),是添加一个新列,它给了我更大的ActiveDate或CommenceDate,然后使用一个非活动关系来加入它,以及使此关系处于活动状态 ?
=IF([@active]>[@commence], [active], [commence])
思想?
答案 0 :(得分:0)
在这种情况下,您想要创建一个额外的列可能是最好的。无论你做什么,你都必须逃避Transactions [开始]和DimDate [DateKey]之间的活动关系,以使这个逻辑正常工作。
执行该操作后,您必须根据上下文中的当前日期过滤两列([active],[starts])。与导航单个关系和使用单个过滤器相比,这将更加麻烦且效率更低。
要记住的是,您需要先应用关系操作步骤,而不是使用过滤器操作步骤。这看起来像以下嵌套的CALCULATE():
TotalAmount:=
CALCULATE(
CALCULATE(
SUM(Transactions[Amount])
,USERELATIONSHIP(Transactions[MaxDateKey], DimDate[DateKey])
)
,FILTER(
ALL('Date')
,'Date'[Date] <= MAX('Date'[Date])
)
)