$ PQ: Fertigungsdauer in Werktagen (Spezial), Kurzform

Xtract: Lösung ein­er Anfrage aus einem Forum. Für mehrere Pro­duk­te sollen die jew­eili­gen Wek­tage (unter berück­sich­ti­gung der Feiertage) mit PQ berech­net wer­den. Dieser Beitrag ist eine Kurz­form mit knap­pen bis keinen Erk­lärun­gen des Weges zum Ziel.

  Wis­sens­stand: Lev­el 3 ⇒  Excel GUT!, min­destens Basis-Ken­nt­nisse in Pow­er Query   

Anzahl der Werktage für die Fertigung eines Produkts
(Kurzform: Andere Darstellungsweise als gewünscht)

In einen einem Forum wurde die Frage aufge­wor­fen, wie die Ver­ar­beitungszeit in Tagen ver­schieden­er Pro­jek­te war. Jedes das Pro­jekt ist an eine ein­deutige ID gebun­den. Als Beson­der­heit kommt noch hinzu, dass zwis­chen dem ersten und dem let­zten Tag ver­schiedene weit­ere Ein­träge (beispiel­sweise für ent­nommene Stich­proben) gemacht wor­den sind. Als weit­ere Beson­der­heit gilt, dass nur die Werk­tage Mon­tag bis Fre­itag gezählt wer­den sollen. Außer­dem sollen auch noch definierte Feiertage als arbeits­frei berück­sichtigt wer­den.

Ich habe die Musterta­belle aus dem Forum herun­terge­laden und stelle Ihnen diese (leicht mod­i­fiziert) hier zum Down­load zur Ver­fü­gung. Auch wenn es seit­ens des Fragestellers (bis­lang) nicht erwäh­nt wor­den ist gehe ich davon aus, dass die berech­neten Arbeit­stage wie auch in Spalte C stets in die let­zte Zeile des jew­eili­gen Pro­jek­ts einge­tra­gen wer­den sollen.

In diesem frei ver­füg­baren Beitrag gibt es zwei Ein­schränkun­gen; eine gegenüber der durch den Fragesteller gewün­scht­en Darstel­lungs­form (let­ze Zeile des Pro­jek­ts) und eine in der son­st üblichen Form der Aus­führlichkeit der Beiträge dieses Blogs. Mehr dazu kön­nen Sie weit­er unten oder in diesem Hin­weis (Pass­wort: Hil­fe) nach­le­sen.

▲ nach oben …

Einstieg

Zu Beginn importieren Sie nun die Dat­en der Spal­ten A:B in den Pow­er Query-Edi­tor. Ich habe für Sie die For­matierung als Intel­li­gente Tabelle bere­its vorgenom­men und den Namen der Tabelle auf Data angepasst. Ide­al­er­weise wer­den sie sofort nach dem Import Schließen & laden in… auszuwählen und die Auswahl Nur Verbindung erstellen tre­f­fen. Naturgemäß befind­et sie sich danach wieder im Arbeits­blatt Tabelle1. Im Bere­ich D1:E13 sind die kalen­darischen Dat­en der Feiertage für die Jahre 2019 und 2020 aufge­führt. Auch diesen Bere­ich habe ich entsprechend for­matiert und der Liste den Namen Feiertage gegeben. Importieren Sie auch diese Tabelle nach Pow­er Query.

Wo sie schon ein­mal in der Abfrage Feiertage sind kön­nen Sie auch gle­ich damit begin­nen, die kalen­darischen Dat­en so zu posi­tion­ieren, dass diese nur in ein­er Spalte untere­inan­der ange­ord­net sind. Eine der Möglichkeit­en wäre, eine Anfüge-Abfrage zu starten. Ich gehe mit Ihnen einen anderen Weg und markiere bei­de Spal­ten, Recht­sklick in ein­er der bei­den Über­schriften und im Kon­textmenü ein Klick auf Ent­piv­otieren. Auch wenn die chro­nol­o­gis­che Rei­hen­folge nicht sortiert ist kann das so bleiben. Löschen Sie die Spalte Attrib­ut und benen­nen Sie die übrig gebliebene Spalte Feiertage. Nun auch hier die kalen­darischen Dat­en in den Daten­typ:  Datum umwan­deln und danach diese Abfrage per Schließen & laden in… als Nur Verbindung spe­ich­ern.

▲ nach oben …

Ersten und letzten Tag je Projekt feststellen

Im weit­eren Ablauf geht es darum, den ersten und den let­zten Tag jedes Pro­jek­ts festzustellen und in die Abfrage einzu­tra­gen. Der hier aufgezeigte Weg ist (der Kurz-Ver­sion wegen) ohne weit­ere Erk­lärung; ein­fach nur nachar­beit­en und zum Ziel gelan­gen. In der $$-Ver­sion dieses The­mas wird ein etwas ander­er, gewiss bess­er ver­ständlich­er Weg gegan­gen und auch entsprechend aus­führlich doku­men­tiert.

Öff­nen Sie die Abfrage Data auf beliebige Weise. Markieren Sie nun die Spalte mit der eigentlichen ID Doku­ment No und wählen Sie nach einem Recht­sklick in diese Über­schrift Grup­pieren nach… Im Dia­log kön­nen Sie Neuer Spal­tenname bei Anzahl belassen, ich ziehe als kün­ftige Über­schrift Dat­en vor. Bei Vor­gang wählen Sie die unter­ste Zeile Alle Zeilen und danach OK. Das Ergeb­nis ist eine 2‑spaltige, 6 Zeilen umfassende Abfrage, wo in der zweit­en Spalte (Dat­en) auss­chließlich der Wert Table einge­tra­gen wor­den ist.

Im Menü Spalte hinzufü­gen ein Klick auf Benutzerdefinierte Spalte und tra­gen Sie im Dia­log bei Neuer Spal­tenname den Wert Start ein und bei Benutzerdefinierte Spal­tenformel schreiben Sie diese Formel:
Table.Min([Daten],"Datum")

… und das Ergeb­nis ist eine weit­ere Spalte Start mit dem durchgängi­gen Wert Record. Wieder­holen Sie diesen Vor­gang mit fast der gle­ichen Formel, nur dass sie statt Table.Min die Funk­tion Table.Max ver­wen­den und als Über­schrift natür­lich Ende ein­set­zen. Erweit­ern Sie nun die bei­den Spal­ten Start und Ende der­ar­tig, dass nur der Wert aus der Zeile Datum aus­gegeben wird, anschließend löschen Sie die Spalte Dat­en und ändern Sie die Über­schriften Datum (wieder) in Start, Datum.1 entsprechend in Ende.

Ändern Sie den Daten­typ der bei­den Spal­ten Start und Ende auf Ganze Zahl. Das ist die beste Voraus­set­zung um für jeden Tag des Zeit­bere­ichs eine einzelne Zeile zu gener­ieren. Immer noch im Menü Spalte hinzufü­gen leg­en Sie eine Benutzerdefinierte Spalte mit dem Spal­tenna­men Datum und der Spal­tenformel
= {[Start]..[Ende]}
an. Löschen Sie die bei­den Spal­ten Start und Ende und erweit­ern Sie Datum. Ändern Sie den Daten­typ dieser Spalte nun wieder auf Datum.

Im Menüband Datum | Tag | Name des Tags und Pow­er Query fügt eine Spalte mit dem lan­desüblichen Namen des Wochen­t­ages ein. Fil­tern Sie diese Spalte so, dass Sam­stag und Son­ntag ent­fer­nt wer­den. Wech­seln Sie zum Menü Start und ein Klick auf Abfra­gen zusam­men­führen. Wählen Sie als untere Abfrage Feiertage und markieren Sie die bei­den Spal­ten mit den kalen­darischen Dat­en. Bei Join-Art wählen Sie den Linken Anti-Join und nach einem OK kön­nen Sie mit Aus­nahme der Spalte Doc­u­ment No alle anderen Spal­ten löschen.

▲ nach oben …

Endspurt

Nun ein Recht­sklick in die einzig verbliebene Über­schrift und wählen Sie Grup­pieren nach… Übernehmen Sie die Vor­gaben und Pow­er Query hat das gewün­schte Ergeb­nis berech­net. Für jede ID wurde die kor­rek­te Anzahl von Arbeit­sta­gen berech­net. Nach einem Klick auf Schließen & laden wer­den sie das Ergeb­nis naturgemäß noch nicht in ihrem Arbeits­blatt sehen. Aber über diesen Weg platzieren sie die Ergeb­nis-Tabelle an gewün­schter Posi­tion.

Zugegeben, das war ein teil­weise anspruchsvoller Schnell­durch­gang, der nicht in üblich­er Form kom­men­tiert ist. Wie oben schon erwäh­nt gibt es aber einen Blog-Beitrag zu genau diesem The­ma und mit exakt diesen Dat­en, wo zwar teil­weise ein etwas ander­er Weg beschrit­ten wird aber die Vorge­hensweise für „Nor­mal-User” gewiss bess­er nachvol­lziehbar und auch in gewohn­ter Form aus­führlich beschrieben ist. – Hier ein Hin­weis dazu, das erforder­liche Pass­wort ist Hil­fe.

▲ nach oben …

Ein wichtiger Hin­weis
Der Link auf den Folge-Beitrag begin­nt mit „$$”. Das bedeutet für alle der­ar­tig aus­geze­ich­neten Beiträge, dass diese kostenpflichtig sind (eine geringe Spende).
Näheres dazu in der ange­sproch­enen Mail. Auch Wis­sen hat einen Wert!

Wie eben schon dargelegt habe ich auch eine aus­führliche Beschrei­bung meines Lösungsweges in bekan­nter, aus­führlich­er Form erstellt. Eine E‑Mail an mich mit dem Stichwort/Betreff $$ Fer­ti­gungs­dauer in Werk­ta­gen und Sie bekom­men von mir den entsprechen­den Link sowie das erforder­liche Pass­wort zum öff­nen des Beitrages, sofern Sie mir eine eine Spende von 5,00€ (Über­weisung, Donate-But­ton, Pay­Pal Fre­und­schaft oder Ama­zon-Gutschein) haben zukom­men lassen.

Dieser Beitrag wurde unter Datentyp anpassen, Datum & Zeit, Entpivotieren, Filtern & Sortieren, Foren-Q&A, Join-Art, Power Query, PQ-Formeln (Sprache M), Spende/Donation, {Liste} abgelegt und mit , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.