(Forum) PQ: Torverhältnis in Punkte umrechnen

Quelle: Foren-Beitrag bei MS Office Forum

Diese Lösung ist eine der weni­gen Aus­nah­men von meinen son­st strikt gehand­habten selb­st erstell­ten Regeln: Auch bei zahlen­den Kun­den ist für mich der The­men­bere­ich „Sport“ ein absolutes „NoGo“. In diesem Fall hat mich die mehr als irreführende Über­schrift des The­mas im Forum inter­essiert. Ich dachte, dass tat­säch­lich eine (reale) Uhrzeit in irgen­dein­er Form umgerech­net wer­den sollte. Hin­weis: Excel wan­delt ja automa­tisch ein in eine unfor­matierte Zelle eingegebenes Torver­hält­nis 11:22 „fre­undlicher­weise“ in den Datum-Uhrzeit-Wert 01.01.1900 11:22:00 um und rech­net intern mit dem Wert 1,47361111 was natür­lich zu abstrusen Ergeb­nis­sen führt.

Der Ver­lauf des Threads hat mich aber an ein­er Stelle der­ar­tig gen­ervt, dass ich ver­sucht bin, auf diesem Wege einem aus mein­er Sicht hyper­tro­phen „Helfer“ aufz­zueigen, dass Protzerei mit einem schein­baren aber aus­ge­sprochen beschränk­tem Hochwis­sen zu Recht als Ange­berei ange­se­hen wird und ins­beson­dere Ein­steiger in Sachen Pow­er Query eher ver­schreck­en kann, als diese User zu ermuti­gen, sich doch ein­mal mit PQ zu beschäfti­gen. Der „glo­r­re­iche Gipfel“ war dann ja auch ein fehler­haftes, nicht erwün­scht­es Ergeb­nis.
Es geht auch sehr, sehr viel trans­par­enter!

Natür­lich ist die Berech­nung der Punk­tev­er­gabe mit Pow­er Query möglich. Und ja, ich brauchte auch mehrere Anläufe, um ein gut nachvol­lziehbares Ergeb­nis auf der Basis „auss­chließlich Mausklicks“ zu erre­ichen. Ich räume ein, dass die Auf­gabe unter dem Aspekt der „Usabil­i­ty“ sehr viel leichter zu lösen gewe­sen wäre, wenn in der Excel-Tabelle die Spalte mit dem Torver­hält­nis als Text und nicht als Uhrzeit for­matiert gewe­sen wäre. Aber so hat mich der Ehrgeiz gepackt, eine kor­rek­te Lösung mit (auss­chließlich) diversen Mausklicks zu bew­erk­stel­li­gen. Qua­si als „Ehren­ret­tung“ des Tools Pow­er Query, welch­es ja auch in älteren Excel-Ver­sio­nen ab Excel 2016 inte­gri­ert ist oder als Tool (ab Excel 20102013) inte­gri­ert wer­den kann.

Nach dem Import der Dat­en aus der Mus­ter­datei (Beitrag #1) sah das Ergeb­nis erst ein­mal so aus:

Direkt nach dem Import: Dez­i­malzahl statt ##:##

Und ich war der Überzeu­gung, dass eine Löschung des zweit­en Schritts im recht­en Seit­en­fen­ster und eine sofor­tige Änderung des Daten­typs auf Text eine Darstel­lung brin­gen würde, die das Torver­hält­nis in gewün­schter Form aufzeigt. Also mit einem Dop­pelpunkt zwis­chen den bei­den numerischen Tor-Angaben. Damit lag er aber lei­der falsch. Nach Excel-Manier blieb es trotz unter­schiedlich­er Ver­suche bei der Darstel­lung als Dez­i­malzahl.

Schauen Sie sich im M-Code gerne ein­mal an, wie ich zum Ziel gelangt bin. Ich selb­st würde für einen Kun­den mit hoher Wahrschein­lichkeit einen „ele­gan­teren“ Weg zum Ziel wählen, aber hier an dieser Stelle stand für mich im Vorder­grund, dass es auch ohne händisch eingegebene Formeln und/oder Funk­tio­nen geht. Hier nun der von mir aufgeze­ich­nete M-Code:

let
    Quelle = Excel.CurrentWorkbook(){[Name=„Tabelle1”]}[Content],
    #„Geän­dert­er Typ” = Table.TransformColumnTypes(Quelle,{{„Torvrthältnis”, type num­ber}}),
    #„Duplizierte Spalte” = Table.DuplicateColumn(#„Geänderter Typ”, „Torvrthält­nis”, „Torvrthält­nis – Kopie”),
    #„Umbe­nan­nte Spal­ten” = Table.RenameColumns(#„Duplizierte Spalte”,{{„Torvrthältnis – Kopie”, „Tore_1”}}),
    Mul­ti­p­lika­tion­ss­palte = Table.TransformColumns(#„Umbenannte Spal­ten”, {{„Tore_1”, each _ * 24, type num­ber}}),
    Abgerun­det = Table.TransformColumns(Multiplikationsspalte,{{„Tore_1”, Number.RoundDown, Int64.Type}}),
    #„Duplizierte Spalte1” = Table.DuplicateColumn(Abgerundet, „Torvrthält­nis”, „Torvrthält­nis – Kopie”),
    #„Geän­dert­er Typ1” = Table.TransformColumnTypes(#„Duplizierte Spalte1”,{{„Torvrthältnis – Kopie”,
        type dura­tion}}),
    #„Extrahierte Minuten” = Table.TransformColumns(#„Geänderter Typ1”,
        {{„Torvrthält­nis – Kopie”, Duration.Minutes, Int64.Type}}),
    #„Umbe­nan­nte Spalten1” = Table.RenameColumns(#„Extrahierte Minuten”,{{„Torvrthältnis – Kopie”, „Tore_2”}}),
    #„Ent­fer­nte Spal­ten” = Table.RemoveColumns(#„Umbenannte Spalten1”,{„Torvrthältnis”}),
    #„Hinzuge­fügte benutzerdefinierte Spalte1” = Table.AddColumn(#„Entfernte Spal­ten”, „Punkte_1”,
        each if [Tore_1]>[Tore_2] then 2
    else if [Tore_1]<[Tore_2] then 0
    else 1),
    #„Hinzuge­fügte benutzerdefinierte Spalte2” = Table.AddColumn(#„Hinzugefügte benutzerdefinierte Spalte1”,
        „Punkte_2”, each if [Tore_2]>[Tore_1] then 2
    else if [Tore_2]<[Tore_1] then 0
    else 1),
    #„Andere ent­fer­nte Spal­ten” = Table.SelectColumns(#„Hinzugefügte benutzerdefinierte Spalte2”,{„Punkte_1”,
        „Punkte_2”})
in
    #„Andere ent­fer­nte Spal­ten”

M‑Code als Text-Datei

Wie in diesem Beitrag im let­zten Absatz erwäh­nt, kön­nen Sie mich bei Fra­gen gerne kon­tak­tieren. Grundle­gen­des zum The­ma M-Code erfahren Sie in diesem Blog-Beitrag.


Und hier, beim Stich­wort last but not least find­en Sie noch einen Hin­weis, wo und wie Sie Antworten auf eventuelle Fra­gen oder auch die aus­gear­beit­ete Datei bekom­men kön­nen. Grundle­gen­des zum The­ma M-Code lesen Sie hier im Blog nach.

Hin­weis: Novem­ber 2024: Das Forum mit der Orig­i­nal-Fragestel­lung ist seit einiger Zeit wegen Wartungsar­beit­en geschlossen. Wegen der prinzip­iell recht inter­es­san­ten Fargestel­lung habe ich mich entschlossen, diesen Beitrag (mit mein­er kor­rek­ten Lösung) jet­zt den­noch hier zu veröf­fentlichen.

 

Dieser Beitrag wurde unter Allgemein, Allgemein, Verschiedenes, Foren-Q&A, Musterlösungen, Ohne Makro/VBA, Power Query, PQ-Formeln (Sprache M) veröffentlicht. Setze ein Lesezeichen auf den Permalink.