Xtract: Für diverse Werte (100%), welche unterschiedlichen Gruppen zugeordnet werden können, sollen je Gruppe die auf die Gesamtheit bezogenen Anteile per Power Query berechnet werden.
Wissensstand: Level 2 ⇒ Solides Basiswissen in Excel, etwas Erfahrung in PQ
In manchen Situationen ist es erforderlich, den prozentualen Anteil vom Total zu berechnen. Und Power Query kann die erste Wahl sein, wenn es sich um eine große Datenmenge handelt. Als Denkmodell bietet sich eine Liste verkaufter Produkte an, wo unterschiedliche Produktgruppen entsprechend bewertet bzw. berechnet werden sollen. Oder die Umsäte mehrer Verkäufer, die Maschinen-Auslastung in Zeit-Blöcken eines Tages, oder, oder, oder… Zugegeben, in diesem hier vorgestellten Fall ist eine Vorgehensweise in Plain Excel ausnahmsweise einmal deutlich einfacher, aber es geht in diesem Beitrag nun einmal um PQ. 😉
Für diese Übung begnüge ich mich mit etwas über 600 Datensätzen; laden Sie diese Datei mit den Abgeordneten des 18. Deutschen Bundestages (Stand: 04.06.2015) herunter. Es handelt sich um eine Text-Datei im csv-Format. Diese werden Sie über Daten | Aus Text/csv in Power Query importieren und die erste Daten-Zeile als Überschrift einrichten. Und dass die Daten in keiner Weise geordnet sind ist natürlich gewollt. 😉 Die vorzunehmende Auswertung soll den prozentuellen Anteil der jeweiligen Fraktionen enthalten, die „Ehemaligen”, welche durch einen angehängten Asterisk (*) gekennzeichnet sind, fließen nicht in die Berechnung ein.
Auch wenn es bei dieser relativ geringen Anzahl von Datensätzen zeitlich kaum merkbar sein wird, sollten Sie (aus prinzipiellen Erwägungen) die zu berechnenden Daten so „schlank“ wie möglich halten. Und da Sie ja ausschließlich die Fraktionszugehörigkeit auswerten werden, löschen Sie die beiden ersten Spalten. Anschließend filtern Sie die Daten dergestalt, dass nur die aktiven Fraktionsmitglieder beibehalten werden; das geht sehr schön über den Textfilter Endet nicht mit; natürlich können Sie auch von Hand die Häkchen bei den entsprechenden Einträgen in der Auflistung entfernen. Sie erinnern sich: Das angehängte Sternchen ist das Kennzeichen für nicht mehr aktive MdB (Mitglied des Bundestages).
Als nächstes machen Sie sich bewusst, mit welcher mathematischen Funktion/Formel Sie zum gewünschten Ergebnis kommen. Der wohl kürzeste Weg wäre gewiss Anzahl Fraktionsmitglieder / Anzahl aller (gefilterten) Datensätze. Und da PQ beim Filtern die nicht zu verwendenden Zeilen real entfernt und nicht versteckt (wie Plain Excel), können Sie die Anzahl aller Zeilen erfassen oder berechnen.
Aber … Was in Plain Excel prinzipiell mit einer Hilfsspalte und einem einzigen Mausklick auf das Summen-Symbol in der Menüleiste oder einer kurzen Formel erledigt werden kann ist in Power Query ausnahmsweise einiges (oder je nach Vorgehensweise auch deutlich) mehr an Aufwand. Ich zeige Ihnen hier zwei durchaus unterschiedliche Wege auf; beide führen zum korrekten Ergebnis, Sie können je nach Sympathie auswählen, wie Sie zum Ziel gelangen.
Vorschlag 1
Zugegeben, nicht für fortgeschrittene PQ-Experten gedacht (die würden sich langweilen oder spontan einen anderen Weg wählen), aber gestandene Einsteiger haben mit diesem Ablauf die Chance, PQ-Basics zu verstehen. Hier „Step by step” ein denkbarer Ablauf:
- Generieren Sie über Spalte hinzufügen | Benutzerdefinierte Spalte eine neue Spalte und tragen Sie in den Bereich für die Spaltenformel die Ziffer 1 ein.
- Die Überschrift Benutzerdefiniert kann so bleiben.
- Nach einem Klick auf OK erstellen Sie von dieser Query ein Duplikat, welches dann typischerweise den Namen Bundestagsmitglieder_unsortiert (2) bekommt.
- Bleiben Sie im Duplikat. Markieren Sie die Spalte Benutzerdefiniert, Gruppieren nach… (auf beliebigem Wege).
- Belassen Sie es bei den Vorgaben und bestätigen Sie sofort mit OK.
- Wechseln Sie zur ursprünglichen Abfrage Bundestagsmitglieder_unsortiert.
- Über das Menü Start | Abfragen zusammenführen wählen sie im Dialog beim einzeiligen Textfeld in der Mitte die gerade zuvor erstellte Abfrage Bundestagsmitglieder_unsortiert (2).
- Markieren Sie nun bei Bundestagsmitglieder_unsortiert und bei Bundestagsmitglieder_unsortiert (2) die Spalte Benutzerdefiniert.
- Schließen Sie den Dialog und erweitern dann die neu erstellte Spalte durch einen Klick auf den Doppelpfeil.
- Entfernen Sie in diesem Dialog alle Häkchen außer bei Anzahl.
- Aus prinzipiellen Erwägungen können Sie nun auch die mittlere Spalte Anzahl entfernen / löschen.
Nun ist zwar in jeder einzelnen Zeile auch die Gesamtzahl aller Abgeordneten vermerkt, aber das ist ja nur ein Hilfskonstrukt; Sie wollen ja für jede einzelne Fraktion den prozentualen Anteil berechnen. Also …
- Markieren Sie dazu die Spalte Fraktion und beispielsweise über einen Rechtsklick Gruppieren nach…
- Die Vorgabe ist ja bei Neuer Spaltenname bereits Anzahl und bei Vorgang ist es Zeilen zählen. Das passt, darum gleich OK.
- Das Ergebnis stimmt zwar irgendwie, ist aber gewiss keineswegs das, was Sie erwartet haben. Also öffnen Sie noch einmal per Doppelklick im rechten Seitenfenster den letzten Schritt Gruppierte Zeilen.
- Markieren Sie im oberen Bereich statt des Optionsfeldes Standard die Auswahl Weitere.
- Ein Klick auf die untere Schaltfläche Aggregation hinzufügen sorgt dafür, dass in der Spalte Neuer Spaltenname eine weitere, freie Zeile erscheint.
- Als Neuer Spaltenname geben Sie beispielsweise Gesamt-Summe ein, bei Vorgang Min oder Max und bei Spalte wählen Sie Anzahl.1 .
- Nun liegen beide erforderlichen Werte für die Berechnung der prozentualen Anteile vor. Über Spalte hinzufügen | Benutzerdefinierte Spalte geben Sie im Dialog bei Neuer Spaltenname beispielsweise Prozent-Anteil ein und als Benutzerdefinierte Spaltenformel nach dem = im rechten Seitenfenster bei Verfügbar Spalten ein Doppelklick auf Anzahl, dann den Schrägstrich / und letztendlich ein Doppelklick auf Gesamt-Summe.
- Die Spalten Anzahl und Gesamt-Summe können Sie nun löschen. Der Optik wegen werden Sie nun eventuell die Spalte Prozent-Anteil auch als Datentyp: Prozentsatz formatieren.
Zugegeben, das ist insgesamt ziemlich umständlich. Auch für Power Query. Der einzige Vorteil den ich in einem solchen Ablauf sehe ist: Die meisten Vorgehensweisen werden sie als jemand, der/die eine gewisse Basis-Erfahrung mit PQ hat, bereits kennen. Und dadurch werden Sie gewiss auch verstehen, was da wann passiert. Wenn Sie experimentierfreudig sind oder einfach einmal einen „eleganteren” Weg gehen wollen, dann wird Ihnen der nächste Vorschlag deutlich besser gefallen. 🙂
Vorschlag 2
Die Ausgangslage ist entweder direkt nach dem Import der Daten und der Anpassung der Überschriften (also mit allen drei Spalten) oder aber nach dem Entfernen der beiden ersten Spalten. Der Zeitunterschied bei beiden Vorgehensweisen dürfte im Endeffekt nicht spürbar, nur messbar sein. Wenn Sie wollen können Sie bereits jetzt die ehemaligen Fraktionsmitglieder filtern, es geht aber auch sehr schön in einem der nächsten Schritte.
Rechtsklick in die Überschrift Fraktion und Gruppieren nach… und auch sofort mit OK bestätigen. An dieser Stelle müssen Sie sich entscheiden, ob sie die Ehemaligen mit berücksichtigen wollen oder nicht. Bei „Nein” einfach per Filter löschen, ansonsten müssten Sie die Abfrage duplizieren und dafür sorgen, dass in der einen Query nur die aktuellen und in der zweiten Abfrage nur die ehemaligen MdB aufgeführt sind. Bedenken Sie aber, dass die Aussagekraft der Zahlen für nicht mehr dem Bundestag zugehörende Personen kaum relevant ist, denn oft sind Krankheit oder auch Tod der Grund dafür, dass ein Abgeordneter das Amt nicht mehr hat. – Die folgenden Arbeitsschritte setzen voraus, dass nur die „aktiven” MdB in der Query enthalten sind.
Um die Gesamtsumme zu berechnen ein Rechtsklick auf Anzahl und die unterste Auswahl im Kontextmenü Als neue Abfrage hinzufügen nutzen. Power Query erstellt automatisch eine neue Abfrage, wo unter der Überschrift Liste ausschließlich die jeweils per Gruppierung berechnete Anzahl der Fraktionsmitglieder aufgeführt ist. Da es sich hierbei (wie der Name der Überschrift schon aufzeigt und auch am Symbol links des Abfrage-Namens im linken Seitenfenster erkennbar) um eine Liste handelt haben Sie auch die Möglichkeit, die auf Spalten bezogenen statistischen Funktionen zu nutzen. Ein Klick auf die Schaltfläche Statistiken und der erste Eintrag Summe passt schon. Der Deutlichkeit wegen ändere ich nun den Namen diese Abfrage auf MdB_Total. Und ich verwende den Unterstrich statt eines Leerzeichens, weil ich mir so beim Bezug auf den Inhalt dieser Abfrage etwas Schreibarbeit erspare; so gebe ich nur den Namen ein, wenn ein Leerzeichen enthalten wäre müsste ich #"MdB Total"
eingeben. Jetzt enthält diese Abfrage, die übrigens links des Namens das Symbol 123 hat, in der einzigen Zeile den Wert 631.
Wechsel zur ursprünglichen Abfrage. Spalte hinzufügen | Benutzerdefinierte Spalte und tragen Sie bei Neuer Spaltenname beispielsweise Prozentualer Anteil ein und als Benutzerdefinierte Spaltenformel entweder [Anzahl]/#"MdB Total"
oder [Anzahl]/MdB_Total. Und ach ja, den Namen der Liste können Sie nicht per Klick übernehmen, den geben Sie in korrekter Groß- Kleinschreibung per Hand ein. Und das korrekte Ergebnis steht sofort in der neuen Spalte. 😎 Auch in diesem Fall können Sie natürlich die Formatierung/den Datentyp noch auf Prozentsatz anpassen.
Es wird sie nicht verwundern wenn sie erfahren, dass ich ausschließlich diesen zweiten Weg anwende. Weil ich verstehe, warum ich den kleinen Umweg über das Erstellen der Liste gehen muss um die Funktion List.Sum anzuwenden, ist mir diese Vorgehensweise wesentlich sympathischer. Und im Gegensatz zum ersten Vorschlag ist das auch kein Umweg, eher eine deutliche Verkürzung. – Wobei ich Sie darauf hinweisen möchte dass ich es hasse, fertige Lösung per copy/paste zu übernehmen, wenn ich den Hintergrund, den Ablauf nicht verstehe; mit hoher Sicherheit wird es irgendwann einmal zu einem Fehler kommen und ich weiß dann nicht, woran es liegt und wie ich den Missstand korrigieren kann.
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits z.B. 2,00 € freuen … (← Klick mich!)