Xtract: Mit Power Query berechnen(lassen), wieviele Spalten in einer Abfrage vorhanden sind (relevant ist die Anzahl der Überschriften). Hier werden 2 Wege aufgezeigt.
Wissensstand: Level 2 ⇒ Solides Basiswissen in Excel, etwas Erfahrung in PQ
Wie viele Spalten hat die Abfrage?
Es gibt durchaus Situationen, wo die absolute Anzahl der Spalten einer Abfrage festgelegt werden soll. Sie werden mir gewiss Recht geben, dass zählen per Hand nicht die ideale Lösung ist, denn bei einer größeren Anzahl von Spalten ist das wirklich nicht der Hit und bei der nächsten Aktualisierung der Abfrage kann sich dieser Wert auch verändert haben. Ich bin auf dieses Erfordernis gestoßen, als in einem Forum folgende (verkürzt dargestellte) Aufgabe geschildert wurde:
In einer beliebigen Anzahl von Spalten sind je Zelle ein (1) oder mehrere Begriffe eingetragen. Für jede Zeile soll nun berechnet werden, welche Begriffe in jeder Spalte eingetragen sind.
Durch Entpivotieren und zählen der Zeilen mit den unterschiedlichen Werten der Zellen konnte ich dann filtern, welche Schlüsselbegriffe exakt so oft vorkamen wie die Anzahl der Spalten war. Es gibt aber auch noch diverse andere Gelegenheiten, wo die Anzahl der Spalten einer Abfrage ein sinnvoller, wichtiger oder erforderlicher Wert ist.
Auf der Suche nach einer M-Funktion bin ich dann auch fündig geworden. Aber im ersten Anlauf hatte ich wohl einen Knoten in den Gehirnwindungen, denn die Beschreibung in der MS-Hilfe ist aus meiner Sicht entschieden zu Coder-lastig und fern jeder Praxis. Darum suchte ich auch einen anderen Weg, die Spaltenzahl festzustellen und in eine eigene Abfrage bzw. Liste zu schreiben, um bei passender Gelegenheit darauf zugreifen zu können. Und ja, im Anschluss kommt dann noch ein Beispiel für die M-Funktion, welches auch für „Normal”-Programmierer/Coder verständlich ist.
Möglichkeit 1: Eigentlich ganz logisch 😉
Wenn Sie möchten, laden Sie diese Tabelle als Muster herunter. Die Daten der Bäckerei Kleinbrot werden auch in anderen Übungen dieses Blogs verwendet, sind halbwegs neutral und umfassen mehr als die mehr als „spärlichen” 3 Spalten der Bundestags-Dateien. Importieren Sie den Bereich A4:I17 in den Power Query-Editor.
Okay, Spalte I ist die letzte und somit sind es nach Adam Riese 9 Spalten. Aber die Vereinbarung (und der eigentliche Sinn dieses Beitrages): Power Query soll die Zahl der Spalten berechnen. Und natürlich so, dass PQ diesen Wert in irgendeiner Form weiter verwenden kann, ohne dass ein Nutzer diesen (gelesenen) Wert von Hand eingibt. Also…
- Die Daten sind in die Query importiert.
- Erstellen Sie ein Duplikat der Abfrage, damit die Ursprungsdaten im Original erhalten bleiben.
- Wechseln Sie zum Register Transformieren. Noch hat die Abfrage 13 Zeilen.
- Klicken Sie auf Vertauschen. Jetzt hat die Abfrage 9 Zeilen, welche ja auch das korrekte Wunschergebnis widerspiegeln.
- Statistiken | Werte zählen und PQ generiert aus der Abfrage eine Liste, welche ausschließlich den Wert 9 enthält.
- Benennen Sie zweckmäßigerweise diese Liste von Tabelle1 (2) um zu AnzahlSpalten.
- Diese Liste wird nicht in eine Tabelle konvertiert!
- Idealerweise im linken Seitenfenster AnzahlSpalten markieren und Schließen & laden in… und im Dialog Nur Vebindung erstellen wählen. Denken Sie später daran, dass auch die Abfrage Tabelle1 als Nur Verbindung gespeichert ist und Sie bei Bedarf die Speicherart ändern.¿
Auf diese Liste, genauer gesagt auf den einzigen Wert der Liste können Sie dann von jeder Position innerhalb dieser Mappe von PQ aus zugreifen. Das Ziel ist erreicht. Und ja, es gibt in diesem Rahmen noch weitere Wege. Beispielsweise einen Index mit Startwert 1 erstellen und das Maximum berechnen. Aber wozu derartige Umwege, wenn es doch den eben diskutierten ziemlich direkten Weg gibt?
Möglichkeit 2: Die M-Funktion
Wie schon zu Beginn dieses Artikels angemerkt bietet die Sprache M auch eine definierte Funktion an, um die Anzahl der Spalten einer Abfrage zu berechnen:
Table.ColumnCount()
Sehen Sie sich gerne einmal die Microsoft-Hilfe und insbesondere das Beispiel dazu an. Ich meine: Hilfreich ist etwas anderes, mit Ausnahme der eigentlichen Parameter-Darlegung
Table.ColumnCount(table as table) as number
In der Praxis erstelle ich natürlich nicht zuerst eine Tabelle per
Table.ColumnCount( Table.FromRecords({ [CustomerID = 1, Name = "Bob", Phone = "123-4567"], [CustomerID = 2, Name = "Jim", Phone = "987-6543"], [CustomerID = 3, Name = "Paul", Phone = "543-7890"] }) )
um diese dann mit der entsprechenden Funktion die Spaltenzahl auszuwerten. Im richtigen Leben habe ich eine Abfrage-Tabelle fix und fertig vorliegen und will diese dann entsprechend berechnen. Und diese Abfrage sollte auch wieder die Bäckerei Kleinbrot sein. Und wenn Sie es sich etwas leichter machen wollen, dann nutzen Sie eine komplett neue Mappe mit den Bäckerei-Daten und importieren dann die Tabelle in den Power Query-Editor. Das ist für noch nicht so geübte PQ-User gewiss etwas übersichtlicher. 😉 So starten Sie wieder mit genau 1 Abfrage. Und die ist (natürlich) noch nicht transponiert, sondern im ursprünglichen Zustand.
Um innerhalb Power Query eine neue Abfrage zu erstellen gehen Sie den Weg über Start, Neue Quelle | Andere Quellen | Leere Abfrage. In die Eingabezeile (wo der Cursor blinkt) geben Sie dann diese Funktion ein:
=Table.ColumnCount(Tabelle1)
und entweder auf das Häkchen links des Textfeldes Klicken, Enter / Return oder einfach nur in den freien Bereich unterhalb der Eingabezeile Klicken.
Hinweise:
- Das führende = muss hier mit eingegeben werden
- Obwohl eigentlich die Spalten (Plural) gezählt werden sollen, ist das Codewort Column (Singular).
- Dass die Groß- Kleinschreibung wichtig ist (also case sensitiv), sollte Ihnen geläufig sein.
- Das Funktions-Argument (hier: Tabelle1) ist der Name der Abfrage, welche ausgewertet werden soll. Wenn dort Leerzeichen oder bestimmte Sonderzeichen enthalten sind, dann muss das Argument mit einem führenden #-Zeichen versehen und in ” eingefasst werden, beispielsweise
= Table.ColumnCount(#"Tabelle1 (2)")
.
Automatisch wurde Abfrage1 in linken Seitenfenster generiert und sichtbar. Wie schon vorher beschrieben geben Sie dieser Liste einen „sprechenden” Namen und idealerweise auch Schließen & laden in… | Nur Verbindung, damit diese Liste nicht in einem gesonderten Blatt gespeichert wird.
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,50 € freuen … (← Klick mich!)