Anzahl der Spalten in einer Abfrage

Xtract: Mit Pow­er Query berechnen(lassen), wieviele Spal­ten in ein­er Abfrage vorhan­den sind (rel­e­vant ist die Anzahl der Über­schriften). Hier wer­den 2 Wege aufgezeigt.

  Wis­sens­stand: Lev­el 2 ⇒ Solides Basiswis­sen in Excel, etwas Erfahrung in PQ   

Wie viele Spalten hat die Abfrage?

Es gibt dur­chaus Sit­u­a­tio­nen, wo die absolute Anzahl der Spal­ten ein­er Abfrage fest­gelegt wer­den soll. Sie wer­den mir gewiss Recht geben, dass zählen per Hand nicht die ide­ale Lösung ist, denn bei ein­er größeren Anzahl von Spal­ten ist das wirk­lich nicht der Hit und bei der näch­sten Aktu­al­isierung der Abfrage kann sich dieser Wert auch verän­dert haben. Ich bin auf dieses Erforder­nis gestoßen, als in einem Forum fol­gende (verkürzt dargestellte) Auf­gabe geschildert wurde:

In ein­er beliebi­gen Anzahl von Spal­ten sind je Zelle ein (1) oder mehrere Begriffe einge­tra­gen. Für jede Zeile soll nun berech­net wer­den, welche Begriffe in jed­er Spalte einge­tra­gen sind.

Durch Ent­piv­otieren und zählen der Zeilen mit den unter­schiedlichen Werten der Zellen kon­nte ich dann fil­tern, welche Schlüs­sel­be­griffe exakt so oft vorka­men wie die Anzahl der Spal­ten war. Es gibt aber auch noch diverse andere Gele­gen­heit­en, wo die Anzahl der Spal­ten ein­er Abfrage ein sin­nvoller, wichtiger oder erforder­lich­er Wert ist.

Auf der Suche nach ein­er M-Funk­tion bin ich dann auch fündig gewor­den. Aber im ersten Anlauf hat­te ich wohl einen Knoten in den Gehirn­win­dun­gen, denn die Beschrei­bung in der MS-Hil­fe ist aus mein­er Sicht entsch­ieden zu Coder-lastig und fern jed­er Prax­is. Darum suchte ich auch einen anderen Weg, die Spal­tenzahl festzustellen und in eine eigene Abfrage bzw. Liste zu schreiben, um bei passender Gele­gen­heit darauf zugreifen zu kön­nen. Und ja, im Anschluss kommt dann noch ein Beispiel für die M-Funk­tion, welch­es auch für „Normal”-Programmierer/Coder ver­ständlich ist.

▲ nach oben …

Möglichkeit 1: Eigentlich ganz logisch 😉

Wenn Sie möcht­en, laden Sie diese Tabelle als Muster herunter. Die Dat­en der Bäck­erei Klein­brot wer­den auch in anderen Übun­gen dieses Blogs ver­wen­det, sind halb­wegs neu­tral und umfassen mehr als die mehr als „spär­lichen” 3 Spal­ten der Bun­destags-Dateien. Importieren Sie den Bere­ich A4:I17 in den Pow­er Query-Edi­tor.

Okay, Spalte I ist die let­zte und somit sind es nach Adam Riese 9 Spal­ten. Aber die Vere­in­barung (und der eigentliche Sinn dieses Beitrages): Pow­er Query soll die Zahl der Spal­ten berech­nen. Und natür­lich so, dass PQ diesen Wert in irgen­dein­er Form weit­er ver­wen­den kann, ohne dass ein Nutzer diesen (gele­se­nen) Wert von Hand ein­gibt. Also…

  • Die Dat­en sind in die Query importiert.
  • Erstellen Sie ein Dup­likat der Abfrage, damit die Ursprungs­dat­en im Orig­i­nal erhal­ten bleiben.
  • Wech­seln Sie zum Reg­is­ter Trans­formieren. Noch hat die Abfrage 13 Zeilen.
  • Klick­en Sie auf Ver­tauschen. Jet­zt hat die Abfrage 9 Zeilen, welche ja auch das kor­rek­te Wun­schergeb­nis wider­spiegeln.
  • Sta­tis­tiken | Werte zählen und PQ gener­iert aus der Abfrage eine Liste, welche auss­chließlich den Wert 9 enthält.
  • Benen­nen Sie zweck­mäßiger­weise diese Liste von Tabelle1 (2) um zu AnzahlSpal­ten.
  • Diese Liste wird nicht in eine Tabelle kon­vertiert!
  • Ide­al­er­weise im linken Seit­en­fen­ster AnzahlSpal­ten markieren und Schließen & laden in… und im Dia­log Nur Vebindung erstellen wählen. Denken Sie später daran, dass auch die Abfrage Tabelle1 als Nur Verbindung gespe­ichert ist und Sie bei Bedarf die Spe­icher­art ändern.¿ 

Auf diese Liste, genauer gesagt auf den einzi­gen Wert der Liste kön­nen Sie dann von jed­er Posi­tion inner­halb dieser Mappe von PQ aus zugreifen. Das Ziel ist erre­icht. Und ja, es gibt in diesem Rah­men noch weit­ere Wege. Beispiel­sweise einen Index mit Startwert 1 erstellen und das Max­i­mum berech­nen. Aber wozu der­ar­tige Umwege, wenn es doch den eben disku­tierten ziem­lich direk­ten Weg gibt?

Möglichkeit 2: Die M-Funktion

Wie schon zu Beginn dieses Artikels ange­merkt bietet die Sprache M auch eine definierte Funk­tion an, um die Anzahl der Spal­ten ein­er Abfrage zu berech­nen:
Table.ColumnCount()
Sehen Sie sich gerne ein­mal die Microsoft-Hil­fe und ins­beson­dere das Beispiel dazu an. Ich meine: Hil­fre­ich ist etwas anderes, mit Aus­nahme der eigentlichen Para­me­ter-Dar­legung

Table.ColumnCount(table as table) as number

In der Prax­is erstelle ich natür­lich 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 entsprechen­den Funk­tion die Spal­tenzahl auszuw­erten. Im richti­gen Leben habe ich eine Abfrage-Tabelle fix und fer­tig vor­liegen und will diese dann entsprechend berech­nen. Und diese Abfrage sollte auch wieder die Bäck­erei Klein­brot sein. Und wenn Sie es sich etwas leichter machen wollen, dann nutzen Sie eine kom­plett neue Mappe mit den Bäck­erei-Dat­en und importieren dann die Tabelle in den Pow­er Query-Edi­tor. Das ist für noch nicht so geübte PQ-User gewiss etwas über­sichtlich­er. 😉 So starten Sie wieder mit genau 1 Abfrage. Und die ist (natür­lich) noch nicht transponiert, son­dern im ursprünglichen Zus­tand.

Um inner­halb Pow­er Query eine neue Abfrage zu erstellen gehen Sie den Weg über Start, Neue Quelle | Andere Quellen | Leere Abfrage. In die Eingabezeile (wo der Cur­sor blinkt) geben Sie dann diese Funk­tion ein:

=Table.ColumnCount(Tabelle1)

und entwed­er auf das Häkchen links des Textfeldes Klick­en, Enter / Return oder ein­fach nur in den freien Bere­ich unter­halb der Eingabezeile Klick­en.

Hin­weise:

  • Das führende = muss hier mit eingegeben wer­den
  • Obwohl eigentlich die Spalten (Plur­al) gezählt wer­den sollen, ist das Code­wort Col­umn (Sin­gu­lar).
  • Dass die Groß- Klein­schrei­bung wichtig ist (also case sen­si­tiv), sollte Ihnen geläu­fig sein.
  • Das Funk­tions-Argu­ment (hier: Tabelle1) ist der Name der Abfrage, welche aus­gew­ertet wer­den soll. Wenn dort Leerze­ichen oder bes­timmte Son­derze­ichen enthal­ten sind, dann muss das Argu­ment mit einem führen­den #-Zeichen verse­hen und in einge­fasst wer­den, beispiel­sweise = Table.ColumnCount(#"Tabelle1 (2)").

Automa­tisch wurde Abfrage1 in linken Seit­en­fen­ster gener­iert und sicht­bar. Wie schon vorher beschrieben geben Sie dieser Liste einen „sprechen­den” Namen und ide­al­er­weise auch Schließen & laden in… | Nur Verbindung, damit diese Liste nicht in einem geson­derten Blatt gespe­ichert wird.

▲ nach oben …

Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?

Dann würde ich mich über einen Beitrag Ihrer­seits z.B.  2,50 € freuen … (← Klick mich!)

Dieser Beitrag wurde unter Allgemein, Verschiedenes, Entpivotieren, Filtern & Sortieren, Power Query, PQ-Formeln (Sprache M), Spalten bearbeiten, Transponieren abgelegt und mit , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.