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 ab­so­lu­te An­zahl der Spal­ten ein­er Ab­fra­ge fest­gelegt wer­den soll. Sie wer­den mir ge­wiss Recht ge­ben, dass zäh­len per Hand nicht die ide­ale Lö­sung ist, denn bei ein­er grö­ße­ren An­zahl von Spal­ten ist das wirk­lich nicht der Hit und bei der näch­sten Aktu­al­isierung der Ab­fra­ge kann sich die­ser Wert auch verän­dert ha­ben. Ich bin auf die­ses Erforder­nis ge­sto­ßen, als in ei­nem Fo­rum fol­gende (ver­kürzt dar­ge­stell­te) Auf­gabe ge­schil­dert wur­de:

In ein­er beliebi­gen An­zahl von Spal­ten sind je Zel­le ein (1) oder meh­re­re Be­grif­fe einge­tra­gen. Für jede Zei­le soll nun berech­net wer­den, wel­che Be­grif­fe in jed­er Spal­te einge­tra­gen sind.

Durch Ent­piv­otieren und zäh­len der Zei­len mit den unter­schiedlichen Wer­ten der Zel­len kon­nte ich dann fil­tern, wel­che Schlüs­sel­be­griffe ex­akt so oft vorka­men wie die An­zahl der Spal­ten war. Es gibt aber auch noch di­ver­se an­de­re Gele­gen­heit­en, wo die An­zahl der Spal­ten ein­er Ab­fra­ge ein sin­nvoller, wich­ti­ger oder erforder­lich­er Wert ist.

Auf der Su­che nach ein­er M-Funk­tion bin ich dann auch fün­dig gewor­den. Aber im ers­ten An­lauf hat­te ich wohl ei­nen Kno­ten in den Gehirn­win­dun­gen, denn die Beschrei­bung in der MS-Hil­fe ist aus mein­er Sicht entsch­ieden zu Co­der-las­tig und fern jed­er Prax­is. Dar­um such­te ich auch ei­nen an­de­ren Weg, die Spal­tenzahl fest­zu­stel­len und in eine ei­ge­ne Ab­fra­ge bzw. Lis­te zu schrei­ben, um bei pas­sen­der Gele­gen­heit dar­auf zu­grei­fen zu kön­nen. Und ja, im An­schluss kommt dann noch ein Bei­spiel für die M-Funk­tion, welch­es auch für „Nor­mal”-Pro­gram­mie­rer/Co­der ver­ständlich ist.

▲ nach oben …

Mög­lich­keit 1: Ei­gent­lich ganz lo­gisch 😉

Wenn Sie möcht­en, la­den Sie die­se Ta­bel­le als Mus­ter her­un­ter. Die Dat­en der Bäck­erei Klein­brot wer­den auch in an­de­ren Übun­gen die­ses Blogs ver­wen­det, sind halb­wegs neu­tral und um­fas­sen mehr als die mehr als „spär­lichen” 3 Spal­ten der Bun­destags-Dateien. Im­por­tie­ren Sie den Bere­ich A4:I17 in den Pow­er Que­ry-Edi­tor.

Okay, Spal­te I ist die let­zte und so­mit sind es nach Adam Rie­se 9 Spal­ten. Aber die Vere­in­barung (und der ei­gent­li­che Sinn die­ses Bei­tra­ges): Pow­er Que­ry soll die Zahl der Spal­ten berech­nen. Und natür­lich so, dass PQ die­sen Wert in irgen­dein­er Form weit­er ver­wen­den kann, ohne dass ein Nut­zer die­sen (gele­se­nen) Wert von Hand ein­gibt. Also…

  • Die Dat­en sind in die Que­ry im­por­tiert.
  • Er­stel­len Sie ein Dup­likat der Ab­fra­ge, da­mit die Ursprungs­dat­en im Orig­i­nal erhal­ten blei­ben.
  • Wech­seln Sie zum Reg­is­ter Trans­formieren. Noch hat die Ab­fra­ge 13 Zei­len.
  • Klick­en Sie auf Ver­tauschen. Jet­zt hat die Ab­fra­ge 9 Zei­len, wel­che ja auch das kor­rek­te Wun­schergeb­nis wider­spiegeln.
  • Sta­tis­tiken | Wer­te zäh­len und PQ gener­iert aus der Ab­fra­ge eine Lis­te, wel­che auss­chließlich den Wert 9 ent­hält.
  • Benen­nen Sie zweck­mäßiger­weise die­se Lis­te von Ta­bel­le1 (2) um zu AnzahlSpal­ten.
  • Die­se Lis­te wird nicht in eine Ta­bel­le kon­vertiert!
  • Ide­al­er­weise im lin­ken Seit­en­fen­ster AnzahlSpal­ten mar­kie­ren und Schlie­ßen & la­den in… und im Dia­log Nur Ve­bin­dung er­stel­len wäh­len. Den­ken Sie spä­ter dar­an, dass auch die Ab­fra­ge Ta­bel­le1 als Nur Ver­bin­dung gespe­ichert ist und Sie bei Be­darf die Spe­icher­art än­dern.¿ 

Auf die­se Lis­te, ge­nau­er ge­sagt auf den einzi­gen Wert der Lis­te kön­nen Sie dann von jed­er Posi­tion inner­halb die­ser Map­pe von PQ aus zu­grei­fen. Das Ziel ist erre­icht. Und ja, es gibt in die­sem Rah­men noch weit­ere Wege. Beispiel­sweise ei­nen In­dex mit Start­wert 1 er­stel­len und das Max­i­mum berech­nen. Aber wozu der­ar­tige Um­we­ge, wenn es doch den eben disku­tierten ziem­lich direk­ten Weg gibt?

Mög­lich­keit 2: Die M-Funk­ti­on

Wie schon zu Be­ginn die­ses Ar­ti­kels ange­merkt bie­tet die Spra­che M auch eine de­fi­nier­te Funk­tion an, um die An­zahl der Spal­ten ein­er Ab­fra­ge zu berech­nen:
Ta­ble.Co­lum­n­Count()
Se­hen Sie sich ger­ne ein­mal die Microsoft-Hil­fe und ins­beson­dere das Bei­spiel dazu an. Ich mei­ne: Hil­fre­ich ist et­was an­de­res, mit Aus­nahme der ei­gent­li­chen Para­me­ter-Dar­legung

Table.ColumnCount(table as table) as number

In der Prax­is er­stel­le ich natür­lich nicht zu­erst eine Ta­bel­le 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 die­se dann mit der entsprechen­den Funk­tion die Spal­tenzahl auszuw­erten. Im richti­gen Le­ben habe ich eine Ab­fra­ge-Ta­bel­le fix und fer­tig vor­liegen und will die­se dann ent­spre­chend berech­nen. Und die­se Ab­fra­ge soll­te auch wie­der die Bäck­erei Klein­brot sein. Und wenn Sie es sich et­was leich­ter ma­chen wol­len, dann nut­zen Sie eine kom­plett neue Map­pe mit den Bäck­erei-Dat­en und im­por­tie­ren dann die Ta­bel­le in den Pow­er Que­ry-Edi­tor. Das ist für noch nicht so ge­üb­te PQ-User ge­wiss et­was über­sichtlich­er. 😉 So star­ten Sie wie­der mit ge­nau 1 Ab­fra­ge. Und die ist (natür­lich) noch nicht trans­po­niert, son­dern im ur­sprüng­li­chen Zus­tand.

Um inner­halb Pow­er Que­ry eine neue Ab­fra­ge zu er­stel­len ge­hen Sie den Weg über Start, Neue Quel­le | An­de­re Quel­len | Lee­re Ab­fra­ge. In die Ein­ga­be­zei­le (wo der Cur­sor blinkt) ge­ben Sie dann die­se Funk­tion ein:

=Table.ColumnCount(Tabelle1)

und entwed­er auf das Häk­chen links des Text­fel­des Klick­en, En­ter / Re­turn oder ein­fach nur in den frei­en Bere­ich unter­halb der Ein­ga­be­zei­le Klick­en.

Hin­weise:

  • Das füh­ren­de = muss hier mit ein­ge­ge­ben wer­den
  • Ob­wohl ei­gent­lich die Spal­ten (Plur­al) ge­zählt wer­den sol­len, ist das Code­wort Col­umn (Sin­gu­lar).
  • Dass die Groß- Klein­schrei­bung wich­tig ist (also case sen­si­tiv), soll­te Ih­nen geläu­fig sein.
  • Das Funk­tions-Argu­ment (hier: Ta­bel­le1) ist der Name der Ab­fra­ge, wel­che 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 ei­nem führen­den #-Zei­chen verse­hen und in einge­fasst wer­den, beispiel­sweise = Table.ColumnCount(#"Tabelle1 (2)").

Automa­tisch wur­de Ab­fra­ge1 in lin­ken Seit­en­fen­ster gener­iert und sicht­bar. Wie schon vor­her be­schrie­ben ge­ben Sie die­ser Lis­te ei­nen „sprechen­den” Na­men und ide­al­er­weise auch Schlie­ßen & la­den in… | Nur Ver­bin­dung, da­mit die­se Lis­te nicht in ei­nem geson­derten Blatt gespe­ichert wird.

▲ nach oben …

Hat Ih­nen der Bei­trag ge­fal­len?
Er­leich­tert die­ser Bei­trag Ihre Ar­beit?

Dann wür­de ich mich über ei­nen Bei­trag Ihrer­seits z.B.  2,50 € freu­en … (← 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.