Groß- oder klein? (Case Sensitivity bei DAX & Power Query)

    Groß- oder kleinschreiben? Macht “Case Sensitivity” eigentlich einen Unterschied? Ja! Und nein… Aus aktuellem Anlass heute eine Erklärung und ein Fall, der uns passiert ist.

    Der Anlass

    Wir haben zwei Tabellen: verkaufte Positionen und Artikel. Die Tabellen Positionen und Artikel enthalten je eine Artikelnummer. Um beide Tabellen zu verknüpfen benötigen wir eine eindeutige Artikelnummer.

    Die Tabelle Artikel gab es leider nicht direkt aus dem System unseres Kunden. Um aber mit einer Dimensionstabelle arbeiten zu können, haben wir uns die Daten aus den Positionen erzeugt: Alle Spalten der Positionsdaten außer Artikelnummer und Artikelbeschreibung haben wir entfernt und dann nach Artikelnummer gruppiert. Für die Artikelbeschreibung nehmen wir das Maximum. Wenn also eine Artikelnummer mehrere Artikelbeschreibungen hat (was in Positionsdaten theoretisch vorkommen könnte), wird einfach eine der Bezeichnungen verwendet.

    Beim Verbinden erhalte ich von Power BI einen Fehler: In beiden Tabellen ist die Artikelnummer nicht eindeutig.

    Das kann nicht sein! Wir haben doch nach Artikelnummer gruppiert!?

    In Power Query gibt es die Funktion Dubletten entfernen. Nicht die ganze feine Art, aber warum nicht – schließlich darf es nach der Gruppierung sowieso schon keine Dublette geben. Wir laden neu und versuchen erneut die Verbindung aufzubauen – wir erhalten weiterhin den Fehler, dass es Dubletten gibt. Wie kann das sein?

    Was bedeutet eigentlich Case Sensitivity?

    Gemeint ist, ob es relevant ist, ob ein Wort oder ein Buchstabe groß- oder kleingeschrieben ist. Ich kenne keine gute deutsche Übersetzung. Und bevor ich mich bemühe: Case Sensitivity ist in der IT einfach gängig.

    In den meisten Fällen macht man sich darüber keine Gedanken. Wie selbstverständlich suchen wir bei google nach “hotel in stuttgart” und wissen, dass wir Hotel und Stuttgart nicht großschreiben müssen. OK, bei Google kann man sogar komplette Dreher drin haben.

    Aber was macht eigentlich DAX? Was ist das Ergebnis dieser Formel:

    = “Stuttgart” = “STUTTGART”

    Ist das Ergebnis wahr oder falsch?

    DAX ist Case Insensitive

    DAX interessiert sich nicht für Groß- und Kleinschreibung. Weder bei den Werten, noch in seiner eigenen Grammatik. Daher sind beide Formeln korrekt:

    = if( Personen[Ort] = “stuttgart”; “super!”; “der arme Kerl”)

    = IF( Personen[Ort] = “STUTTGART”; “super!”; “der arme Kerl”)

    Es ist also weder wichtig, ob das IF in der Formel noch ob “stuttgart”  groß- oder kleingeschrieben wird. Viele nehmen das an – selbstverständlich ist das nicht.

    GetData (Power Query)

    Ganz anders verhält sich GetData – also Power Query. Hier ist alles Case Sensitive. Nehmen wir eine Tabelle mit zwei Spalten in denen jeweils ein Ort angegeben ist. In Power Query legen wir eine dritte Spalte an – eine benutzerdefinierte Spalte. Die Spalte soll aussagen, ob Spalte A und Spalte B inhaltlich identisch sind:

    image

    De Abbildung zeigt: Die Inhalte sind nicht identisch. Möchte man hier einen Vergleich machen, muss man die Texte mit Text.Upper() oder Text.Lower() normalisieren und dann das Ergebnis vergleichen.

    Welche Artikel sind es denn?

    Zurück zu dem Fall bei unserem Kunden: Leider hatten wir noch keinen Verdacht geschöpft. Daher haben wir uns in Power BI erstmal eine Pivot-Tabelle erzeugt, die für die Tabelle Artikel pro Artikelnummer die Anzahl Artikelnummern darstellt. Und dann haben wir nach Anzahl > 1 gefiltert. Gleichzeitig haben wir eine Tabelle mit den Daten der Artikelnummern erzeugt. Über die Crossfilter Funktion haben wir uns angesehen, was in den Daten drin steht:

    image

    Wie konnte das sein? Durch die vorherigen Informationen ist es Ihnen vermutlich schon klar: Die Artikel lagen in verschiedenen Groß-/Kleinschreibungen vor. DAX sieht beide Werte als gleich an und aggregiert diese sowohl in der Tabellen- als auch in der Pivot-Darstellung. Nur durch die gezielte Suche nach den Artikelnummern in der Excel-Datei mit den Artikelnummern haben wir es dann gesehen.

    Warum Gruppieren und Dubletten entfernen nicht erfolgreich war

    Power Query ist Case Sensititve. Das gilt für jede Art Vergleich. Beim Gruppieren werden gleiche Daten zu einer Gruppe zusammengefasst. GLEICHE Daten! Beim Dubletten entfernen werden gleiche Werte gelöscht. GLEICHE Werte!

    Abhilfe

    Na ja, schauen Sie dass die Ausgangsdaten korrekt sind Winking smile Ansonsten:

    • Transformieren Sie die Artikelnummer mit Text.Upper() und gruppieren dann – oder entfernen dann Dubletten
    • Manche Funktionen in Power Query bieten die Angabe eines Comparer in den Formeln. Dort kann man explizit Case Insensitive einstellen. Das führt für diesen Artikel aber zu weit.
    Kategorien: Artikel, Grundlagen, Power BI, Power Pivot, Power Query
    Holger Gubbels

    Holger Gubbels ist Spezialist für alles, was mit Business Intelligence zu tun hat. Der Diplom-Informatiker strukturiert und löst als Data Scientist und Berater der mogular GmbH tagtäglich komplexe Problemstellungen rund um die Datenanalyse. Als Dozent der Hochschule für Technik Stuttgart ist er ein ausgewiesener Experte seines Fachs und gewohnt, Inhalte einfach zu erläutern. Genau das macht er auch hier in seinen Beiträgen für das PowerPivotInsights Blog. Zusätzlich ist er Autor für die Computerwoche und den Springer-Verlag. Sie erreichen ihn unter hg@mogular.com

    Antwort schreiben

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