PQ: Wochen, Tage, Stunden zu Minuten

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

In einem Excel-Forum wurde die Frage aufge­wor­fen, wie unter­schiedlich­ste Zeit­ein­heit­en (Wochen, Tage, Stun­den), welche stets in 1 Zelle zusam­menge­fasst wor­den sind, zu Minuten umgerech­net wer­den kön­nten. Hier ein Screen­shot aus der Muster-Datei des ersten Beitrags:

Dieses war die Vor­gabe …

Unter­schiedliche Lösun­gen, die teil­weise auf unzure­ichen­der Infor­ma­tion des Fragestellers beruht­en, wur­den präsen­tiert und disku­tiert. Mich hat das The­ma gereizt und ich habe mir auf der Basis des Pow­er Query zwei Lösungswege erar­beit­et. Zugegeben, es ist nicht unbe­d­ingt ein Parade­beispiel für den Ein­satz des PQ aber ich habe hier aus Ehrgeiz und Neugi­er Wege beschrit­ten, welche nicht unbe­d­ingt dem Stan­dard entsprechen; den ersten möchte ich Ihnen hier vorstellen. Und wenn es dann auch genü­gend Daten­sätze sind, dann „lohnt” sich sog­ar Pow­er Query. 😎 

Also, laden Sie gerne erst ein­mal die Muster-xlsx direkt aus dem Forum (aktu­al­isierte Fas­sung aus Beitrag #9) herunter. Ide­al­er­weise wer­den Sie die prinzip­iell iden­tis­che Kopie von hier herun­ter­laden, denn ich habe während des Schreibens erlebt, dass sich inner­halb ein­er Stunde extrem viele Verän­derun­gen in der Muster-xlsx (ohne einen direk­ten Hin­weis darauf) ergeben haben. Sie wer­den auch erken­nen, dass die Ein­träge alles andere als „kon­ven­tionell” oder gar sys­tem­a­tisch sind. Aber ger­ade das macht ja die eigentliche Her­aus­forderung aus. 😉 Ich habe bei meinen Lösun­gen bewusst darauf verzichtet, auch eventuelle Großschrei­bung der Zeit-Ein­heit­en anzu­passen; das wäre in einem solchen Fall näm­lich unter Umstän­den erforder­lich, weil Pow­er Query stets zwis­chen Groß- und Klein­schrei­bung unter­schei­det (case-sen­si­tive). 

Lösung 1, Spalten, Spalten, Spalten …

Dieser dur­chaus kon­ser­v­a­ti­vere Weg ist gewiss etwas leichter nachvol­lziehbar als die zweite von mir erar­beit­ete Lösung. Die Grund-Idee ist, die Zeit-Kürzel zu separi­eren und anschließend mit unter­schiedlichen if-Kon­struk­ten einen Mul­ti­p­lika­tor zu errech­nen. Anschließend ist es dann kein Prob­lem, die jew­eili­gen Minuten zu berech­nen und schlussendlich zu addieren. Das Ganze ergibt aber so einige (oder ein paar mehr) Spal­ten, die jedoch später wieder gelöscht wer­den, was dann schlussendlich die Über­sichtlichkeit wieder her­stellt. 😎 

Vorarbeiten

Die Muster-Datei haben Sie bere­its auf dem Schirm. Analysieren Sie in Excel die einzel­nen Ein­träge der Spal­ten A; C; E und erken­nen Sie, dass hier 3 indi­vidu­ell zu berech­nende Spal­ten vor­liegen und ins­beson­dere die Zellen, wo auss­chließlich die Minuten einge­tra­gen sind, eine Son­der­stel­lung haben. Behal­ten Sie den Auf­bau „im Hin­terkopf” und löschen Sie bere­its hier die existieren­den, durch den Fragesteller bere­its einge­tra­ge­nen Ergeb­niss­pal­ten; die stören derzeit und sie wer­den die ja gle­ich mit Pow­er Query berech­net wer­den. Das stellt sich dann nach dem Import im Edi­tor so dar:

Die reine Daten-Basis zum auswerten

Die reine Dat­en-Basis zum auswerten

Hin­weis: Wenn es Ihnen sym­pa­this­ch­er ist, kön­nen Sie die über­flüs­si­gen Ergeb­niss­pal­ten auch erst im Edi­tor löschen. Das ist gewiss dann hil­fre­ich­er, wenn diese Berech­nun­gen immer wieder mit verän­derten Import-Dat­en vorgenom­men wer­den sollen und auch ständig diese händis­chen Berech­nun­gen in den Quell-Dat­en enthal­ten sind.

Um einen bessere Kon­ti­nu­ität in diese Dat­en zu bekom­men, soll­ten Sie in PQ die Zellen mit den Nur-Minuten dahinge­hend anpassen, dass dort beispiel­sweise statt 10min kün­ftig 10m ste­ht. Dazu markieren Sie alle Spal­ten, Start | Werte erset­zen (oder über Recht­sklick in eine der Über­schriften) und min durch m erset­zen lassen.

▲ nach oben …

Erste Schritte

Zugegeben, ich habe einige Zeit über­legt, welch­es der für Sie beste Weg ist, das Ganze „aufzu­dröseln”, also die einge­tra­ge­nen Kürzel für die Zeit­ein­heit­en einiger­maßen über­sichtlich und trans­par­ent in Minuten umzurech­nen. Und ich muss zugeben, dass es (meinem derzeit­i­gen Ken­nt­nis­stand nach) mit Pow­er Query in dieser Sache keinen wirk­lich über­sichtlichen, „schlanken” Weg für Ein­steiger gibt. Aber ich habe ver­sucht, so weit als möglich auf die Sprache M zu verzicht­en und möglichst die die Schalt­flächen / Sym­bole, also die GUI für die Berech­nung einzuset­zen.

Diese Abfrage (Tabelle1) ist die Basis für alle fol­gen­den Schritte. Markieren Sie auss­chließlich die 1. Spalte W/D/H_1, führen Sie einen Recht­sklick in der Über­schrift durch und Sie wer­den im Kon­textmenü weit unten den Punkt Als neue Abfrage hinzufü­gen. Es wird automa­tisch eine Liste erstellt:

Als Liste separierte Daten der ersten Spalte

Als Liste separi­erte Dat­en der ersten Spalte

Da die Dat­en kün­ftig als „echte” Abfrage vor­liegen müssen, Klick­en Sie im Menüband auf das erste Sym­bol Zu Tabelle und übernehmen im anschließen­den Dia­log die Vor­gaben. Zum Abschluss gehen Sie über das Reg­is­ter Spalte hinzufü­gen zur Auswahl Benutzerdefinierte Spalte und tra­gen Sie bei Neuer Spal­tenname beispiel­sweise die Über­schrift WDH ein und bei Benutzerdefinierte Spal­tenformel: schreiben Sie ein­fach den Namen der Abfrage, welch­er natür­lich in Anführungsstriche gehört:

Eine neue Spalte mit dem Namen der Abfrage als Inhalt

Eine neue Spalte mit dem Namen der Abfrage als Inhalt

Mit den Spal­ten W/D/H_2 und W/D/H_3 gehen Sie gle­icher­maßen vor, die Quelle ist immer wieder Tabelle1 und Sie markieren dann natür­lich die passende Spalte. Und selb­stre­dend passen Sie die die Benutzerdefinierte Spal­tenformel jew­eils den Gegeben­heit­en an. Anschließend haben Sie für jede dieser 3 Spal­ten eine eigene Abfrage.

Die näch­sten Schritte der besseren Über­sicht wegen als Auflis­tung:

  • Wech­seln Sie nun durch Klick im linken Seit­en­fen­ster zur Abfrage W/D/H_1, Start | Kom­binieren
  • Erweit­ern Sie Abfra­gen anfü­gen ▼ und dann Abfra­gen als neu anfü­gen.
  • Markieren Sie im Dia­log Anfü­gen die Option Drei oder mehr Tabellen.
  • Markieren Sie im Kas­ten Ver­füg­bare Tabelle(n) die bei­den unteren Ein­träge und Klick­en Sie auf Hinzuf… und anschließend ein Klick auf OK.

Sie erken­nen, dass eine weit­ere neue Abfrage mit dem Namen Append1 erstellt wurde, wo untere­inan­der alle Ein­träge der 3 zuvor erstell­ten Abfra­gen einge­tra­gen sind. Nun ist es an der Zeit, die 1. Spalte Column1 so zu teilen, dass die über­wiegend 2 Angaben kün­ftig in getren­nten Spal­ten ste­hen. Dazu gehen Sie über Start | Spalte teilen | Nach Trennze­ichen (oder per Recht­sklick aus dem Kon­textmenü) und wählen als Trennze­ichen das Leerze­ichen. Der Optik wegen kön­nen Sie vorher oder auch jet­zt die Spalte WDH an den Anfang ver­schieben (ziehen oder per Kon­textmenü); für die meis­ten Anwen­der ist diese Sichtweise angenehmer, gewohn­ter.

Ver­schiedene Zellen zeich­nen sich ja dadurch aus, dass sie (wegen des vor­ange­gan­genen Erset­zungsvor­gangs) leer sind und aus diesem Grunde den Wert null enthal­ten. Das würde bei ein­er der nach­fol­gen­den Oper­a­tio­nen zu einem Fehler­w­ert führen, darum markieren Sie die Spal­ten Col­umn 1.1 und Col­umn 1.2 und erset­zen den Wert null durch 0 (die Zif­fer Null). Zugegeben, in Column1.1 sind wegen der gerin­gen Zahl von Daten­sätzen (Zeilen) keine null-Werte sicht­bar, aber schaden kann es nichts und „sich­er ist sich­er”… 💡 Wer weiß, wie sich geän­derte Werte in den Quell­dat­en gestal­ten? Damit ist die Vorar­beit für eine etwas aufwändi­gere Oper­a­tion abgeschlossen.

▲ nach oben …

Für die fol­gen­den Schritte gehen Sie über Spalte hinzufü­gen | Bed­ingte Spalte und tra­gen Sie im Dia­log diese Werte ein:

  • Neuer Spal­tenname: W (der besseren Unter­schei­dung wegen als Großbuch­stabe)
  • Spal­tenname | wenn: Column1.1 wählen
  • Oper­a­tor: endet mit auswählen
  • Wert: w (kleines „w”)
  • Aus­gabe | Dann erweit­ern, im Drop­down Spalte auswählen: Column1.1
  • Andern­falls: null
Bedingte Spalte, hier per GUI erstellt

Die erste Bed­ingte Spalte, hier per GUI erstellt

Wenn Sie diesen Dia­log mit OK bestätigt haben wer­den Sie rasch erken­nen, dass nur die ersten 7 Zeilen einen Wert enthal­ten, der nicht null ist. Alle anderen Werte in der Spalte Col­umn 1.1 sind ja auch nicht als w (Woche) aus­geze­ich­net.

Prak­tisch exakt das gle­iche Vorge­hen gilt für das Argu­ment d (Day, Tag). Sie erstellen seine weit­ere Bed­ingte Spalte mit dem Spaltennamen/der Über­schift D, wo sie bei Wert ein d in das Feld Wert ein­tra­gen. Der Bezug ist hier natür­lich auch wieder Col­umn 1.1. Und auch für die Argu­mente h (Hour, Stunde) und m (Minute) gehen Sie nach dem gle­ichen Muster vor.

Für die Spalte Col­umn 1.2 ist mit ein­er einzi­gen Aus­nahme das prinzip­iell gle­iche Vorge­hen ange­sagt. Diese einzige Aus­nahme: Da die größte Zeit­ein­heit der Tag ist, erzeu­gen Sie keine Spalte für das Argu­ment w (Week/Woche) son­dern begin­nen mit dem d (day/Tag). Und logis­cher­weise beziehen Sie sich auf die Spalte Col­umn 1.2. Dem „Gesetz” fol­gend, dass in ein­er Tabelle keine 2 Spal­ten die gle­iche Über­schrift haben kön­nen, wird den von Ihnen vorgegebe­nen Über­schriften (Spal­tenna­men) automa­tisch ein .1 automa­tisch ange­hängt.

Hin­weis: Da ich aus­ge­sprochen faul bin, 😎 erstelle ich diese eben erzeugten Spal­ten nicht über die GUI son­dern über Spalte hinzufü­gen | Benutzerdefinierte Spalte und schreibe eine rel­a­tiv kurze Formel. Diese kopiere ich für jeden neue Spalte und ändere nur die rel­e­van­ten Argu­mente entsprechend. Das will ich hier jet­zt nicht aus­führen, aber vielle­icht ist das ein klein­er Anreiz für Sie, in den Bere­ich der Sprache M etwas hinein zu schnup­pern.

Mit jenen Werten, die in den eben gener­ierten Spal­ten ste­hen, kann Pow­er Query „natür­lich” nicht rech­nen, denn durch den Zusatz der Zeit­ein­heit sind es ja Texte. Darum markieren Sie die 7 Spal­ten W .. M.1 und wählen auf beliebigem Wege die Möglichkeit, Werte zu erset­zen. Im 1. Schritt wer­den Sie das w (das kleine w!) durch nichts erset­zen, sie lassen also das untere Textfeld ein­fach leer. Anschließend der gle­iche Vor­gang für die weit­eren Zeit­ein­heit­en d, h und m. Nun ste­hen nur noch Zif­fern oder der Wert null in den neu gener­ierten Spal­ten, und damit kann Pow­er Query Rechen­op­er­a­tio­nen durch­führen. Oder doch nicht? Nein, das sind Zif­fern (also Text) und keine Zahlen, was auch ganz klar an der links­bündi­gen Aus­rich­tung erkennbar ist. Um das zu kor­rigieren, ändern Sie bei immer noch beste­hen­der Markierung der 7 Spal­ten via Recht­sklick in eine der markierten Über­schriften den Daten­typ auf Ganze Zahl.

Markieren Sie nun auss­chließlich die Spalte W, Trans­formieren | Stan­dard | Mul­ti­plizieren und tra­gen Sie in das Eingabefeld die Zahl 10080 ein, denn 1 Woche hat ja 7*24*60, also 10.080 Minuten. Umge­hend wer­den die derzeit dort ste­hen­den Zahlen mit dem eben im Dia­log einge­tra­ge­nen Wert mul­ti­pliziert und somit ste­hen nun in Spalte W die berech­neten Minuten für den entsprechen­den Zeitraum. – In Spalte D gehen Sie gle­icher­maßen vor, nur geben Sie als Mul­ti­p­lika­tor den Wert 1440 ein. Die Spalte H wer­den sie mit 60 mul­ti­plizieren und die Spalte M kann natür­lich so bleiben, denn es sind ja schon die Minuten. Anschließend behan­deln sie entsprechend die Spal­ten D.1 und H.1. Der jew­eils getren­nte Durch­lauf ist erforder­lich, da diese Berech­nung stets nur in ein­er einzel­nen Spalte durchge­führt wer­den kann. Müh­sam ernährt sich das Eich­hörnchen… 😉 

Der näch­ste Schritt soll nun sein, dass zeilen­weise die eben berech­neten Werte und die ohne Berech­nung bere­its existieren­den Minuten sum­miert wer­den. Dazu markieren Sie die Spal­ten W bis M.1, Spalte hinzufü­gen | Sta­tis­tiken | Summe. Rech­nen Sie gerne nach, das Ergeb­nis stimmt. 😉

▲ nach oben …

Der Optik wegen

Der fol­gende Schritt dient in erster Lin­ie der besseren, über­sichtlicheren Darstel­lung. In den Spal­ten Col­umn 1.1 und Col­umn 1.2 haben sie ja den Wert null durch die Zahl 0 erset­zt, weil son­st Fehler bei der Berech­nung aufge­treten wären. Da gle­ich diese bei­den Spal­ten wieder in die ursprüngliche Darstel­lung vere­inigt wer­den sollen, markieren Sie bei­de Spal­ten und erset­zen nun 0 durch null. Die bei­den Spal­ten bleiben gemein­sam markiert, Trans­formieren | Spal­ten zusam­men­führen | Trennze­ichen: Leerze­ichen und als Neuer Spal­tenname kön­nen Sie bere­its an dieser Stelle beispiel­sweise Raw­Da­ta ein­tra­gen.

Markieren Sie nun die Spal­ten W bis M.1 und löschen Sie diese durch einen Klick auf Entf oder alter­na­tiv über das Kon­textmenü. Als vor­let­zte Aktion wer­den sie die Spalte Addi­tion in beispiel­sweise Minuten umbe­nen­nen.

▲ nach oben …

Prinzip­iell ist ja für jeden Wert von W/D/H_1 bis W/D/H_3 ein kor­rek­tes Ergeb­nis gegeben. Und wenn Sie es sich ein­fach machen wollen, kann diese Ansicht auch so bleiben, wie sie ist. In diesem Fall markieren Sie im Link­ten Seit­en­fen­ster Tabelle1 und beispiel­sweise via Datei | Schließen & laden in… | Nur Verbindung erstellen und acht­en Sie darauf, dass auch alle weit­eren Abfra­gen ‑mit Aus­nahme von Append1- als Nur Verbindung gekennze­ich­net sind. Die Query Append1 nun entwed­er in einem neuen Tabel­len­blatt oder an definiert­er Posi­tion im Tabel­len­blatt Tabelle1 spe­ich­ern. Sollte Append1 auch als Nur Verbindung existieren (was dur­chaus denkbar ist), dann gehen Sie diesen Weg, um die Abfrage in ein Tabel­len­blatt zu laden.

Allerd­ings entspricht das derzeit­ige Ergeb­nis nicht der Wun­sch-Vor­gabe des Fragestellers. Aber auch das lässt sich mit Pow­er Query ver­wirk­lichen. Auch wenn es vielle­icht der eine oder andere Schritt mehr ist als es auf den ersten Blick scheint …

Aktivieren Sie erforder­lichen­falls die Abfrage Append1.Erstellen Sie entwed­er über Start | Ver­wal­ten | Dup­likat oder einen Recht­sklick auf diese Query im linken Seit­en­fen­ster ein­fach Duplizieren. Benen­nen Sie die so erstellte Abfrage ide­al­er­weise sofort um, ich nenne sie X 1. Wieder­holen Sie diese Duplizierung der Query Append1 weit­ere 2 mal und vergeben Sie den Namen X 2 und X 3. Wählen Sie nun X 1 und fil­tern Sie die nach dem Begriff W/D/H_1. Ent­fer­nen Sie nun die 1. Spalte (Name: WDH). Jet­zt Reg­is­ter Spalte hinzufü­gen | Index und ein 0‑basierte Index wird hinzuge­fügt. – Gle­ich­es Vorge­hen mit den Abfra­gen X 2 und X 3. Und nun spe­ich­ern Sie die Abfrage X 1 auch unter Nur Verbindung erstellen, wodurch das auch für die bei­den anderen X – Abfra­gen durchge­führt wird.

Auf in die let­zte Runde! Aktivieren Sie die Query X 1. Start | Kom­binieren | Abfra­gen zusam­men­führen ▼ erweit­ern | Abfra­gen als neue Abfrage zusam­men­führen. Wählen Sie X 2 als neue Abfrage und verknüpfen Sie die bei­den Queries über die Spalte Index. Belassen Sie Join-Art bei der vorgegebe­nen Auswahl. Erweit­ern Sie nun die neue Spalte X 2, acht­en Sie darauf, dass das Häkchen bei Ursprünglichen Spal­tenna­men als Prä­fix ver­wen­den nicht geset­zt ist und belassen Sie das Häkchen bei W/D/H_2 und Minuten. Das Ergeb­nis ist eine neue Abfrage mit dem Namen Merge1. Diese Abfrage nutzen Sie als Basis, als erste Abfrage, um auf fast gle­ichem Wege X 3 mit der „erweit­erten” Merge1 zusam­men­zufü­gen. „Fast” gle­ich­er Weg, weil  Sie im ersten Schritt nach Kom­binieren nur Abfra­gen zusam­men­führen wählen (also nicht als neue Abfrage), der Rest ist wie beschrieben. Und dass die Über­schriften automa­tisch angepasst wer­den, das ken­nen Sie ja schon. – Jet­zt nur noch die Spalte Index löschen und das Ergeb­nis „ste­ht”. 😆 

Bleibt nur noch meine Muster-Lösung, die Sie sich hier herun­ter­laden kön­nen.

▲ nach oben …

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

Dann würde ich mich über einen Beitrag (z.B. 1,00€) Ihrer­seits freuen …


Unab­hängig davon: Wenn Sie nicht solch ein Fan von „Klicke di Klick” sind und lieber mit Formeln und Funk­tio­nen arbeit­en, dann gibt es für diese Auf­gabe einen Weg, der Ihnen gewiss mehr liegt. Dur­chaus anspruchsvoller aber (aus mein­er Sicht) auch erhe­blich mehr „sexy” und effek­tiv­er! Das (spendenpflichtige | XV) File und Beschrei­bung sowie zusät­zliche Infor­ma­tio­nen erhal­ten Sie als Lösung 2 auf eine Mail-Anfrage und ich ver­sichere Ihnen, dass ich Ihre E‑Mail-Adresse nicht weit­er geben werde. Ich sel­ber ersticke in der Flut von Spam-Mails, das mute ich nie­mand anderem zu.

Ref­er­ence: #4708 LT:LN

Dieser Beitrag wurde unter Datum & Zeit, Datum und Zeit, Foren-Q&A, Join-Art, Power Query, PQ-Formeln (Sprache M), Zeit-Funktionen abgelegt und mit , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.