Table.RenameColumns Archive | THE SELF-SERVICE-BI BLOG Wir lieben Microsoft Power BI Thu, 22 Jun 2017 18:20:29 +0000 de hourly 1 https://wordpress.org/?v=6.7.2 https://ssbi-blog.de/wp-content/uploads/2019/10/Favicon-150x150.png Table.RenameColumns Archive | THE SELF-SERVICE-BI BLOG 32 32 Wie Du mit Power Query Tabellen mit unterschiedlich geschriebenen Überschriften anfügst https://ssbi-blog.de/blog/business-topics/wie-du-mit-power-query-tabellen-mit-unterschiedlich-geschriebenen-ueberschriften-anfuegst/ https://ssbi-blog.de/blog/business-topics/wie-du-mit-power-query-tabellen-mit-unterschiedlich-geschriebenen-ueberschriften-anfuegst/#comments Mon, 15 May 2017 14:26:03 +0000 http://ssbi-blog.de/?p=1582 Wenn man Tabellen in Power Query anfügen möchte, dann kann es vorkommen, dass alle Tabellen zwar dieselbe Struktur aufweisen, bei einigen Tabellen die Spaltenbeschriftungen jedoch Unterschiede in der Groß- und Kleinschreibung aufweisen. Da Power Query case sensitiv ist, also Groß- und Kleinschreibung beachtet, führt dies zu unerwünschten Ergebnissen. Ich zeige Dir im heutigen Beitrag, wie Du […]

Der Beitrag Wie Du mit Power Query Tabellen mit unterschiedlich geschriebenen Überschriften anfügst erschien zuerst auf THE SELF-SERVICE-BI BLOG.

]]>
Wenn man Tabellen in Power Query anfügen möchte, dann kann es vorkommen, dass alle Tabellen zwar dieselbe Struktur aufweisen, bei einigen Tabellen die Spaltenbeschriftungen jedoch Unterschiede in der Groß- und Kleinschreibung aufweisen. Da Power Query case sensitiv ist, also Groß- und Kleinschreibung beachtet, führt dies zu unerwünschten Ergebnissen. Ich zeige Dir im heutigen Beitrag, wie Du mit Power Query Tabellen mit unterschiedlich geschriebenen Überschriften anfügst.

Als Abonnent meines Newsletters erhältst Du die Beispieldateien zu den Beiträgen dazu. Hier geht’s zum geht’s zum Abonnement des Newsletters!

Groß- und Kleinschreibung beim Anfügen mit Power Query

Ich bin in meinen beiden letzten Beiträgen Unterschiedliche Datenstrukturen mittels Power Query anfügen und Anfügetabellen mit Power Query automatisch an die Strukturtabelle anpassen bereits auf gängige Problemstellungen beim Anfügen von Tabellen mit Power Query eingegangen. Eine wichtige Information bzgl. des Anfügens von Tabellen in Power Query war, dass Power Query diejenigen Spalten aneinander anfügt, die dieselbe Spaltenbezeichnung haben. Hierbei ist zu beachten, dass Power Query case sensitiv ist und somit zwischen Groß- und Kleinschreibung von Buchstaben unterscheidet. Die unterschiedlich geschriebenen Spalten führen dazu, dass sie als zwei unterschiedliche Spalten erkannt und nicht aneinander angefügt werden. Stattdessen wird für jede dieser (in diesem Falle) kleingeschriebenen Spalten eine neue Spalte in der Ergebnistabelle angefügt.

Anfügen mit Power Query
Unterschiedliche Groß- und Kleinschreibung von Spalten wird als neue Spalten interpretiert

Dies automatisiert und nachhaltig zu verändern, ist Gegenstand dieses Beitrags.

Die Idee: Alle Spaltenbezeichnungen der Anfügetabelle groß schreiben

Meine Strukturtabelle (auf dessen Bedeutung ich in meinen beiden vorherigen Beiträgen zu dieser Reihe detailliert eingegangen bin) hat ausschließlich Großbuchstaben als Spaltenbezeichnung. Wenn die Kleinschreibung einer Spaltenbezeichnung der Anfügetabelle dazu führt, dass sie als neue Spalte interpretiert wird, liegt die Idee nahe, einfach alle Spalten der Anfügetabellen vor dem Anfügeprozess in Großbuchstaben umzuwandeln.

Dies würde für meinen gegenwärtigen Fall zur gewünschten Struktur der Ergebnistabelle führen. Ich möchte die Großschreibung aller Spalten einer Anfügetabelle jedoch nicht manuell vornehmen. Stattdessen möchte ich die Großschreibung aller Spaltenüberschriften automatisieren und auf etwaige Veränderungen der Anfügetabelle vorbereiten.

Spaltenüberschriften automatisiert umbenennen

Um den Umbenennungsprozess zu automatisieren schaue ich mir zunächst an, was Power Query intern eigentlich macht, wenn ich eine Spalte manuell umbenenne.

Manuelles Umbenennen von Spaltenbezeichnungen mit Table.RenameColumns()
Manuelles Umbenennen von Spaltenbezeichnungen mit Table.RenameColumns()

Klicke ich doppelt in den Spaltenkopf der Spalte „b“ und benenne diese in „B“ um, so erzeugt Power Query einen neuen Schritt („Umbenannte Spalten“). Dieser Schritt beinhaltet die Funktion Table.RenameColumns (hier geht’s zur Online-Dokumentation von Table.RenameColumns). Diese Funktion hat zwei Parameter:

  1. Tabelle als Tabelle: Im ersten Parameter wird der Funktion mitgegeben, auf Basis welcher Tabelle Umbenennungen von Spalten vorgenommen werden sollen. In meinem Falle ist dies die Tabelle „Geänderter Typ“, also der zweite meiner angewendeten Schritte in dieser Abfrage. Schritte in Power Query geben zumeist (nicht immer!!) Tabellen zurück, so dass ein Schritt als Tabellenangabe genutzt werden kann.
  2. Umbenennung als Listen: Dieser Parameter ist vom Typ List (engl. für Liste) und wendet die Umbenennung im Format {alt, neu} an. In meinem Beispiel bedeutet {{„b“, „B“}}, dass „b“ in „B“ umbenannt wird. Auf das Konzept der Listen gehe ich später detaillierter ein.

Da ich nicht alle Spaltenbezeichnungen manuell per Doppelklick umbenennen möchte, suche ich nach einer Möglichkeit mir dynamisch eine Liste von groß geschriebenen Spaltenbezeichnungen zu erzeugen, um sie als zweiten Parameter in der Funktion Table.RenameColumns() zu benutzen.

So erzeugst Du eine dynamische Liste gewünschter Spaltenbezeichnungen

Wie eben beschrieben möchte ich den zweiten Parameter der Funktion Table.RenameColumns() gerne dynamisch ermitteln und nicht jedes Mal durch einen Doppelklick auf die entsprechende Spalte manuell erzeugen müssen. Wie dies funktioniert, erläutere ich in den nächsten Schritten.

Die Anfügetabelle erneut in Power Query importieren

Um mir eine dynamische Liste für die gewünschten Überschriftenbezeichnungen zu erzeugen, importiere ich die Anfügetabelle erneut in Power Query.

Die Anfügetabelle erneut für die Übersetzungsliste importieren
Die Anfügetabelle erneut für die Übersetzungsliste importieren

Ich nenne diese Abfrage Uebersetzungsliste. Nun lasse ich mir im nächsten Schritt die Überschriften der Abfrage als Liste zurückgeben.

Eine Liste mit den Namen der Spaltenbezeichnungen erstellen

Um die Überschriften der Tabelle in eine Liste einzulesen, nutze ich die Funktion Table.ColumnNames(). Die folgende Animation zeigt wie.

Mit Table.ColumnNames erstelle ich eine Liste von Spaltenbezeichnungen
Mit Table.ColumnNames erstelle ich eine Liste von Spaltenbezeichnungen

Das Ergebnis der Funktion Table.ColumnNames() ist eine Liste (und keine Tabelle). Da wird an die eine existierende Spalte zwei weitere Spalten anfügen wollen und dies mit einer Liste nicht funktioniert, muss ich diese Liste zunächst in eine Tabelle konvertieren.

Eine Liste in eine Tabelle konvertieren
Eine Liste in eine Tabelle konvertieren

Da ich nun eine Tabelle mit den Ist-Spaltenbezeichnungen vorliegen habe, kann ich jetzt eine weitere Spalte hinzufügen, die die gewünschten Spaltenbezeichnungen enthalten wird.

Eine Spalte mit gewünschten Spaltenbezeichnungen hinzufügen

Ich benenne die bestehende Spalte Column1 zuerst um in alt. Danach erzeuge ich eine neue Spalte mit der Bezeichnung neu. Der Inhalt der neuen Spalte wird durch die Formel Text.Upper([alt]) bestimmt. Diese wandelt den Inhalt der Spalte alt um in Großbuchstaben. Den Ablauf zeigt folgende Abbildung im Detail.

Mit der Funktion Text.Upper() eine Spalte mit Großbuchstaben erzeugen
Mit der Funktion Text.Upper() eine Spalte mit Großbuchstaben erzeugen

Das Ziel ist immer noch eine Liste mit der Übersetzung der Ist-Spaltenbezeichnung zur Soll-Spaltenbezeichnung. Hierfür erzeuge ich nun eine dritte Spalte, die beide Informationen in sich vereint.

Eine weitere Spalte erzeugen, die Ist- und Soll-Spaltenbezeichnung enthält

Um an die oben erwähnte Funktion Table.RenameColumns eine Übersetzungsliste übergeben zu können, muss ich zunächst eine Spalte hinzufügen, die sowohl die Ist- als auch die Soll-Spaltenbezeichnung beinhaltet. Die folgende Animation zeigt, wie ich das mache.

Zeilenweise Erstellung von Listen für die Übersetzung von alt zu neu
Zeilenweise Erstellung von Listen für die Übersetzung von alt zu neu

Mit dieser neuen Spalte habe ich pro Zeile die alte und die neue Spaltenbezeichnung in Listenform errstellt. In jeder Zelle der Spalte Uebersetzung befindet sich eine Liste. Um jedoch diese komplette Abfrage als Parameter in der Funktion Table.RenameColumns nutzen zu können, muss ich aus der kompletten Abfrage Uebersetzungsliste eine Liste machen. Damit erzeuge ich dann eine Liste von Listen (ich weiß, das ist nicht ganz trivial). Dies geschieht wie folgt.

Erzeugung einer Liste von Listen für die Übersetzung der Spaltenbezeichnungen
Erzeugung einer Liste von Listen für die Übersetzung der Spaltenbezeichnungen

Indem ich einen neuen Schritt einfüge und den Namen der gewünschten Spalte (Uebersetzung) in eckigen Klammern dahinter setze, entsteht eine neue Liste. Da ich bereits in jeder Zelle der Spalte Uebersetzung je eine Liste hatte, habe ich nun also eine Liste von Listen. Dies ist im Wesentlichen durch zwei Merkmale offensichtlich:

  1. Nach der Bestätigung der Formel mit Enter werden alle anderen Spalten entfernt und die Spaltenbezeichnung wechselt von Uebersetzung auf List.
  2. Wie in der folgenden Abbildung ersichtlich ist, wechselt auch das Icon im Abfragenfenster von Tabelle auf Liste.
Listen erkennt man am Icon
So erkennt man Listen

Damit bin ich soweit, dass ich die erstellte Liste nutzen kann, um in meiner Anfügetabelle die Umbenennung der Spaltenbezeichnungen dynamisch vorzunehmen.

Die erstellte Übersetzungsliste zum Umbenennen der Spaltenbezeichnungen nutzen

Nochmal kurz zur Erinnerung. Ich habe diese Liste zu einem einzigen Zweck erstellt. Sie soll als zweiter Parameter in der Funktion Table.RenameColumns() die Übersetzung von alter Spaltenbezeichnung zur neuen Spaltenbezeichnung übernehmen.

HIer soll die dynamische Übersetzungsliste greifen
Hier soll die dynamische Übersetzungsliste greifen

Ich setze also an die Stelle des rot markierten Bereiches nun den Namen meiner erstellten Liste Uebersetzungsliste.

Die Übersetzung der Spaltenbezeichnungen durch die Nutzung der dynamischen Liste
Die Übersetzung der Spaltenbezeichnungen durch die Nutzung der dynamischen Liste

Das Ergebnis ist wie gewünscht. Die beiden Spalten b und d wurden in B und D umbenannt. Sofern also ein Anfügen an die Strukturtabelle bisher an der Groß- und Kleinschreibung der Spaltenbezeichnungen in den Anfügetabellen gehapert haben sollte, kann ich dies nun für die Zukunft ausschließen. Da die Uebersetzungsliste auf derselben Datenbasis aufsetzt wie die Anfügetabelle, ist sichergstellt, dass bei einer Änderung der Anfügetabelle auch die Uebersetzungsliste aktuell bleibt. Was an dieser Stelle jedoch klar sein muss ist, dass dieses Verfahren bei mehreren Anfügetabellen auch mehrfach ausgeführt werden muss. Hier kann das Erstellen einer benutzerdefinierten Funktion Abhilfe schaffen. Doch das wird Bestandteil eines anderen Beitrags.

Bis zum nächsten Mal und denk dran: Sharing is caring. Wenn Dir der Beitrag gefallen hat, dann teile ihn gerne 🙂

Viele Grüße aus Hamburg,

Lars

Der Beitrag Wie Du mit Power Query Tabellen mit unterschiedlich geschriebenen Überschriften anfügst erschien zuerst auf THE SELF-SERVICE-BI BLOG.

]]>
https://ssbi-blog.de/blog/business-topics/wie-du-mit-power-query-tabellen-mit-unterschiedlich-geschriebenen-ueberschriften-anfuegst/feed/ 2