DAXグループ化評価
このメジャーでは、顧客IDでグループ化し、各顧客の最小order_dateの年を返す一時テーブルを作成しています。次に、特定の年に表示される顧客の数をカウントしたいと思います(基本的には行数だけです)。
私が理解するのに苦労しているのは、この式はその中のSUMMARIZE
テーブルを見ているようには見えないということです。年とこのメジャーをマトリックスに入れるとSUMMARIZE
、数式で作成されたグループ化されたバージョンではなく、生のテーブルに基づいてカウントされます。なぜこのように評価しているのか、何か考えはありますか?
COUNTROWS(
SUMMARIZE(
Orders,
Orders[Customer ID],
"min_order_date_year",
MIN(Orders[Order Date].[Year])))
回答
数式は、指定したロジックに従ってOKです。要件とコードに何を書いているのかを明確にする必要があります。あなたの数式はあなたがそれを指示しているものを正確に返しています。
私が正しいと理解している場合は、最小年の顧客数が必要です。たとえば、2019年に6人のユニークな顧客がいて、2020年に11人のユニークな顧客がいる場合、ここでは、測定値で返される値6を探しています。
さて、あなたの要約テーブルは実際に何を返しますか?以下のようにのみSummarizeコード用に個別のカスタムテーブルを作成すると、テーブルには実際にすべての顧客名/ IDが最初の列に保持され、2番目の列にはその顧客が利用できるMIN年が表示されます。
orders_summarize =
SUMMARIZE(
Orders,
Orders[customer id],
"min_order_date_year",MIN(Orders[Order Date].[Year])
)
つまり、基本的に、要約テーブルにすべての顧客のリストがあります。そして今、あなたは実際にユニークな顧客の総数を返しているあなたの要約テーブルの行を数えています。
最後に、特定の年(MIN年など)の顧客数が必要な場合は、以下の手順に従ってください-
ステップ-1:以下のようにカスタム要約テーブルを作成します-
store_summarized_table =
SUMMARIZE(
store,
store[Customer ID],
"mindate",MIN(store[Order Date])
)
ステップ-2:メジャーを作成します-
count_cust_id = COUNT('store_summarized_table'[Customer ID])
ステップ-3:次の画像に示すように、Matrixビジュアルを構成します。画像で出力を取得することもできます-
物理テーブルを回避するには、以下でこれを行うことができます-
ステップ-1:以下のようにカスタム列を作成します-
is_min_year =
// -- keep current row's customer id to a variable
VAR current_cust_id = store[Customer ID]
// -- keep current row's YEAR value to a variable
VAR current_year = store[Order Date].[Year]
// -- find the MIN YEAR from order date for the current row customer id
VAR min_year_current_custommer_id =
CALCULATE(
MIN(store[Order Date].[Year]),
FILTER(
store,
store[Customer ID] = current_cust_id
)
)
// -- check the current row's year is the MIN year of order date for the customer as well or not.
RETURN IF(current_year = min_year_current_custommer_id, 1,0)
または、次のようにメジャーを作成します-
is_min_year_measure =
VAR min_order_year_for_current_customer =
CALCULATE(
MIN(store[Order Date].[Year]),
FILTER(
ALL(store),
store[Customer ID] = MIN(store[Customer ID])
)
)
RETURN
IF ( MIN(store[Order Date].[Year]) = min_order_year_for_current_customer, 1,0)
ステップ-2:以下のようにメジャーを作成します-
作成されたカスタム列の場合
count_cust_for_min_year =
CALCULATE(
DISTINCTCOUNT(store[Customer ID]),
FILTER(
store,
store[is_min_year] = 1
)
)
作成されたメジャーの場合
count_cust_for_min_year =
CALCULATE(
DISTINCTCOUNT(store[Customer ID]),
FILTER(
store,
[is_min_year_measure] = 1
)
)
次に、「注文日」を追加し、「count_cust_for_min_year」をマトリックスに測定します。出力は以下と同じになります-