Функциональность Подобна СУММЕСЛИМН с DAX?

Образец книги: 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?

Вот мой лучший удар (при условии измерения даты, и он связан с «CommenceDate»):

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

Моя лучшая идея (и я думаю, что это довольно дрянная идея) - добавить новый столбец, который дает мне больше ActiveDate или CommenceDate, а затем использовать неактивные отношения, чтобы присоединиться к ним, и сделать отношения активными только для этого расчета?

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

Мысли?


person m1nkeh    schedule 06.10.2015    source источник


Ответы (1)


В этом случае, вероятно, лучше всего подойдет ваша мысль о создании дополнительной колонки. Независимо от того, что вы делаете, вам придется избегать активной связи между Transactions [begin] и DimDate [DateKey], чтобы эта логика работала правильно.

После выполнения этой манипуляции вам нужно будет выполнить фильтрацию по двум столбцам ([активный], [начать]) по текущей дате в контексте. Это будет более громоздко и менее эффективно, чем навигация по одной взаимосвязи и использование одного фильтра.

Следует иметь в виду, что вам нужно применить шаг манипуляции отношениями раньше, а не шаг манипуляции фильтром. Это выглядит как следующая вложенная функция CALCULATE ():

TotalAmount:=
CALCULATE(
    CALCULATE(
        SUM(Transactions[Amount])
        ,USERELATIONSHIP(Transactions[MaxDateKey], DimDate[DateKey])
    )
    ,FILTER(
        ALL('Date')
        ,'Date'[Date] <= MAX('Date'[Date])
    )
)
person greggyb    schedule 07.10.2015
comment
да, я думаю, это то, к чему мы собираемся пойти ... я попробую сыграть с этим завтра. - person m1nkeh; 13.10.2015