【问题标题】:Functionality Similar to SUMIFS with DAX?功能类似于带有 DAX 的 SUMIFS?
【发布时间】:2015-10-06 16:57:17
【问题描述】:

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

想法?

【问题讨论】:

    标签: powerpivot dax ssas-tabular


    【解决方案1】:

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

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

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

    TotalAmount:=
    CALCULATE(
        CALCULATE(
            SUM(Transactions[Amount])
            ,USERELATIONSHIP(Transactions[MaxDateKey], DimDate[DateKey])
        )
        ,FILTER(
            ALL('Date')
            ,'Date'[Date] <= MAX('Date'[Date])
        )
    )
    

    【讨论】:

    • 是的,我认为这就是我们必须要做的……我明天会尝试玩这个。
    猜你喜欢
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2012-10-04
    • 2015-11-30
    • 2012-12-19
    • 2017-05-21
    • 1970-01-01
    • 2014-10-04
    相关资源
    最近更新 更多