0

示例工作簿: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 中复制它?

这是我最好的尝试(假设一个日期维度,并且它连接到“开始日期”):

TotalAmount :=
CALCULATE (
    SUM ( Table[Amount] ),
    FILTER (
        ALL ( 'Date'[Date] ),
        'Date'[Date] <= MAX ( 'Date'[Date] )
    )
)

我最好的想法(我认为这是一个非常糟糕的想法)是添加一个新列,它可以为我提供更大的 ActiveDate 或 CommenceDate,然后使用非活动关系加入到该列,并使关系激活只是为了这个计算?

=IF([@active]>[@commence], [active], [commence])

想法?

4

1 回答 1

0

在这种情况下,您创建附加列的想法可能是最好的。无论您做什么,您都必须摆脱 Transactions[commence] 和 DimDate[DateKey] 之间的活动关系,以使此逻辑正常工作。

完成该操作后,您必须根据上下文中的当前日期过滤两列([活动]、[开始])。这将比导航单个关系和使用单个过滤器更麻烦且效率更低。

要记住的是,您需要先应用关系操作步骤,而不是过滤器操作步骤。这看起来像下面的嵌套 CALCULATE():

TotalAmount:=
CALCULATE(
    CALCULATE(
        SUM(Transactions[Amount])
        ,USERELATIONSHIP(Transactions[MaxDateKey], DimDate[DateKey])
    )
    ,FILTER(
        ALL('Date')
        ,'Date'[Date] <= MAX('Date'[Date])
    )
)
于 2015-10-07T15:03:54.127 回答