特定の月のYTD値の合計を計算するDAXメジャーを構築する方法は?
ここでは、FactTableが月ごとにグループ化されています。 FactTableには、実績データと予測データの両方が入力されます。実際の終了を知る唯一の方法は、[YTDの終わり]列のテーブル[日付のカット]の情報です。列[YTDの終わり]のテーブル[日付のカット] –単一の値のテーブル–興味深い選択月があり、YTDの計算を確認します。私たちの場合は3月です。 FactTableは毎月不規則に更新され、通常は1か月の遅れがあります。不規則な更新のため、TODAYのような時間関数にリンクする方法はありません。
[YTDの終わり]に、YTDの正しい値を黄色のカードビジュアルで月に表示したいと思います。 「2018-03」のスライサーをクリックすると、ほとんど何が必要かがわかります。黄色のカードの正しい値は66です。ただし、このソリューションは自動ではありません。 [YTDの終わり]の月が変わったときに正しい値を自動的に確認したいのですが、この例では4月または5月です。ユーザーがそれを行うのは望ましくありません。
私の必死の努力はファイルからダウンロードできます: DAX YTD.pbix
私はさまざまな方法で鹿を追いました。
よろしくお願いします。
報奨金の前に更新します。より高いレベルに移動します。 FactTableにCategory列を導入しました。 category.pbixによるDAX YTD をダウンロードしてください。したがって、フィルタリングはより複雑になります。 Applesカテゴリの正しいYTD数値が欲しいです。
Date
の列ではなく、Calendar
テーブルのFactTable
列を使用しましたか?
FactTable
の日付列を使用する場合、日付にフィルターを適用すると、3月にあるファクトレコードにフィルターが適用され、その後計算が実行されるため、結果は_33
_ 。
Calendar
のフィルターを使用する場合、フィルターを適用すると、Calendar
(グラフに表示する)のレコードがフィルター処理されるため、基になる計算はそのまま残ります。そのまま。
実例:
Calendar = CALENDAR(DATE(2010, 1, 1), DATE(2020, 12, 31))
場合によっては、欠損値を回避するためにメジャーの計算を変更することをお勧めします。
_Total = SUM(FactTable[Value])
MTD = TOTALMTD([Total], 'Calendar'[Date])
YTD = TOTALYTD([Total], 'Calendar'[Date])
_
更新:
あなたが今何を達成したいのかは私にはずっと明確ですが、それでも XY問題 のように思えます。
ダッシュボードをそのまま表示することで、ユーザーが毎回クリック/入力して表示される内容を確認する必要がなくなることを理解しています。 Cut off date (End of YTD)
を格納するために新しいテーブルを作成する必要がある理由がわかりません。自動的にどのように維持されますか?
上記の_relative date filtering
_ソリューションは、共有した.pbixファイルでも実際に機能します。 Date
テーブルからCalendar
列をイエローカードの視覚レベルのフィルターにドラッグし、相対的な日付のフィルターを追加すると、次のように機能します。
_End of YTD
_ビジュアルの場合、 following measure を使用して先月の初日を取得できるため、別のテーブルを作成する必要はありません。
_End of YTD = EOMONTH(TODAY(), -2) + 1
_
そして、うまくいけば、これはあなたが達成したいものです:
更新されたファイル 参照用。
再度更新:
別のテーブルで定義したカットオフ日付を利用できるように、組み込みの計算を使用する代わりに、独自の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」または「その他」に分類します。
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年代にどのように機能したかということにほぼ従っています。