功能类似于使用DAX的SUMIFS?

时间:2015-10-06 16:57:18

标签: powerpivot dax ssas-tabular

示例工作簿: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])

思想?

1 个答案:

答案 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])
    )
)