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でどのように複製するのですか?

これが私の最高のスタブです(日付ディメンションがあり、「CommenceDate」に接続されていると仮定します):

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] の間のアクティブな関係をエスケープする必要があります。

その操作を行った後、コンテキスト内の現在の日付に対して 2 つの列 ([active]、[commence]) でフィルター処理する必要があります。これは、単一の関係をナビゲートして単一のフィルターを使用するよりも面倒で効率が悪くなります。

注意すべきことは、フィルター操作ステップではなく、関係操作ステップを前に適用する必要があるということです。これは、次のネストされた 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 に答える