web-dev-qa-db-ja.com

DAXで測定して、選択した月のYTDをPower BIのみで計算します

特定の月のYTD値の合計を計算するDAXメジャーを構築する方法は?

ここでは、FactTableが月ごとにグループ化されています。 FactTableには、実績データと予測データの両方が入力されます。実際の終了を知る唯一の方法は、[YTDの終わり]列のテーブル[日付のカット]の情報です。列[YTDの終わり]のテーブル[日付のカット] –単一の値のテーブル–興味深い選択月があり、YTDの計算を確認します。私たちの場合は3月です。 FactTableは毎月不規則に更新され、通常は1か月の遅れがあります。不規則な更新のため、TODAYのような時間関数にリンクする方法はありません。

enter image description hereenter image description here [YTDの終わり]に、YTDの正しい値を黄色のカードビジュアルで月に表示したいと思います。 「2018-03」のスライサーをクリックすると、ほとんど何が必要かがわかります。黄色のカードの正しい値は66です。ただし、このソリューションは自動ではありません。 [YTDの終わり]の月が変わったときに正しい値を自動的に確認したいのですが、この例では4月または5月です。ユーザーがそれを行うのは望ましくありません。

私の必死の努力はファイルからダウンロードできます: DAX YTD.pbix

私はさまざまな方法で鹿を追いました。

  1. DAXメジャーで[〜#〜] filter [〜#〜]関数を使用する。しかし、FILTER関数は厳しいようです。最初にファクトテーブルに適用され、1か月のみが選択されてから、YTD値が誤って計算されます。したがって、計算とフィルタリングの順序を強制するオプションがあれば、希望があります。
  2. [〜#〜] switch [〜#〜]関数を試して、特定の月には適切な結果を表示し、他の月には0またはnullを表示しました。私はこれに成功しましたが、それを利用することができませんでした。フィルタリングに関しては、以前と同じように絶望的でした。ところで、SWITCHがテーブルの最後で合計を生成した場合、それを作成できますが、そうではありません。驚くべきことに。
  3. [〜#〜] related [〜#〜]関数にいくつかの期待を込めて、[Cut off date]テーブルに適切な結果を表示します。私は今のところ霧から出ていません。

よろしくお願いします。

報奨金の前に更新します。より高いレベルに移動します。 FactTableにCategory列を導入しました。 category.pbixによるDAX YTD をダウンロードしてください。したがって、フィルタリングはより複雑になります。 Applesカテゴリの正しいYTD数値が欲しいです。

6

Dateの列ではなく、CalendarテーブルのFactTable列を使用しましたか?

FactTableの日付列を使用する場合、日付にフィルターを適用すると、3月にあるファクトレコードにフィルターが適用され、その後計算が実行されるため、結果は_33_ 。

Calendarのフィルターを使用する場合、フィルターを適用すると、Calendar(グラフに表示する)のレコードがフィルター処理されるため、基になる計算はそのまま残ります。そのまま。


実例:

Calendar = CALENDAR(DATE(2010, 1, 1), DATE(2020, 12, 31))

date

場合によっては、欠損値を回避するためにメジャーの計算を変更することをお勧めします。

_Total = SUM(FactTable[Value])
MTD = TOTALMTD([Total], 'Calendar'[Date])
YTD = TOTALYTD([Total], 'Calendar'[Date])
_

results


更新:

あなたが今何を達成したいのかは私にはずっと明確ですが、それでも XY問題 のように思えます。

ダッシュボードをそのまま表示することで、ユーザーが毎回クリック/入力して表示される内容を確認する必要がなくなることを理解しています。 Cut off date (End of YTD)を格納するために新しいテーブルを作成する必要がある理由がわかりません。自動的にどのように維持されますか?

上記の_relative date filtering_ソリューションは、共有した.pbixファイルでも実際に機能します。 DateテーブルからCalendar列をイエローカードの視覚レベルのフィルターにドラッグし、相対的な日付のフィルターを追加すると、次のように機能します。

yellow card

_End of YTD_ビジュアルの場合、 following measure を使用して先月の初日を取得できるため、別のテーブルを作成する必要はありません。

_End of YTD = EOMONTH(TODAY(), -2) + 1
_

そして、うまくいけば、これはあなたが達成したいものです:

final result

更新されたファイル 参照用。


再度更新:

別のテーブルで定義したカットオフ日付を利用できるように、組み込みの計算を使用する代わりに、独自のYTD計算を記述する必要があると思います。ここでは、_'Cut off date'[End of YTD]_に1行しかないことを前提としています。フィルターにALL()を追加したことに注意してください。これにより、他の行/フィルターがクリックされたときに空白を表示するのではなく、黄色のカードが同じ(66)のままになります。

_YTD_Special = 
CALCULATE(
    [Total],
    FILTER(
        ALL(FactTable),
        FactTable[Date] >= DATE(YEAR(VALUES('Cut off date'[End of YTD])), 1, 1) &&
        FactTable[Date] <= VALUES('Cut off date'[End of YTD])
    )
)
_

ytd special

3
Foxan Ng

これを解決するには、カレンダーテーブルに計算列を追加して、各行を「YTD」または「その他」に分類します。

Is YTD =
IF (
    [Date] >= DATE ( YEAR ( DISTINCT ( 'Cut off date'[End of YTD] ) ), 1, 1 )
        && [Date] <= DISTINCT ( 'Cut off date'[End of YTD] ),
    "YTD",
    "Other"
)

次に、新しいIs YTDフィールドをカードビジュアルのビジュアルレベルフィルターに追加し、基本フィルタリングから[〜#〜] ytd [〜#〜]を選択します。リスト。表示されるメジャーは、単純なものにすることができますTotal measure:SUM(FactTable [Value])。

これは、特定のメジャーの体操よりもはるかに柔軟で再利用可能なソリューションです。すべての基本メジャーの上に必要なロジックを適用するためにメジャーを爆発させる必要はありません-それらはすべて自然に機能します。ビジュアル、ページ、レポートのいずれかのレベルでフィルターを適用するか、エンドユーザーによる制御のためにスライサーに配置できます。

テキスト結果を返すことを好みます。 「YTD」/「その他」(1/0、True/FalseまたはYes/Noではなく)。これにより、他の要件に簡単に拡張できます。 「Prior YTD」(2017年1月1日から2017年3月1日)。また、ビジュアルで使用すると、より明確になります。

実際、このデザインの功績を主張するべきではありません。これは、Cognos Transformerの相対時間機能が90年代にどのように機能したかということにほぼ従っています。

1
Mike Honey