Moin zusammen, ich bin Euch noch den Link zu der Artikelreihe über 'Environments' schuldig, die ich zusammen mit Imke Feldmann geschrieben habe. Hier geht's lang: ssbi-blog.de/the-environment-concept-in-m-for-power-query-and-power-bi-desktop/ 😉
Lars, deine Videos sind der Hammer, du erklärst alles super Schritt für Schritt. Genau dieses Szenario in diesem Video hat mich vor einiger Zeit ein Kollege einmal gefragt. Einfach Perfekt. So, wie du es zuerst erklärt hast, die Version hätte ich auch irgendwie hin bekommen, aber mir gefällt die 2. (kompliziertere) Variante total gut, auf das wäre ich im Leben nie drauf gekommen. Danke Danke Danke 😊 Ich arbeite eigentlich mit Excel und Power Query schon seit einiger Zeit und dachte, ich kenn mich ganz gut aus, aber ich lerne jeden Tag neu dazu. Ich hoffe du machst noch viele solcher Videos 😉
Meine Güte, was ist denn hier los?! Ich bekomme in letzter Zeit viele solcher Kommentare und hüpfe vor Freude förmlich durch den Raum. Ich bin TOTAL happy, dass Dir das hilft. Danke fürs Zuschauen und ich drehe weiter Videos, wie es mir die Zeit erlaubt. Kein Ende in Sicht ;-)
Hallo Lars, vielen Dank wieder Megabeitrag!! Kann man eigentlich die aufgespannten Daten wieder zurücktransformieren in Spalten von/bis nachdem man zb. Die Daten nach bestimmten Kriterien gefiltert hat? Die Spalten von/bis sollen dann wieder die Daten von zusammenhängenden Daten beinhalten. Geht das? Ach und bietest Du demnächst wieder Power Query für Fortgeschrittene an? Danke und Gruß von der Nordsee!
Hi Thorsten, danke fürs Feedback 🙂 Meinst Du sowas?! let Quelle = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwMFTSUTIw1DM01DMyMDIAcowN9QyMQRyQjFtmemmRgqFCUX5JapGCR2pOrlKsDrI+AxOYUkNTPUMDEMcISV9STmIpXGMsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [FIGUR = _t, #"VON DATUM" = _t, #"BIS DATUM" = _t, TEXTFELD = _t]), #"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"FIGUR", Int64.Type}, {"VON DATUM", type date}, {"BIS DATUM", type date}, {"TEXTFELD", type text}}), #"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Dates", each List.Transform( {Number.From([VON DATUM])..Number.From([BIS DATUM])} , each Date.From(_))), #"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"VON DATUM", "BIS DATUM"}), #"Erweiterte Dates" = Table.ExpandListColumn(#"Entfernte Spalten", "Dates"), #"Geänderter Typ1" = Table.TransformColumnTypes(#"Erweiterte Dates",{{"Dates", type date}}), #"Gruppierte Zeilen" = Table.Group(#"Geänderter Typ1", {"FIGUR", "TEXTFELD"}, {{"von", each List.Min([Dates]), type nullable date}, {"bis", each List.Max([Dates]), type nullable date}}) in #"Gruppierte Zeilen" Über die Gruppieren-Funktion kannst Du über MIN() und MAX() wieder auf die [Von Datum]- und [Bis Datum]-Spalten zurück... Ich hoffe, dass war was Du meinst. bzgl. der Schulungen: Danke für Dein Interesse. Offene Trainings habe ich momentan nicht im Plan, weil der Kalender wirklich randvoll ist. Sobald sich das ändert, seid Ihr hier die ersten, die das erfahren werden ;-) LG, Lars
@@LarsSchreiber Hallo, vielen Dank noch einmal! Leider nicht ganz. Jetzt wird ja jeweils das erste und das letzte Datum ausgegeben über alle Datensätze. Es könnte ja Fälle geben die mehrere zusammenhängende Datumsreihen haben (in meinem Fall Fehlzeiten) Manchmal auch nur ein Tag. Dann müsste pro Pers. Nr wieder teilweise mehrere Datensätze mit von/bis ausgegeben werden. Ziel soll dann sein, zu sagen wie oft jemand krank war! Ich hoffe, ich habe es verständlich ausgedrückt ☺Lieben Dank vorab!
Hallo Lars, vielen Dank für das (wieder mal) sehr lehrreiche Video. Eine Frage beschäftigt mich: Käme man bei der zweiten Variante nicht auch mit Bordmitteln zum Ziel, wenn man nach deinem Join die Tabelle extrahiert, eine Bedingte Spalte hinzufügt, in der man prüft, ob das Datum größer als das von Datum und kleiner als das bis Datum ist und das Ergebnis dann nach "Bedingung ist WAHR" filtert?
Hi Andreas, ich habe das Video nicht mehr in jedem Detail im Kopf, aber es klingt so, als wenn Deine Version auch funktionieren würde. Liebe Grüße, Lars
Hallo Liebe Lars, wow, ein Super Video. Für einen E-Carsharing-Betreiber hat sich die Fragestellung aufgetan, wie brav schließen die Kunden bei Reservierungsende an die Ladevorrichtung an. Haben wir Zeitstempel für Reservierungsbeginn und Reservierungsende und irgendwo dazwischen ist ein Zeitstempel von der Wallbox, wann der Ladestart erfolgt ist. Also genau invers zu deinem Video. Aber das hat trotzdem geklappt. Nun habe ich über zwei Jahre über 15 k Datensätze. Spannend. Habe die Abfrage nun gestartet und während ich diesen Kommentar geschrieben haben, hat er gerade mal 250 Sätze fertig und 800 MB Daten erzeugt. Vielleicht muss ich mir noch was leichteres Einfallen lassen? Cool finde ich die kleinen Tipps und Hinweise zur Sprache M. Das gibt viele aha. Und natürlich ist es auch sehr hilfreich in der Muttersprache etwas zu erfahren. Danke und schöne Grüße vom Bodensee
Hi, das sollte performanter gehen. Welche der von mir gezeigten Methoden nutzt Du?! Die Expansion der Tabelle, oder die andere? Die Expandierte Tabelle könnte die schnellere Version sein! LG, Lars
Exakt was ich gesucht habe, funktioniert auch prima, allerdings ist es bei sehr umfangreichen Daten extrem zeitaufwändig. Ich vermute, dass der Zwischenschritt mit dem "Lookup" die ohnehin schon umfangreichen Daten noch komplexer macht, um darauf im Nachgang das Datum zu filtern. In der Praxis möchte ich zu einem gebuchten Artikel einer Rechnung den zum Buchungszeitraum relevanten Einkaufspreis des Artikels ermitteln. In der Tabelle der Einkaufspreise gibt es mehrere Datensätze je Artikel mit einem Gültigkeitszeitraum.
Hi Sebastian, kannst Du mir anonymisierte Beispieldaten an lars@ssbi-blog.de schicken?! Dann werfe ich da bei Gelegenheit mal nen Blick rein und drehe evtl. auch ein Video dazu. Danke und LG, Lars
Moin zusammen, ich bin Euch noch den Link zu der Artikelreihe über 'Environments' schuldig, die ich zusammen mit Imke Feldmann geschrieben habe. Hier geht's lang: ssbi-blog.de/the-environment-concept-in-m-for-power-query-and-power-bi-desktop/ 😉
Ganz großes Kino.
Danke für diese Erklärungen.
Herzlich gern. Schön, wenn es geholfen hat 😊
Krass abgefahren. Respekt, dass Du Dir so etwas erarbeitest.
Danke, ich lerne von den Besten 😉
Das ist super erklärt, Lars! Sehr anschaulich und verständlich!
Bernd, das freut mich, denn das war mein Ziel ☺️
Lars, deine Videos sind der Hammer, du erklärst alles super Schritt für Schritt. Genau dieses Szenario in diesem Video hat mich vor einiger Zeit ein Kollege einmal gefragt. Einfach Perfekt. So, wie du es zuerst erklärt hast, die Version hätte ich auch irgendwie hin bekommen, aber mir gefällt die 2. (kompliziertere) Variante total gut, auf das wäre ich im Leben nie drauf gekommen. Danke Danke Danke 😊
Ich arbeite eigentlich mit Excel und Power Query schon seit einiger Zeit und dachte, ich kenn mich ganz gut aus, aber ich lerne jeden Tag neu dazu. Ich hoffe du machst noch viele solcher Videos 😉
Meine Güte, was ist denn hier los?! Ich bekomme in letzter Zeit viele solcher Kommentare und hüpfe vor Freude förmlich durch den Raum. Ich bin TOTAL happy, dass Dir das hilft. Danke fürs Zuschauen und ich drehe weiter Videos, wie es mir die Zeit erlaubt. Kein Ende in Sicht ;-)
Vielen Dank für das Video! Genau danach habe ich gesucht und werde morgen die erste Variante testen und dann sicher mehrfach einsetzen.
Viel Erfolg dabei 🙂
👍Danke!
Danke für Deine Wertschätzung 😊
Die zweite Variante gefällt mir viel besser... 🙂
Sie ist dennoch häufig die langsamere. Daher stelle ich beide Varianten vor 😉
Hallo Lars, vielen Dank wieder Megabeitrag!! Kann man eigentlich die aufgespannten Daten wieder zurücktransformieren in Spalten von/bis nachdem man zb. Die Daten nach bestimmten Kriterien gefiltert hat? Die Spalten von/bis sollen dann wieder die Daten von zusammenhängenden Daten beinhalten. Geht das? Ach und bietest Du demnächst wieder Power Query für Fortgeschrittene an? Danke und Gruß von der Nordsee!
Hi Thorsten, danke fürs Feedback 🙂 Meinst Du sowas?!
let
Quelle = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjQwMFTSUTIw1DM01DMyMDIAcowN9QyMQRyQjFtmemmRgqFCUX5JapGCR2pOrlKsDrI+AxOYUkNTPUMDEMcISV9STmIpXGMsAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [FIGUR = _t, #"VON DATUM" = _t, #"BIS DATUM" = _t, TEXTFELD = _t]),
#"Geänderter Typ" = Table.TransformColumnTypes(Quelle,{{"FIGUR", Int64.Type}, {"VON DATUM", type date}, {"BIS DATUM", type date}, {"TEXTFELD", type text}}),
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(#"Geänderter Typ", "Dates", each List.Transform(
{Number.From([VON DATUM])..Number.From([BIS DATUM])}
, each Date.From(_))),
#"Entfernte Spalten" = Table.RemoveColumns(#"Hinzugefügte benutzerdefinierte Spalte",{"VON DATUM", "BIS DATUM"}),
#"Erweiterte Dates" = Table.ExpandListColumn(#"Entfernte Spalten", "Dates"),
#"Geänderter Typ1" = Table.TransformColumnTypes(#"Erweiterte Dates",{{"Dates", type date}}),
#"Gruppierte Zeilen" = Table.Group(#"Geänderter Typ1", {"FIGUR", "TEXTFELD"}, {{"von", each List.Min([Dates]), type nullable date}, {"bis", each List.Max([Dates]), type nullable date}})
in
#"Gruppierte Zeilen"
Über die Gruppieren-Funktion kannst Du über MIN() und MAX() wieder auf die [Von Datum]- und [Bis Datum]-Spalten zurück... Ich hoffe, dass war was Du meinst. bzgl. der Schulungen: Danke für Dein Interesse. Offene Trainings habe ich momentan nicht im Plan, weil der Kalender wirklich randvoll ist. Sobald sich das ändert, seid Ihr hier die ersten, die das erfahren werden ;-)
LG,
Lars
@@LarsSchreiber Hallo Lars, danke für die schnelle Antwort! Ich komme erst morgen dazu es zu testen und berichte dann!
@@LarsSchreiber Hallo, vielen Dank noch einmal! Leider nicht ganz. Jetzt wird ja jeweils das erste und das letzte Datum ausgegeben über alle Datensätze. Es könnte ja Fälle geben die mehrere zusammenhängende Datumsreihen haben (in meinem Fall Fehlzeiten) Manchmal auch nur ein Tag. Dann müsste pro Pers. Nr wieder teilweise mehrere Datensätze mit von/bis ausgegeben werden. Ziel soll dann sein, zu sagen wie oft jemand krank war! Ich hoffe, ich habe es verständlich ausgedrückt ☺Lieben Dank vorab!
Hi Thorsten, kannst Du mir mal Beispieldateien zukommen lassen? Dann schaue ich drauf, sobald ich Zeit finde.
Hallo Lars, vielen Dank für das (wieder mal) sehr lehrreiche Video. Eine Frage beschäftigt mich: Käme man bei der zweiten Variante nicht auch mit Bordmitteln zum Ziel, wenn man nach deinem Join die Tabelle extrahiert, eine Bedingte Spalte hinzufügt, in der man prüft, ob das Datum größer als das von Datum und kleiner als das bis Datum ist und das Ergebnis dann nach "Bedingung ist WAHR" filtert?
Hi Andreas,
ich habe das Video nicht mehr in jedem Detail im Kopf, aber es klingt so, als wenn Deine Version auch funktionieren würde.
Liebe Grüße,
Lars
Hallo Liebe Lars,
wow, ein Super Video. Für einen E-Carsharing-Betreiber hat sich die Fragestellung aufgetan, wie brav schließen die Kunden bei Reservierungsende an die Ladevorrichtung an. Haben wir Zeitstempel für Reservierungsbeginn und Reservierungsende und irgendwo dazwischen ist ein Zeitstempel von der Wallbox, wann der Ladestart erfolgt ist. Also genau invers zu deinem Video. Aber das hat trotzdem geklappt. Nun habe ich über zwei Jahre über 15 k Datensätze. Spannend.
Habe die Abfrage nun gestartet und während ich diesen Kommentar geschrieben haben, hat er gerade mal 250 Sätze fertig und 800 MB Daten erzeugt. Vielleicht muss ich mir noch was leichteres Einfallen lassen?
Cool finde ich die kleinen Tipps und Hinweise zur Sprache M. Das gibt viele aha. Und natürlich ist es auch sehr hilfreich in der Muttersprache etwas zu erfahren.
Danke und schöne Grüße vom Bodensee
Hi, das sollte performanter gehen. Welche der von mir gezeigten Methoden nutzt Du?! Die Expansion der Tabelle, oder die andere? Die Expandierte Tabelle könnte die schnellere Version sein! LG, Lars
Exakt was ich gesucht habe, funktioniert auch prima, allerdings ist es bei sehr umfangreichen Daten extrem zeitaufwändig. Ich vermute, dass der Zwischenschritt mit dem "Lookup" die ohnehin schon umfangreichen Daten noch komplexer macht, um darauf im Nachgang das Datum zu filtern.
In der Praxis möchte ich zu einem gebuchten Artikel einer Rechnung den zum Buchungszeitraum relevanten Einkaufspreis des Artikels ermitteln. In der Tabelle der Einkaufspreise gibt es mehrere Datensätze je Artikel mit einem Gültigkeitszeitraum.
Hi Sebastian,
kannst Du mir anonymisierte Beispieldaten an lars@ssbi-blog.de schicken?! Dann werfe ich da bei Gelegenheit mal nen Blick rein und drehe evtl. auch ein Video dazu.
Danke und LG,
Lars