Die ABC-Analyse ist ein betriebswirtschaftliches Mittel zur Planung und Entscheidungsfindung. Dabei werden die Objekte (Kunden, Artikel, Projekte, etc.) in drei Klassen unterteilt.
Die Klasse A steht für einen hohen Ergebnisbeitrag,
die Klasse B für einen mittelmäßigen Ergebnisbeitrag und
die Klasse C für einen geringen Ergebnisbeitrag.
Mit der ABC-Analyse ist es möglich,
- das „Wesentliche“ vom „Umwesentlichen“ zu trennen,
- Rationalisierungsschwerpunkte zu setzen,
- unwirtschaftliche Anstrengungen zu vermeiden,
- die Wirtschaftlichkeit zu steigern.
Als idealtypisch gilt die 80/20-Regel (Paretoprinzip), das heißt es werden zum Beispiel im Fall der Kundenbewertung mit lediglich 20% der Kunden bereits 80% des Umsatzes erzielt (A-Kunden), 30% der Kunden bringen 15% des Umsatzes (B-Kunden) und von 50% der Kunden kommen nur 5% des Umsatzes. Die Ergebnisse des Pareto-Ansatzes werden allerdings in der Realität selten erreicht.
In diesem YouTube zeigt Parker Stevens von BI Elite, wie Sie in Power BI ein Pareto-Diagramm erstellt. Mit einer zusätzlichen bedingten Formatierung, kann dann die visuelle Klassifizierung in ABC erfolgen.
In der DAX-Kennzahl Pareto % wird der kumulierte prozentuale Wertanteil des betrachteten Objektes (Kunden, Artikel, Projekte, etc.) ermittelt. Hierfür wird die Gesamtsumme (100%) aller Objekte berechnet, die Summe für das aktuelle Objekt und eine Zusammenfassung (SUMMARIZE) für jedes einzel Objekt. Danach werden über SUMX alle Zeilen als laufende Summe aufaddiert, deren Wert größer oder gleich dem aktuellen Wert ist. Die laufende Summe wird dann im Verhältnis zur Gesamtsumme gesetzt.
Pareto % =
VAR GesamtUmsatz =
CALCULATE (
SUM ( 'Debitorposten'[Verkauf (MW)] );
ALLSELECTED ( Debitorposten )
)
VAR AktuellerUmsatz =
SUM ( Debitorposten[Verkauf (MW)] )
VAR ZusammengefassteTabelle =
SUMMARIZE (
ALLSELECTED ( Debitorposten );
Debitorposten[Debitorennr.];
"@Umsatz"; SUM ( Debitorposten[Verkauf (MW)] )
)
VAR LaufendeSumme =
SUMX (
FILTER ( ZusammengefassteTabelle; [@Umsatz] >= AktuellerUmsatz );
[@Umsatz]
)
RETURN
DIVIDE ( LaufendeSumme; GesamtUmsatz )
ALLSELECTED gibt alle Zeilen der Tabelle zurück, wobei alle Filter ignoriert werden, die möglicherweise in der Abfrage angewendet wurden, jedoch von außen kommende Filter werden beibehalten.
Für die Anzeige wählen Sie das Linien- und gruppiertes Säulendiagramm.
Auf die Gemeinsame Achse wird das Objekt gelegt (In diesem Bespiel die Debitorennr. = Kunde)
Für die Spaltenwerte wird der gewichtende Wert hinterlegt. (In diesem Beispiel der Verkauf (MW) = Umsatz)
Für die Zeilenwerte verwenden Sie die DAX-Kennzahl Pareto %.
Für die ABC Klassifizierung hinterlegen wir auf der Standardfarbe eine bedingte Formatierung mit folgenden Regeln basierend auf das Feld Pareto %.
Wenn Wert ist größer als oder gleich 0 Zahl
und ist kleiner als oder gleich 0,8 Zahl
dann Grün (Klasse A).
Wenn Wert ist größer als 0,8 Zahl
und ist kleiner als oder gleich 0,95 Zahl
dann Gelb (Klasse B).
Wenn Wert ist größer als 0,95 Zahl
und ist kleiner als oder gleich 1 Zahl
dann Rot (Klasse C).
Zusätzlich können Sie jetzt noch die Datenbeschriftung und Markierung aktivieren.
Wird nun zum Beispiel auf ein bestimmtes Jahr gefiltert, werden die Debitorennr. nach dem Jahresumsatz kategorisiert.
Anhand dieser Einordnung kann man sich ein grobes Bild der IST-Situation verschaffen und weitere Vorgehensweisen ableiten.
Quellen:
Hallo liebes think-BI Team,
der Post ist schon älter, aber ich hätte eine Frage dazu.
Ich würde die Gesamtsumme, die Laufende Summe und die Pareto % gern als berechnete Spalte in der Power Query berechnen, damit ich die zugeteilten Werte auch als Felder einer Tabelle verwenden kann. Wie müsste ich da den Code umschreiben bzw. ginge das überhaupt?
Danke und LG,
Vanessa
Hi Vanessa,
du kannst die Measures auch als Felder in einem Tabellen-Visual verwenden. Wichtig ist dabei zu beachten, welche weiteren Felder Einfluss auf die Berechnung der Measures haben.
In Power Query ist die Berechnung statisch und muss auf dem gewünschten Aggregationslevel erfolgen.
Das könnte dann wie folgt aussehen.
let
Quelle = Debitorposten,
#“Gruppierung Debitor“ = Table.Group(Quelle, {„Debitorennr.“}, {{„Debitor Verkauf (MW)“, each List.Sum([#“Verkauf (MW)“]), type number}}),
#“Gruppierung Gesamtsumme“ = Table.Group(#“Gruppierung Debitor“, {}, {{„Zeile“, each _, type table [#“Debitorennr.“=text, #“Debitor Verkauf (MW)“=number]}, {„Gesamtsumme“, each List.Sum([#“Debitor Verkauf (MW)“]), type number}}),
#“Erweiterte Zeile“ = Table.ExpandTableColumn(#“Gruppierung Gesamtsumme“, „Zeile“, {„Debitorennr.“, „Debitor Verkauf (MW)“}, {„Debitorennr.“, „Debitor Verkauf (MW)“}),
#“Sortierte Zeilen“ = Table.Sort(#“Erweiterte Zeile“,{{„Debitor Verkauf (MW)“, Order.Descending}}),
#“Hinzugefügter Index“ = Table.AddIndexColumn(#“Sortierte Zeilen“, „Index“, 1, 1, Int64.Type),
#“Pareto Zeilen“ = Table.AddColumn(#“Hinzugefügter Index“, „Pareto Zeilen“, (_) => Table.SelectRows(#“Hinzugefügter Index“, (r)=> r[Index] <= _[Index])), #"Pareto Summe" = Table.AggregateTableColumn(#"Pareto Zeilen", "Pareto Zeilen", {{"Debitor Verkauf (MW)", List.Sum, "Pareto Summe", type number}}), #"Pareto Prozent" = Table.AddColumn(#"Pareto Summe", "Parto %", each [Pareto Summe] / [Gesamtsumme], Percentage.Type) in #"Pareto Prozent" LG, Marcus