Zu Weihnachten, für Sie – Christmas special
Dieses ist eine kleines Weihnachtsgeschenk für Sie, liebe Leserin, lieber Leser, die Sie mir vielleicht schon geraume Zeit treu geblieben sind. Eigentlich ist der Umfang dieses Beitrags und auch die Detailtreue außerhalb dessen, was Ihnen im frei zugänglichen Blog, der ja kostenfrei ist, angeboten wird. Aber viel kürzer wäre für dieses komplexe Thema gewiss nicht angemessen gewesen. Und anlässlich des Festes, wo es ja bekanntlich Geschenke gibt, stelle ich diesen Beitrag in freien Bereich ein.
Also, ein frohes Weihnachts-Fest 2018!
Günther Mumme
Wann kann welche Mitarbeiter in einem definierten Zeitraum eingesetzt werden?
Ganz zu Beginn ist es mir ein außerordentliches Bedürfnis in den zu sagen, dass die als Muster erstellte Liste keineswegs dem entspricht, was allgemein als wünschenswert bezeichnet werden kann. Mehrere Überschrift-Zeilen sollten nicht sein; und wenn schon, dann bitte mit einer Leerzeile (die auch ausgeblendet sein kann) getrennt. Dadurch wird Excel stets den Bereich der eigentlichen Tabelle korrekt erkennen.
Als nächster Kritikpunkt der Aufbau als Kreuztabelle. Für die die Optik, die Übersicht gewiss recht gut, für eine Auswertung mit beispielsweise einer PivotTable in keiner Weise geeignet. Die Zeitbereiche mit einem Bindestrich getrennt in eine einzige Zelle einzugeben kann ich nur als obsolet bezeichnen. So ist eine Auswertung nicht machbar.
Und last but not least: Die von mir in der herunterzuladenden Mustertabelle gelb markierten kalendarischen Daten stören vielleicht die sonst einheitliche Optik (auch ohne die Markierung), Excel macht es nichts aus, dass die Jahreszahl normalerweise 2‑stellig ist und in diesen Fällen 4‑stellig. Dass es noch einen weiteren „Fehlgriff” in den kalendarischen Daten gibt, werden Sie im Laufe der Bearbeitung der Daten erkennen.Und dass das nicht nur bei den 1‑Tag-Zeiträumen der Fall ist, werden Sie auch erkennen.
Da solch ein Aufbau aber nun einmal tägliche Praxis ist muss ein Weg gefunden werden, diese Daten so aufzubereiten, dass sie auch mit einer PivotTable ausgewertet werden können. Im Endeffekt soll ein Zeitraum ausgewählt oder bestimmt werden und als Ergebnis zeigt Excel dann (nur) die Namen jener Mitarbeiter, die an den Tagen zur Verfügung stehen.
Einlesen der Daten
Laden Sie zu Beginn diese Mustervorlage von unserem Server herunter. Idealerweise werden sie nun die Zelle A2 markieren, StrgShiftEnde und den markierten Bereich dann als Liste/Tabelle formatieren. Und die Tabelle hat (natürlich) Überschriften. Ich erledige die Formatierung normalerweise per StrgL oder StrgT. Anschließend vergebe ich gleich noch einen „sprechenden” Tabellennamen, beispielsweise Einsatzplanung (statt Tabelle1).
Eine beliebige Zelle in der Tabelle/Liste ist markiert. Über Register Daten | Aus Tabelle bzw. in älteren Versionen über Power Query | Von Tabelle importiere ich die Daten in den Power Query-Editor. Die Daten stellen sich so dar:
Zu einer Liste transponieren
Der gewiss einfachste Weg besteht nun darin, im 1. Schritt eine ganz normale 3‑spaltige Liste aus den Daten zu erstellen. Diese sollen dann die Spalten mit den Namen, dem Monat und dem Datumsbereich sein. Dazu markieren Sie erforderlichenfalls die Spalte Name, Rechtsklick in die Überschrift und dann Andere Spalten entpivotieren. Wenn Sie die zweite der Überschriften per Doppelklick oder F2 auf Monat ändern, wird sich das so darstellen:
Sie erkennen, dass in den meisten Fällen der Datums-Bereich in der Spalte Wert steht, vereinzelt ein reines Datum (mit einer automatisch zugefügten Uhrzeit 0:00). Markieren Sie nun die Spalte Wert durch Klick in die Überschrift, Spalte teilen | Nach Trennzeichen und akzeptieren Sie die Vorgabe des Trennzeichens - sowie Bei jedem Vorkommen des Trennzeichens.
Nach einem OK werden Sie feststellen, dass da irgendetwas doch anders gelaufen ist, als es sein sollte. Ganz deutlich wird das in der Zeile 19, wo bei Dominik in doppelt so vielen, also in 4 Spalten Werte stehen. Und beim genauen Hinsehen werden Sie erkennen, dass das Datum in 3 Spalten für Tag, Monat, Jahr aufgeteilt worden ist und nicht in 1 Zelle steht. In der vierten Spalte allerdings ist hier alles so, wie es vorgesehen ist.
Sie könnten nun alle 56 Zeilen einzelnen überprüfen, ob in Spalte Wert.3 etwas anderes steht als null. Bei deutlich mehr Datensätzen würde das aber sehr schnell in Arbeit ausarten. 🙄 Ich mache das darum so:
- Spaltenüberschrift Wert.3 durch Klick auf erweitern
- Zahlenfilter | Nicht gleich…
- Neben Entspricht nicht in das Textfeld den Text null eingeben und mit OK bestätigen.
- Ich merke oder notiere mir nun den Wert aus den Spalten Name und Monat, also Dominik | Jan und Dominik | Aug.
Hinweis: So verführerisch wie es sein mag, nach dem erweitern der Überschrift das Häkchen bei (NULL) zu entfernen, das kann dann schief gehen, wenn nach Aktualisierung der Daten außer der 19 (Kurzform der Jahreszahl) noch weitere Zahlenwerte oder vielleicht auch Texte in der Spalte stehen. So wie ich es abgearbeitet habe ist gewährleistet, dass alle Zeilen, welche nicht null enthalten, angezeigt werden.
Die so dargestellten 2 Zeilen entsprechen derzeit ja der tatsächliche Größe der gefilterten Abfrage und natürlich auch einer anschließend daraus zu erstellenden Resultat-Tabelle. Um den vorherigen Zustand mit allen 56 Zeilen wieder herzustellen, im rechten Seitenfenster unter Angewendete Schritte den letzten Eintrag Gefilterte Zeilen auf beliebige Weise löschen.
Im Register Start erweitern Sie nun Schließen & laden im Textbereich durch einen Klick auf und wählen dann Schließen & laden in… Im Dialog markieren Sie dann die Options-Schaltfläche Nur Verbindung erstellen und bestätige mit Laden.
Da das Abfrage-Fenster geschlossen wurde, bin ich jetzt wieder in der ganz normalen, ursprünglichen Excel-Tabelle. Nun ändere ich von Hand die beiden gemerkten oder notierten Einträge in der Form, dass zwischen Tag und Monat sowie Monat und Jahr kein - steht sondern ein /.
Wenn Sie nun die Abfrage Einsatzplanung auf beliebige Weise erneut öffnen, werden zwar immer noch 4 Wert.#-Spalten angezeigt, aber wenn sie jeweils Wert.3 und Wert.4 erweitern werden sie rasch erkennen, dass ausschließlich der Wert null darin enthalten ist. Darum können Sie diese beiden Spalten durch einen Klick in die Überschrift markieren und dann auf beliebige Weise löschen. Ich mache das per Entf – Taste oder Rechtsklick in eine Überschrift und dann im Kontext-Menü Spalten entfernen.
Es verbleiben 2 Wert.#-Spalten mit durchaus unterschiedlichen Darstellungen von kalendarischen Daten. An erster Stelle werden Sie die beiden Überschriften anpassen, sinnvollerweise verwenden Sie Von und Bis. Danach markieren Sie diese beiden Spalten (wiederum mittels Shift und durch Klick in die Überschrift), Register Transformieren, Symbol Datum | Analysieren. Das Ergebnis wird sie überzeugen. 💡
Spreizen der Daten
Um mit einigermaßen Komfort eine Auswertung erstellen zu können, welcher Mitarbeiter zu einem bestimmten Termin oder einem definierten Zeitbereich verfügbar ist, sollte die künftige Tabelle so aufgebaut sein, dass für jeden Tag, wo der Mitarbeiter eingesetzt werden kann bzw. soll, eine einzelne Zeile existiert. Dadurch wird naturgemäß die Menge der Daten, also auch der Zeilen deutlich erweitert. Darum ist es aus Gründen der Performance hilfreich, im Vorwege alle (derzeit) überflüssigen Daten zu entfernen. Da sie bei Bedarf die 3‑stelligen Namen der Monate aus dem Datum berechnen können, löschen Sie die Spalte Monat.
Zugegeben, die nun folgenden Schritte sind für Einsteiger in Sachen Power Query nicht unbedingt leicht zu verstehen. Wenn Sie aber alles exakt nach dieser Anleitung abarbeiten, werden sie sicher zum Ziel gelangen. Und bedenken Sie, dass solch eine recht umfangreiche Arbeit typischerweise nur ein einziges Mal pro Tabelle durchgeführt wird. Nach Änderungen in den Quelldaten reicht ein Klick auf Aktualisieren und alle Änderungen sind in der durch Power Query erstellten und dann über Schließen & laden gespeicherten Tabelle auf den neuesten Stand. Ich beschreibe hier einen gangbaren Weg, der für Sie nach einer gewissen Zeit der Einarbeitung und der erforderlichen Lernbereitschaft vielleicht auch nachvollziehbar ist.
Aktivieren Sie zu Beginn das Register Spalte hinzufügen und wählen dort in der Gruppe Allgemein das Symbol Benutzerdefinierte Spalte. Geben Sie im Dialog bei Neuer Spaltenname den Wert Bis! (mit einem angefügten Ausrufungszeichen) ein. Bei Benutzerdefinierte Spaltenformel: Schreiben Sie in exakt dieser Groß- Kleinschreibung nach dem bereits vorgegebenen Gleichheitszeichen diese Formel, ein- oder (der Übersicht wegen) mehrzeilig, wie in der Abbildung zu sehen:
= if [Bis]=null then [Von] else [Bis]
Hinweis: Die Feldnamen können Sie automatisch durch einen Doppelklick auf den entsprechenden Eintrag im rechten Seitenfenster übernehmen; dabei werden auch die eckigen Klammern und auch eventuell erforderliche weitere Ergänzungen automatisch gesetzt. – Sie erkennen gewiss, dass nun in der Bis!-Spalte in den meisten Fällen der Wert der bisherigen Bis-Spalte steht und dort, wo null stand, jetzt der Wert der Von-Spalte. Es ist also gewährleistet, dass kein Bis!-Wert leer ist. Löschen Sie die jetzt überflüssige (alte) Spalte Bis.
Erstellen Sie nun eine weitere Benutzerdefinierte Spalte und vergeben hier als Überschrift (Spaltenname) den Wert Datum. Schreiben Sie nun diese Formel:
= List.Dates([Von], Number.From([#"Bis!"]) - Number.From([Von]) + 1,
#duration(1,0,0,0))
Es wird eine neue Spalte erstellt, der Inhalt jeder einzelnen Zeile besteht aus dem Wert List. Erweitern Sie nun diese Überschrift durch einen Klick auf den Doppelpfeil und wählen Sie im DropDown Auf neue Zeilen ausweiten. In Windeseile wird für jeden Namen für jeden Tag des Von – Bis ‑Zeitbereichs eine einzelne Zeile erstellt. Nun umfasst die Abfrage 660 Zeilen. Vergleichen Sie noch einmal bei einem Namenswechsel, ob der letzte Wert des Namens in der Spalte Datum, beispielsweise in Zeile 61 bei Alexandra mit dem Wert der Spalte Bis! übereinstimmt; hier ist es beide Male der 24.11.2019, also stimmt die Berechnung der Formel. Jetzt sind auch die beiden Spalten Von und Bis! überflüssig, löschen Sie darum die beiden Columns.
Power Query oder PivotTable?
An dieser Stelle stellt sich die Frage, ob sie die Auswertung nun weiter mit Power Query machen wollen oder selbst bzw. Kolleginnen und Kollegen eine Auswertung mit einer PivotTable anbieten wollen. Ich stelle Ihnen hier beide Wege vor …
Auswertung mit Power Query
So leistungsfähig wie Power Query ist, hier sind für Standard-User, die nicht allzu tief in die Materie eindringen wollen, Grenzen gesetzt. Aber ich möchte Ihnen dennoch aufzeigen, welche Möglichkeiten Sie mit relativ einfachen Mitteln haben, zumindest in die Nähe des gewünschten Ziels zu gelangen. Oder andersherum gesagt: Wenn Sie „nur” wissen wollen, welche Mitarbeiter überhaupt in einem gegebenen Zeitraum verfügbar ist, ohne jedoch den vollen Zeitraum aller kalendarischen Daten zur Verfügung zu stellen, dann lässt sich das recht gut lösen. 🙂
Angenommen, für den Zeitraum vom 1. April 2019 bis zum 12. des Monats soll eine Liste verfügbarer Mitarbeiter erstellt werden. Wechseln Sie dazu erforderlichenfalls zum Register Start, Gruppe Neue Abfrage | Neue Quelle | Andere Quellen | Leere Abfrage. Sie stellen auf diesem Wege eine wirklich leere Abfrage, in welcher sie noch nicht einmal eine leere Tabelle sehen:
Sie könnten hier das Äquivalent der eben genutzten List.Dates – Formel zum ausfüllen bzw. auffüllen der kalendarischen Daten verwenden, ich stelle Ihnen hier jedoch eine weitere Variante vor. Schreiben Sie in die leere Eingabezeile einschließlich des führenden Gleichheitszeichen folgendes und achten Sie dabei genau auf die vorgegebene Groß- Kleinschreibung:
=List.Range({Number.From(#date(2019,4,1))..Number.From(#date(2019,4,12))},0)
Eingabe,Enter oder einfach ein Klick in den leeren Bereich unterhalb der Eingabe und das Ergebnis ist eine Liste, keine Abfrage:
Eine Typ-Umwandlung ist in einer Liste nicht möglich. Darum sofort in der Gruppe Konvertieren ein Klick auf die Schaltfläche Zu Tabelle und die Vorgaben so wie sie sind übernehmen. Ändern Sie hier den Datentyp auf Datum und ändern Sie zweckmäßigerweise die Überschrift auch auf Datum.
Spätestens jetzt ist es hilfreich, der zu Beginn erstellten Abfrage einen „anständigen” Namen zu geben. Mein Vorschlag: PQ-Auswertung. Das geht im rechten als auch linken Seitenfenster. Die Namen werden sofort synchronisiert.
Aktivieren Sie die Query Abfrage1. Nun Start, Kombinieren | Abfragen zusammenführen und nehmen Sie als untere Tabelle die Abfrage mit dem Namen PQ-Auswertung. Markieren Sie nun im Kasten Abfrage1 die einzige Spalte Datum und unteren Kasten die Spalte Datum, indem Sie entweder in die Überschrift oder sie Daten Klicken:
Nach einem OK hat Power Query die Spalte PQ-Auswertung erstellt; in jeder einzelnen Zelle steht der Inhalt Table (Tabelle). Erweitern Sie die Überschrift durch einen Klick auf den Doppelpfeil und entfernen Sie im Dialog die Häkchen bei Datum und beim Kästchen Ursprünglichen Spaltennamen als Präfix verwenden, dann OK. Jetzt noch die Spalte Datum aufsteigend sortieren und idealerweise anschließend auch die Spalte Name.
Hinweis: Um sich die Arbeit etwas zu erleichtern, sollten Sie an dieser Stelle ein Duplikat der Abfrage1 erstellen (linkes Seitenfenster, Rechtsklick in Abfrage1). Und den Namen der neuen Abfrage können Sie bei der Gelegenheit auch sinnvoll anpassen, beispielsweise Kreuztabelle 04/01–04/12; leider sind Punkte in Abfrage-Namen nicht möglich, darum geht das für uns gewohnte Datumsformat nicht. 😥 Und die folgenden Schritte führen Sie dann in genau dieser Query aus.
Sie möchten eine Kreuztabelle mit den kalendarischen Daten als Überschrift erstellen, darum ist an dieser Stelle etwas zusätzliche Arbeit erforderlich. Als erstes werden Sie eine Liste aller Mitarbeiter erstellen, die in der ursprünglichen Tabelle enthalten sind. Gehen Sie dazu Folgendermaßen vor: Rechtsklick in die Überschrift Name und anschließend Als neue Abfrage hinzufügen. Power Query erzeugt eine Liste aller Namen in der Reihenfolge ihres Auftretens. Da es sich hier um eine Kopie der Spalte als eigenständiger Abfrage handelt, sind auch hier alle 27 Namen (ohne die dazugehörigen kalendarischen Daten) aufgeführt.
Da jeder Name nur einmalig in diese Liste aufgeführt werden soll, Klicken Sie in der Gruppe Elemente verwalten auf Duplikate entfernen. Es bleiben genau die vier Namen in der Liste enthalten, die auch für die Veranstaltungen eingesetzt werden können. Konvertieren Sie nun diese Liste über das entsprechende Symbol in eine Tabelle.
Power Query hat der neu erstellten Tabelle, eigentlich der Query den Namen Name gegeben. Diese Abfrage ist nun die Basis für das weitere Vorgehen. Start, Kombinieren | Abfragen zusammenführen und wählen Sie für den unteren Bereich Abfrage1. Markieren Sie im oberen Kasten Column1 und im unteren die Spalte Name. Anschließend ein Klick auf OK. Erweitern Sie nun die Überschrift Abfrage1 und belassen Sie das Häkchen nur bei Datum. Nun einen Rechtsklick in Überschrift Column1 und wählen Sie Spalte duplizieren.
Jetzt kommt der entscheidende Schritt in Richtung Kreuztabelle. Markieren Sie die Spalte Datum, Register Transformieren und wählen Sie dort in der Gruppe Beliebige Spalte die Möglichkeit Pivotieren . Als Wertespalte setzen Sie Column1, Klick auf den Text Erweiterte Optionen und dort markieren Sie Nicht aggregieren. Nach einem OK stellt sich diese Abfrage so dar:
Löschen Sie nun die erste Spalte Column1-Kopie und Sie sind fast fertig. Es bleibt noch Daten, Schließen & laden oder Schließen & laden in… und die Daten werden in dieser Form als Tabelle in der neues oder existierendes Excel-Arbeitsblatt geschrieben:
Und trotz „Weihnachts-Special” soll es in diesem Beitrag bei dieser Darstellung der Liste bzw. Abfrage bleiben. Schick wäre natürlich, wenn die Namen direkt untereinander stehen würden, ohne Datenlücken in den oberen Zeilen. Dafür gibt es auch Lösungsmöglichkeiten in Power Query, die ich aber nicht an dieser Stelle erörtern möchte. Auf Nachfrage gerne mehr Infos …
Auswertung mit PivotTable
Aus meiner Sicht ist eine Auswertung und Darstellung mit bzw. in einer Pivot Tabelle effektiver, übersichtlicher, komfortabler. Eben einfach besser. 😎 Wechseln Sie dazu beispielsweise im linken Seitenfenster per Mausklick auf die Abfrage PQ-Auswertung:
Wenn Sie nun über Start die Schaltfläche Schließen & laden anklicken, werden Sie vermutlich sehen, dass Sie nichts sehen. Der Grund hierfür: Power Query hat die Abfrage automatisch im Modus Nur Verbindung gespeichert. Um die Daten in einer Tabelle zu speichern, führen Sie einen Rechtsklick auf PQ-Auswertung, Laden in… und dann Tabelle. Siehe auch hier, wo das etwas ausführlicher beschrieben ist.
Mit den Daten dieser als Tabelle gespeicherten Abfrage ist nun eine entsprechende Auswertung mit der Funktionalität der PivotTable möglich. Wählen Sie das Register Tabellentools | Entwurf und Klicken Sie anschließend in der Gruppe Tools auf den Eintrag Mit PivotTable zusammenfassen. Es öffnet sich der typische PivotTable-Dialog und dort wählen Sie beispielsweise Vorhandenes Arbeitsblatt und als Ziel die Zelle D10. Wählen Sie nun nacheinander die Felder Name und Datum aus oder ziehen Sie diese direkt in den Bereich Zeilen.
Filtern der kalendarischen Daten
Grundsätzlich gibt es drei Möglichkeiten, einen anzuzeigenden Datum-Bereich den jeweiligen Mitarbeitern optisch zuzuordnen. Dieses sind die Zeitachse, der Datenschnitt und der „normale” Filter. Die aufgeführte Reihenfolge stellt auch die von mir gesetzte Priorität dar (was nicht heißen will, dass Sie das auch so sehen … 😎 ).
Die Zeitachse
Wie schon erwähnt, mein Favorit. 💡 Und der Name sagt es schon aus, dieses Tool ist ausschließlich für die manipulative (im positiven Sinne des Begriffs) Darstellung von Zeitbereichen gedacht. Ein Klick in die Pivot-Daten, Analysieren | Zeitachse einfügen. Schieben Sie diesen Shape an die gewünschte Position und wählen Sie beispielsweise einmal den September 2019 aus (da sind so schön wenige Treffer 😎 ). Das würde dann so aussehen:
Jetzt sehen Sie alle verfügbaren Einsatzkräfte für den ausgewählten Monat. Wenn Sie nun oben rechts den Text Monate erweitern, dann ist es mittels des Schiebers recht einfach möglich, den Bereich auf definierte (zusammenhängende) Tage zu begrenzen. Natürlich wird sich die gefilterte Anzeige der Daten in der PT sofort anpassen.
Datenschnitt
Über den gleichen Weg können Sie statt der Zeitachse auch einen ganz „normalen” Datenschnitt einfügen. Dieser stellt sich dann beispielsweise so dar:
Da hier jedes Datum angezeigt wird (wenn auch großenteils verdeckt, durch den Scrollbalken rechts aber anzeigbar) scheint das Ganze unter Umständen etwas unübersichtlich und vielleicht nicht so leicht handhabbar. Aber Sie haben hier unter Umständen gegenüber der Zeitachse einen sehr großen Vorteil: Es lassen sich unabhängig voneinander einzelne, also nicht zusammenhängende Tage auswählen. Also beispielsweise den 15.01.2019, 18.01.2019 und den 20.01.2019 und wenn es dann sein soll auch noch ein Tag im Februar. In der PivotTable wird alles korrekt gefiltert.
Filter
Die wohl einfachste Lösung (im doppelten Sinne einfach) ist gewiss die Möglichkeit „Filter”. Ziehen Sie das Datum-Feld in den Bereich Filter statt Zeilen und oberhalb der PivotTabelle wird Ihnen die Möglichkeit geboten, das Feld Filter zu erweitern und entweder einzelne oder mehrere kalendarische Daten auszuwählen. Einfach, vielleicht gewöhnungsbedürftig aber wirkungsvoll. Der große Vorteil dieser Methode: Wenn Sie (nur) die erstellten Daten, die erzeugte Tabelle und die PivotTable weitergeben und der Empfänger kann wegen einer älteren Excel-Version weder Datenschnitt noch Zeitachse verwenden können, dann ist dieses der Königsweg.
(Gruppierung)
Na ja, nicht umsonst ist die Überschrift in Klammern eingefasst. Und außerdem ist dieses der vierte Vorschlag in Sachen Daten-Auswahl. Ich finde das hier nicht so prickelnd und auch längst nicht so effektiv, wie die vorgenannten Methoden. Der Vollständigkeit wegen habe ich diese Möglichkeit aber dennoch aufgeführt.
Rechtsklick in ein beliebiges Datum oder die Überschrift Datum und wählen Sie Gruppieren aus. Markieren Sie im Gruppierung-Dialog den Eintrag Tage. Geben Sie in die entsprechenden Felder die gewünschten Zeitbereiche ein und auch hier wird ein der Gruppierung entsprechender Filter gesetzt. Ich finde die Ansicht in den meisten Fällen nicht wirklich optimal, aber bekanntlich sollte jeder nach seiner eigenen Fasson selig werden. 😉
Hat Ihnen der Beitrag gefallen?
Erleichtert dieser Beitrag Ihre Arbeit?
Dann würde ich mich über einen Beitrag Ihrerseits freuen …