Toleranzgrenzen für Datenschnitte in Power BI festlegen

Manchmal ist es sinnvoll, für die Auswertung von Daten bestimmte Toleranzen festzulegen.

Ein Beispiel:

Möchte ich auswerten, wie pünktlich ich die Bestellungen meiner Kunden ausliefere, gibt es drei mögliche Werte: ich liefere zu früh, ich liefere pünktlich oder ich liefere zu spät.

Pünktlich liefere ich dann, wenn die Lieferung beim Kunden exakt zum vereinbarten Termin erfolgt. Alles andere ist entweder zu früh oder zu spät.

Nun kann es in diesem Beispiel aber durchaus sinnvoll sein, hier gewisse Toleranzobergrenzen bzw. Untergrenzen zu definieren. Liefere ich – sagen wir mal – einen Hauptstadtflughafen mit einer 10-tägigen Verspätung aus, kann das unter Umständen durchaus noch als pünktlich angesehen werden.

Sinnvoll ist hier ein Datenschnitt-Visual („Slicer“), bei dem der Benutzer des Berichts die gewünschten Toleranzgrenzen dynamisch selbst festlegen kann. Wie kann ich das in Power BI realisieren?

So könnte ein fertiger Slicer zum definieren der Toleranzober- bzw. -untergrenze aussehen

1. Schritt: Parameter erstellen

Im ersten Schritt definieren wir eine Parametertabelle.
In meinem Beispiel möchte ich dem Benutzer des Berichts die Möglichkeit geben, die Pünktlichkeit in Tagen mit einer Toleranz von +- 10 Tagen einzustellen. Also benötige ich eine entsprechende Parameterliste von Ganzzahlen zwischen -10 und +10.

Hierfür gehe ich in der Berichtsansicht von Power BI Desktop auf „Modellierung“ und wähle „Neuer Parameter“ / „Numerischer Bereich“.

Den sich öffnenden Dialog fülle ich wie folgt aus:

Der Dialog zum festlegen der Parameterliste

Den Namen der Parameterliste gebe ich hier beispielsweise als „Toleranzgrenzen“ an. Dann möchte ich nur ganze Tage zählen, wähle als Datentyp also Ganze Zahl.

Da wir Toleranzgrenzen von -10 bis +10 erlauben wollen, gebe ich diese Werte bei Minimum und Maximum an. Das Inkrement ist 1 (1 Tag). Einen Standardwert benötige ich hier nicht.

Dann habe ich noch die Möglichkeit, gleich einen Slicer (also ein Datenschnitt-Visual) in den Bericht einzufügen. Davon mache ich Gebrauch.

Das erstellte Visual sieht nun so aus:

Das vom Dialog erzeugte Slicer-Visual

Das ist noch nicht ganz das, was wir wollen, da wir hier nun einen einzigen Wert festlegen können und nicht, wie wir es möchten, zwei Werte.

Um den Slicer so anzupassen, wie wir ihn brauchen, gehen wir in die Formatierungsoptionen des Visuals und stellen bei Optionen / Stil von „Einzelwert“ auf „Zwischen“ um.

Das Ergebnis ist ein Slicer so, wie wir ihn haben wollen

Der fertige Slicer

2. Schritt: die Auswertung des Slicers

Durch das Anlegen der Parametertabelle hat uns Power BI nun automatisch eine Tabelle „Toleranzgrenzen“ angelegt mit den Werten von -10 bis +10.

Des Weiteren haben wir ein Measure mit dem Namen „Toleranzgrenzen Wert“ erzeugt bekommen.

Die von Power BI automatisch erzeugte Tabelle Toleranzgrenzen

Aber Achtung: mit dem Measure Toleranzgrenzen Wert können wir in diesem Beispiel nichts anfangen, da wir ja nicht einen, sondern zwei Werte (die Ober- und die Untergrenze) auswerten wollen. Folglich können wir das Measure „Toleranzgrenzen Wert“ auch nicht zum Beispiel auf einem Karten-Visual anzeigen, dieser Versuch erzeugt lediglich ein „(Leer)“ auf der Karte.

Was wir hier tun können:

Wir möchten ja den vom Benutzer festgelegten Minimum- bzw. Maximum-Wert des Wertebereiches auswerten.
Das können wir mit den DAX-Ausdrücken MIN und MAX erreichen, beispielsweise so:

TermintreueMin  = 
MIN ( Toleranzgrenzen[Toleranzgrenzen] )
TermintreueMax  = 
MAX ( Toleranzgrenzen[Toleranzgrenzen] )

Nun haben wir jeweils ein Measure für das vom Benutzer im Slicer gesetzte Minium bzw. Maximum.

Auch, wenn ich im Projekt eine eigene Measure-Tabelle habe, lege ich diese beiden Measures übrigens in der Toleranzgrenzen-Tabelle an. Das ist aber Geschmacksache.

Mit diesen beiden Measures kann ich nun weiter arbeiten.

Hier nur ein kurzes Beispiel:

Nehmen wir an, ich habe bereits eine Tabelle „Termintreue“ mit einer Spalte „Termintreue in Tagen“.
Bei „Termintreue in Tagen“ bedeutet 0, dass ich exakt pünktlich geliefert habe, -1 bedeutet, ich habe einen Tag zu früh geliefert, 1 bedeutet, ich habe einen Tag zu spät geliefert usw.

Wenn ich nun auswerten möchte, wie viele Bestellungen ich insgesamt zu früh ausgeliefert habe unter Berücksichtigung der im Slicer gesetzten Toleranz, könnte der DAX-Code so aussehen:

Anzahl zu früh = 
VAR Anzahl =
    COUNTROWS (
        FILTER (
            Termintreue,
            Termintreue[Termintreue in Tagen] < [TermintreueMin]
        )
    )
RETURN
    IF ( ISBLANK ( Anzahl ), 0, Anzahl )

Das abschließende IF bewirkt hier noch, dass für den Fall, dass überhaupt keine Bestellung zu früh ausgeliefert wurde, 0 angezeigt wird und nicht Leer.

Ganz ähnlich geht man übrigens vor, wenn man nicht eine Werte-Tabelle sondern Datums-Ober- und Untergrenzen auswerten möchte.

Aber das ist ein Thema, für das es in Zukunft vielleicht mal einen eigenen Beitrag gibt.

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert