DAX-Gruppierungsauswertung
In dieser Maßnahme erstelle ich eine temporäre Tabelle, um sie nach Kunden-ID zu gruppieren und das Jahr des Mindestbestelldatums für jeden Kunden zurückzugeben. Ich möchte dann die Anzahl der Kunden zählen, die für ein bestimmtes Jahr erscheinen (im Grunde nur eine Zeilenzählung).
Was ich nur schwer verstehe, ist - diese Formel scheint nicht auf die darin enthaltene SUMMARIZE
Tabelle zu schauen. Wenn ich das Jahr und dieses Maß in eine Matrix einfüge, zählt es basierend auf der Rohtabelle, nicht der gruppierten Version, die SUMMARIZE
in der Formel erstellt wurde. Irgendwelche Ideen, warum es auf diese Weise bewertet wird?
COUNTROWS(
SUMMARIZE(
Orders,
Orders[Customer ID],
"min_order_date_year",
MIN(Orders[Order Date].[Year])))
Antworten
Die Formel ist gemäß der von Ihnen bereitgestellten Logik in Ordnung. Sie müssen sowohl Ihre Anforderung als auch das, was Sie in Ihren Code schreiben, klarstellen. Ihre Formel gibt genau das zurück, was Sie ihr befehlen.
Wenn ich das richtig verstehe, brauchen Sie einfach die Kundenanzahl für das Mindestjahr. Wenn Sie beispielsweise 6 Einzelkunden für das Jahr 2019 und 11 Einzelkunden für das Jahr 2020 haben, suchen Sie hier nach dem Wert 6, den Sie nach Ihrem Maß zurückgeben können.
Nun, was gibt Ihre Zusammenfassungstabelle tatsächlich zurück? Wenn Sie eine separate benutzerdefinierte Tabelle nur für den Zusammenfassungscode wie unten erstellen, können Sie sehen, dass die Tabelle tatsächlich alle Ihre Kundennamen/IDs in der ersten Spalte enthält und die zweite Spalte das MIN-Jahr enthält, das für diesen Kunden verfügbar ist.
orders_summarize =
SUMMARIZE(
Orders,
Orders[customer id],
"min_order_date_year",MIN(Orders[Order Date].[Year])
)
Im Grunde haben Sie also eine Liste aller Kunden in Ihrer Zusammenfassungstabelle. Und jetzt zählen Sie die Zeilen Ihrer Zusammenfassungstabelle, die tatsächlich die Gesamtzahl der eindeutigen Kunden zurückgibt.
Wenn Sie schließlich die Kundenzahl für ein bestimmtes Jahr (z. B. MIN-Jahr) möchten, führen Sie die folgenden Schritte aus:
Schritt-1: Erstellen Sie eine benutzerdefinierte zusammengefasste Tabelle wie folgt :
store_summarized_table =
SUMMARIZE(
store,
store[Customer ID],
"mindate",MIN(store[Order Date])
)
Schritt-2: Erstellen Sie eine Maßnahme als
count_cust_id = COUNT('store_summarized_table'[Customer ID])
Schritt-3: Konfigurieren Sie nun Ihre Matrix-Visuals wie im folgenden Bild gezeigt. Sie können die Ausgabe auch im Bild erhalten.

Um die physische Tabelle zu vermeiden, können Sie dies unten tun:
Schritt 1: Erstellen Sie eine benutzerdefinierte Spalte wie unten beschrieben .
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)
ODER erstellen Sie eine Maßnahme als
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)
Schritt-2: Erstellen Sie eine Maßnahme wie unten beschrieben-
Für erstellte benutzerdefinierte Spalte
count_cust_for_min_year =
CALCULATE(
DISTINCTCOUNT(store[Customer ID]),
FILTER(
store,
store[is_min_year] = 1
)
)
Für erstelltes Maß
count_cust_for_min_year =
CALCULATE(
DISTINCTCOUNT(store[Customer ID]),
FILTER(
store,
[is_min_year_measure] = 1
)
)
Fügen Sie nun "Bestelldatum" hinzu und messen Sie "count_cust_for_min_year" zu Ihrer Matrix. Die Ausgabe ist die gleiche wie unten-
