4

Power View を使用して、さまざまな時点でのすべての口座残高の合計をグラフ化して、合計がどのように変化しているかを確認しようとしています。

取引履歴(加算・減算)はなく、各口座の特定の時点での「残高」のみです。

私のデータの簡単な例は次のとおりです。

Account Date Balance
a111 01 January 2015 100
a111 01 February 2015 150
b222 01 March 2015 200
c333 01 March 2015 300
b222 01 May 2015 150
d444 01 June 2015 400

私が知る限り、最新の日付順に並べられた「アカウント」ごとの動的ランクを生成するメジャーを作成する必要があります。次に、ランク = 1 の各アカウントを合計する 2 番目のメジャーを作成できるはずです。

質問PowerPivot DAX - Dynamic Ranking Per Group (Min Per Group)で説明されているこの問題の同様の例がありますが、 これを Power View の折れ線グラフに表示する方法を取得できないようです。

折れ線グラフに表示したいのは(グラフに欠落している日付を並べ替えさせることです):

Date Balance
01 Jan 2015 100 -- Account a111 only
01 Feb 2015 150 -- Account a111 only, but the new value
01 Mar 2015 650 -- Accounts a111 (latest), b222 and c333
01 May 2015 600 -- As above, but account b222 is updated
01 Jun 2015 1000 -- Latest values for all accounts

ただし、私が現在見ているのは次のとおりです。

Date Balance
01 Jan 2015 100 -- Sum of Balances matching this date
01 Feb 2015 150 -- As above
01 Mar 2015 500 -- As above
01 May 2015 150 -- As above
01 Jun 2015 400 -- As above

私が知る限り、問題は、グラフの各データ ポイントで、「フィルター コンテキスト」が日付に一致する行のみに縮小されているのに対し、その日付より前のすべての行に「 1のランク。

参考までに、私は Excel 2013 を使用しており、データは最終的に Power Query (SharePoint からデータをプルする) 経由で取得されるため、必要に応じてそこでいくつかの魔法を使用できます (つまり、DAX MAX() で使用する数値の「グループ ID」を生成します)。文字列が好きではないようです)。

これが混乱を招くものではないことを願っています。事前に助けてくれてありがとう。

4

1 に答える 1

1

これに対する解決策は、別の日付ディメンション テーブルを用意して、ファクト テーブルに関係なく月単位で残高を個別に計算できるようにすることです。

Date という日付テーブルがあるとします。

したがって、最初にベースメジャーを作成します

[Total Balance] := SUM( FactTable[Balance] )

次に、Fact テーブルの最初の月を計算して、Date テーブルの値を調べるための下限として使用します。

[First Ever Balance Date] := FIRSTDATE( ALL( FactTable[Date] ) )

そして今、コンテキスト内の最初の月と現在の月の間の日付範囲の残高を使用して最後の日付を決定します。

[Last Balance Date] :=
LASTNONBLANK (
    DATESBETWEEN ( Date[Date], [First Ever Balance Date], MAX ( Date[Month] ) ),
    [Total Balance]
)

したがって、2015 年 5月 1 日の月のa111を考慮してください。このメジャーは、2015 年 1 月 1 日 ( our ) から 2015 年 5 月 1 日 ( the ) までのすべての日付を調べ、残高のある最後の行を見つけて、対応する( 2/1/2015 ) を返します。[First Ever Balance Date]MAX Date[Month]Date[Date]

このメジャーは、アカウントの初期残高より前の月については空白を返します。日付フィルタリングで BLANKS を使用しても機能しないため、これらの BLANK 値を [First Ever Balance Date] に置き換えて、そのアカウントの現在の残高が引き続き 0 を返すようにする必要があります。

[Last Balance Date Remove Blanks] :=
IF (
    ISBLANK ( [Last Balance Date] ),
    [First Ever Balance Date],
    [Last Balance Date]
)

これで、任意の月の任意の口座の現在の残高を、次の時点の残高を調べることで計算できます。Last Balance Date Remove Blanks

[Last Balance] :=
CALCULATE (
    [Total Balance],
    DATESBETWEEN ( Date[Date], [Last Balance Date Remove Blanks], 
    [Last Balance Date Remove Blanks] )
)

最後に、アカウント全体で SUMX を使用して、個々のLast Balance金額を合計します。

[Account Total Balance] := SUMX( ALL( FactTable[Account] ), [Last Balance] )

ピボット テーブルでは、Date[Month] を行に配置し、[Account Total Balance] をメジャーとして配置します。これには、サンプル セットに 2015 年 4 月 1 日のようなファクト テーブルの行がない月が含まれることに注意してください。これらを除外する場合は、別の中間メジャーを追加して、ファクト テーブルの行をカウントします。

[Fact Table Row Count] := COUNTROWS ( FactTable )

そして、[Fact Table Row Count] が BLANK() の場合は BLANK()、それ以外の場合は [Account Total Balance] を返すメジャーを作成します。

[Account Balance Hide Rows] :=
IF (
    ISBLANK ( [Fact Table Row Count] ),
    BLANK (),
    [Account Balance]
)
于 2015-09-01T16:34:20.700 に答える