3

DAXを使用して、 PowerPivotテーブル内のフィールドの最新の値に基づいて個別の行数を取得することは可能ですか?

雇用日と異動日を含む専門家を追跡するトランザクション テーブルがあります。最新のオフィスに基づいて専門家の数を取得したいと思います。このようにして、専門家が組織内を移動するときに、特定の瞬間に彼らがどこにいるかを確認できます。

トランザクション テーブル:

Name  | Action   | EffectiveDate | Office
-----------------------------------------
Peter | Hire     | 1/10/2014     | STL
John  | Hire     | 2/5/2014      | STL
John  | Transfer | 3/2/2014      | LAX
Jason | Hire     | 6/4/2014      | STL
John  | Transfer | 9/10/2014     | CHI

望ましい出力:

Office | Distinct Count
-----------------------
CHI    | 1
STL    | 2
-----------------------
Total  | 3

DISTINCTCOUNT関数を使用するメジャーを作成しました。これで、総計を正しく取得できますが、個々のオフィスの合計は希望どおりではありません。以下の式が、私が求めていることを実行していることを理解しています。ただし、最新の発効日に基づいて専門家のオフィスのみを返すようにする方法がわかりません

DistinctCount:=DISTINCTCOUNT(TransactionTable[Name])

これは、私が作成したDistinctCountメジャーを 使用した出力ですここに画像の説明を入力

CALCULATE関数を使用し、 FILTER関数を適用して個別の専門家の最新のオフィスを取得する必要があると思いますが、それがどのようになるかはわかりません。

DistinctCountPerOffice:=CALCULATE (
    DISTINCTCOUNT(TransactionTable[Name]),
    FILTER (
        ?.....?
    )
)

さらに、このデータを月単位または四半期単位で時系列化したいと考えています。これにより、時間の経過に伴う各オフィスの累積数を確認できます。月、四半期、年を定義する日付のテーブルがあります。

日付表:

CalendarDate | Month Key | Month Name | Quarter Name | Year
-----------------------------------------------------------
1/1/2014     | 1.00      | Jan        | Q1           | 2014
1/2/2014     | 1.00      | Jan        | Q1           | 2014
...
2/1/2014     | 2.00      | Feb        | Q1           | 2014
....
8/1/2014     | 8.00      | Aug        | Q3           | 2014
..
9/2/2014     | 9.00      | Sep        | Q3           | 2014
..
12/16/2014   | 12.00     | Dec        | Q4           | 2014

私はこれの時間的側面を達成することができましたが、カウントは専門家の最新のオフィスに基づいていません.

Cumulative DistinctCount:=CALCULATE (
    DISTINCTCOUNT(TransactionTable[Name]),
    FILTER (
        ALL ( 'Dates'[CalendarDate] ),
        'Dates'[CalendarDate] <= MAX (Dates[CalendarDate] )
    )
)

ただし、私の処方箋は、専門家の最新のオフィスだけを取得するようには設計されていません。ただし、総計は正しいです。 ここに画像の説明を入力

以下は、私たちが見ようと努力しているが、取得できない出力です。

数か月にわたる累積合計を使用した望ましい出力:

Month | CHI | LAX | STL
-----------------------
Jan   | 0   | 0   | 1 
Feb   | 0   | 0   | 2   
Mar   | 0   | 1   | 1
Apr   | 0   | 1   | 1
May   | 0   | 1   | 1
Jun   | 0   | 1   | 2
Jul   | 0   | 1   | 2
Aug   | 0   | 1   | 2
Sep   | 1   | 0   | 2
Oct   | 1   | 0   | 2
Nov   | 1   | 0   | 2
Dec   | 1   | 0   | 2
4

2 に答える 2

3

これは、すべての新しいオフィスの出発に別の累積合計を追加することで実現できます。次に、この新しい累積合計を、既に計算したすべてのオフィス ジョイナーの累積合計から差し引きます。

最初に、新しい計算列 DepartureDate を作成して、その人物がオフィスを出発する日付を記録します。転送したことがない人は、日付テーブルの最後の日付である今日の日付のままにしておくことができます。

=
IF (
    ISBLANK (
        CALCULATE (
            MIN ( TransactionTable[Effectivedate] ),
            FILTER (
                TransactionTable,
                TransactionTable[Name] = EARLIER ( TransactionTable[Name] )
                    && TransactionTable[EffectiveDate] > EARLIER ( TransactionTable[EffectiveDate] )
    ))),
    MAX ( 'Dates'[CalendarDate] ),
    CALCULATE (
        MIN ( TransactionTable[Effectivedate] ),
        FILTER (
            TransactionTable,
            TransactionTable[Name] = EARLIER ( TransactionTable[Name] )
                && TransactionTable[EffectiveDate] > EARLIER ( TransactionTable[EffectiveDate] ))))

次に、この計算列と Dates CalendarDate フィールドの間にリレーションシップを作成します。すでにアクティブな関係が 1 つ作成されているため、これは非アクティブな関係になります。

次に、非アクティブな関係を呼び出して、出発の累積合計のメジャーを作成します。

   DeparturesCumulativeTotal =
    CALCULATE (
        COUNTROWS ( TransactionTable ),
        USERELATIONSHIP ( TransactionTable[DepartureDate], 'Dates'[CalendarDate] ),
        FILTER (
            ALL ( 'Dates' ),
            'Dates'[CalendarDate] < MAX ( 'Dates'[CalendarDate] )
        )
    )

<MAX Dates 句に " " の代わりに " " を使用<=することで、今日の日付の人が今日出発する人として表示されないようにします。

最後に、別の新しいメジャーを作成して、既存の累積合計から新しい累積合計を減算します。

Net:=[Cumulative DistinctCount]-[DeparturesCumulativeTotal]

これは次のようになります。

ここに画像の説明を入力

于 2015-05-10T12:31:15.197 に答える
-1

こんにちは、この素晴らしい仕事を投稿していただきありがとうございます。

max最も古いもの、およびまたは(データ型によって異なります) にdistinctcount変更してください。CountCounta

Cumulative DistinctCount:=CALCULATE (
    Counta(TransactionTable[Name]),
    FILTER (
        ALL ( 'Dates'[CalendarDate] ),
        'Dates'[CalendarDate] <= Earliest (Dates[CalendarDate] )
    )
) 
于 2017-02-17T14:32:07.283 に答える