Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

In diesem Blogbeitrag werden wir meine Lösung für untersuchen . Für diese Herausforderung haben wir LuckyTemplates‘ erste Herausforderung „Problem der Woche“ noch einmal aufgegriffen, bei der wir einen ewigen Feiertagskalender aus einer Mischung spezifischer und relativer Daten erstellt haben. Aber dieses Mal werden wir nur Power Query verwenden . Das vollständige Video dieses Tutorials können Sie unten in diesem Blog ansehen.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn Sie bei der eigentlichen Problemaufschlüsselung nicht weiterkommen, können Sie die noch einmal durchgehen , um zu sehen, ob einer der Ansätze Elemente enthält, die Ihnen bei dieser Herausforderung helfen können.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Beim Lesen der Einsendungen habe ich eine Mischung aus Leuten gesehen, die die Benutzeroberfläche nutzten und benutzerdefinierte Funktionen schrieben , um einen ewigen Kalender zu erstellen. Es hat Spaß gemacht, jeden Eintrag zu analysieren, und wenn Sie sich inspirieren lassen möchten, empfehle ich Ihnen, dasselbe zu tun.

Als ich dieses Szenario selbst durchgearbeitet habe, habe ich letztendlich mehrere Lösungen entwickelt. Das, für das ich mich entschieden habe, veranschaulicht am besten, wie man ein Problem nicht nur in kleinere Teile zerlegen , sondern diese auch sichtbar machen kann . Dies ist sehr hilfreich, wenn ein Fehler oder unerwartete Ergebnisse auftreten.

Inhaltsverzeichnis

Der Ausgangspunkt für die Erstellung eines ewigen Kalenders

Dieser rohe Feiertagstisch ist unser Ausgangspunkt. Um ein Datum zusammenzusetzen, benötigen wir für bestimmte Daten ein Jahr, einen Monat und einen Tag. Es fehlt nur noch die Jahreszahl.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Aber für relative Daten müssen wir etwas mehr Arbeit leisten. Zunächst müssen wir diese Tagesspalte sowohl in die Zahl als auch in den Wochentag aufteilen. Sehen wir uns diese Schritte noch einmal an.

Abrufen der Jahre aus der Datumstabelle

Um diese Lösung dynamisch zu gestalten, werde ich die Jahre aus der Datumstabelle abrufen . In der Bearbeitungsleiste sehen Sie, dass ich eine Projektion verwendet habe, um eine einspaltige Tabelle aus meiner Datumstabelle zu erhalten. Dies wird natürlich Duplikate enthalten. Um diese zu entfernen, habe ich Table.Distinct hinzugefügt .

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn ich auf den weißen Bereich neben einer dieser Tabellen klicke, sehen Sie auch eine Liste mit den einzelnen Jahren, die in meiner Datumstabellenabfrage vorhanden sind.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Uns wurde ein Monatsname gegeben , wir benötigen jedoch tatsächlich eine Monatsnummer . Wenn wir nun ein Jahr mit einem Monatsnamen verketten, können wir die Funktion „Date.From“ verwenden , um den ersten Tag dieses Monats als Datumswert zurückzugeben.

Durch das Hinzufügen von Date.Month bleibt uns nur noch die Monatszahl für dieses bestimmte Datum. Für Januar wird eine 1 zurückgegeben. Für Februar wird eine 2 zurückgegeben und so weiter.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Abrufen der Zahl aus der Tagesspalte

Um die Zahl aus der Tagesspalte zu erhalten, haben wir uns entschieden, die Spalte nicht zu teilen und stattdessen den Wert zu extrahieren. Wie Sie in der Bearbeitungsleiste sehen können, haben wir Text.BeforeDelimiter verwendet und dieses Leerzeichen verwendet, um den rechten und linken Teil dieser Textzeichenfolge zu identifizieren.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn kein Platz vorhanden ist, möchten wir alles zurückgeben, was in der Tagesspalte übrig bleibt. Für den ersten Datensatz wird also eine 1 zurückgegeben. Für den zweiten Datensatz, der dieses Leerzeichen enthält, wird der erste Teil der Textzeichenfolge zurückgegeben, das Wort Third .

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wir werden einen ähnlichen Ansatz verwenden, um den Datumsnamen zu erhalten, verwenden jedoch die Funktion List.PositionOf . Dies gibt den nullbasierten Offset des Werts in der als erstes Argument übergebenen Liste zurück und gibt -1 zurück, wenn der Wert nicht in dieser Liste erscheint.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Für den ersten Datensatz wird der Wert 1 übergeben, der in unserer Liste nicht vorhanden ist. Aus diesem Grund wird der Wert -1 zurückgegeben. Für den zweiten Datensatz wird der Wert Monday zurückgegeben .

Es übergibt das an unsere Funktion und gibt eine 1 zurück, da es das zweite Element in unserer Liste ist. Als Nächstes ersetzen wir alle -1-Werte durch einen Nullwert .

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Zu diesem Zeitpunkt haben wir alle Bausteine ​​erstellt, die wir zum Aufrufen der benutzerdefinierten Funktion benötigen.

Aufrufen der benutzerdefinierten Funktion für den ewigen Feiertagskalender

In der Formelleiste können wir sehen, dass die Funktion vier Argumente akzeptiert: ein Jahr , einen Monat , eine Zahl und einen Wochentag .

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Aber wie wird dieser Datumswert bestimmt? Wir verwenden List.PositionOf erneut, um einen numerischen Wert für die Zahl zu erhalten. Wir haben eine Liste mit dem ersten, zweiten, dritten und vierten. Wenn wir die Zahl an List.PositionOf übergeben , wird der auf Null basierende Offset zurückgegeben.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Auch hier gilt: Wenn ein Wert nicht vorhanden ist, wird -1 zurückgegeben. Für den ersten Datensatz übergeben wir also den Wert 1. 1 ist in dieser Liste nicht vorhanden, weshalb sie den Wert -1 zurückgibt. Für den zweiten Datensatz übergeben wir den Wert Third, das dritte Element in unserer Liste. Dies gibt den Wert 2 zurück.

Erstellen einer Liste mit Terminen

Lassen Sie uns nun eine Liste mit Daten erstellen. Wir bestimmen das Startdatum für diesen Monat, bestimmen die Anzahl der Tage in diesem Monat und verwenden List.Dates , um eine Liste mit allen Tagen in diesem Monat zu erstellen.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Als nächstes verwenden wir List.Select, um nur die Daten beizubehalten, die an einem bestimmten Wochentag liegen.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn wir auf die Seite neben einer dieser Listen klicken, sehen wir, dass sie nur diese vier Elemente enthält.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Anwenden bedingter Logik

Abschließend wenden wir bedingte Logik an, um ein Datum zu erstellen oder abzurufen. Wenn der Wochentag null ist , was bedeutet, dass wir ein bestimmtes Datum haben, können wir das intrinsische #date verwenden , um einen Datumswert zu erstellen.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn die Zahl dem letzten Wert entspricht, können wir die Funktion List.Reverse verwenden , um die Reihenfolge in der Liste umzukehren und den ersten Wert zu extrahieren.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn wir diese aufsteigende Reihenfolge in absteigend ändern möchten, können wir jederzeit das letzte Datum aus diesem Datumsbereich extrahieren. Es spielt keine Rolle, ob die Liste vier oder fünf Elemente enthält. Durch Umkehren der Bestellung und Herausnehmen des ersten Artikels haben wir immer das letzte Datum.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Für alle anderen Fälle verwenden wir List.Skip .

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wir können den Wert basierend auf dieser Position in der Liste extrahieren. Für den Erntedankfesttag ist die Zahl viert, und viert gibt eine 3 zurück. Dadurch werden die ersten drei Werte in der Liste übersprungen und immer das vierte Element zurückgegeben.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Fassen wir alles zusammen und gehen wir zur Lösungsabfrage. Für den Quellschritt rufen wir die RAW-Feiertagstabelle auf. Als Nächstes fügen wir eine Spalte hinzu, die eine Liste mit Datumsangaben zurückgibt.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Überprüfung des M-Codes für den ewigen Feiertagskalender

Lassen Sie uns den M-Code für die Spalte überprüfen. Für jede Zeile in der Tabelle haben wir eine Tabelle verschachtelt, die die unterschiedlichen Jahre aus der Datumstabelle enthält. Dann haben wir die Werte in dieser Jahresspalte transformiert, indem wir die benutzerdefinierte Funktion aufgerufen haben.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Um die benutzerdefinierte Funktion aufrufen zu können, müssen wir natürlich zunächst einige Einstellungen vornehmen. Wir müssen die Monatszahl , den Zahlenwert und natürlich den Wochentag ermitteln . Dann haben wir aus dieser verschachtelten Tabelle die Liste mit Datumsangaben geführt.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Wenn wir im Leerraum zur Seite klicken, können wir unten eine Vorschau dieser Liste sehen.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Der nächste Schritt besteht darin, diese Liste zu erweitern und CelebratedOnDate hinzuzufügen .

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Dies ist die Logik, die wir bei dieser Berechnung verwendet haben: Wenn das Datum auf einen Samstag fällt, subtrahieren wir einen Tag, sodass wir auf einem Freitag landen. Wenn es ein Sonntag ist, fügen wir einen Tag hinzu, um auf einem Montag zu landen. Wenn es kein Samstag oder Sonntag ist, dann wollen wir eine Null.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Der letzte Schritt besteht schließlich darin, die Typen zu ändern.

Ewiger Feiertagskalender – POTW #12 (Power Query Solution)

Abschluss

Nur eine kurze Erinnerung daran, dass eine fortlaufende Serie ist, die jeden 1. und 3. Mittwoch im LuckyTemplates-Forum stattfindet. Das in der ersten Woche veröffentlichte Problem erfordert eine DAX-basierte Lösung, während das Problem der dritten Woche eine auf Power Query basierende Lösung erfordert.

Wenn Ihnen der in diesem POTW behandelte Inhalt gefallen hat, abonnieren Sie bitte den TV-Kanal LuckyTemplates, um mehr zu erfahren. Wir veröffentlichen ständig eine große Menge an Inhalten von mir selbst und einer Reihe von Inhaltserstellern, die sich alle dafür einsetzen, die Art und Weise zu verbessern, wie Sie LuckyTemplates und die Power Platform nutzen.

Melissa


So speichern und laden Sie eine RDS-Datei in R

So speichern und laden Sie eine RDS-Datei in R

Sie erfahren, wie Sie Objekte aus einer .rds-Datei in R speichern und laden. In diesem Blog wird auch behandelt, wie Sie Objekte aus R in LuckyTemplates importieren.

Was ist Self in Python: Beispiele aus der Praxis

Was ist Self in Python: Beispiele aus der Praxis

Was ist Self in Python: Beispiele aus der Praxis

First N Business Days Revisited – Eine DAX-Codierungssprachenlösung

First N Business Days Revisited – Eine DAX-Codierungssprachenlösung

In diesem Tutorial zur DAX-Codierungssprache erfahren Sie, wie Sie die GENERATE-Funktion verwenden und einen Kennzahltitel dynamisch ändern.

Präsentieren Sie Einblicke mithilfe der Multi-Threaded-Dynamic-Visuals-Technik in LuckyTemplates

Präsentieren Sie Einblicke mithilfe der Multi-Threaded-Dynamic-Visuals-Technik in LuckyTemplates

In diesem Tutorial erfahren Sie, wie Sie mithilfe der Multi-Threaded-Dynamic-Visuals-Technik Erkenntnisse aus dynamischen Datenvisualisierungen in Ihren Berichten gewinnen.

Einführung in den Filterkontext in LuckyTemplates

Einführung in den Filterkontext in LuckyTemplates

In diesem Artikel werde ich den Filterkontext durchgehen. Der Filterkontext ist eines der Hauptthemen, über die sich jeder LuckyTemplates-Benutzer zunächst informieren sollte.

Beste Tipps zur Verwendung der Apps im LuckyTemplates-Onlinedienst

Beste Tipps zur Verwendung der Apps im LuckyTemplates-Onlinedienst

Ich möchte zeigen, wie der LuckyTemplates Apps-Onlinedienst bei der Verwaltung verschiedener Berichte und Erkenntnisse aus verschiedenen Quellen helfen kann.

Analysieren Sie Gewinnmargenänderungen im Laufe der Zeit – Analysen mit LuckyTemplates und DAX

Analysieren Sie Gewinnmargenänderungen im Laufe der Zeit – Analysen mit LuckyTemplates und DAX

Erfahren Sie, wie Sie Ihre Gewinnmargenänderungen mithilfe von Techniken wie Kennzahlenverzweigung und der Kombination von DAX-Formeln in LuckyTemplates ermitteln.

Materialisierungsideen für Datencaches in DAX Studio

Materialisierungsideen für Datencaches in DAX Studio

In diesem Tutorial werden die Ideen der Materialisierung von Datencaches und deren Auswirkungen auf die Leistung von DAXs bei der Bereitstellung von Ergebnissen erläutert.

Geschäftsberichte mit LuckyTemplates

Geschäftsberichte mit LuckyTemplates

Wenn Sie bisher noch Excel verwenden, ist dies der beste Zeitpunkt, LuckyTemplates für Ihre Geschäftsberichtsanforderungen zu verwenden.

Was ist LuckyTemplates Gateway? Alles was du wissen musst

Was ist LuckyTemplates Gateway? Alles was du wissen musst

Was ist LuckyTemplates Gateway? Alles was du wissen musst