Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

W tym poście na blogu przyjrzymy się mojemu rozwiązaniu . W tym wyzwaniu ponownie przyjrzeliśmy się pierwszemu wyzwaniu Problem tygodnia LuckyTemplates, w którym stworzyliśmy wieczny kalendarz świąt z połączenia konkretnych i względnych dat. Ale tym razem będziemy używać tylko dodatku Power Query . Możesz obejrzeć pełny film z tego samouczka na dole tego bloga.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Jeśli utkniesz na samym podziale problemu, możesz wrócić do , aby sprawdzić, czy w którymś z podejść istnieją elementy, które mogą pomóc w rozwiązaniu tego wyzwania.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Czytając zgłoszenia, widziałem mieszankę ludzi wykorzystujących interfejs użytkownika i piszących niestandardowe funkcje , aby stworzyć wieczny kalendarz. Analiza każdego wpisu była przyjemnością, a jeśli chcesz się zainspirować, zachęcam cię do zrobienia tego samego.

Kiedy sam pracowałem nad tym scenariuszem, stworzyłem wiele rozwiązań. Ten, z którym poszedłem, najlepiej ilustruje, jak można nie tylko rozbić problem na mniejsze części , ale także uczynić je widocznymi . Jest to bardzo pomocne w przypadku napotkania błędu lub nieoczekiwanych wyników.

Spis treści

Punkt wyjścia do stworzenia wiecznego kalendarza

Ten surowy świąteczny stół to nasz punkt wyjścia. Aby ułożyć datę, potrzebujemy roku, miesiąca i dnia dla określonych dat. Brakuje tylko roku.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Ale w przypadku dat względnych musimy wykonać trochę więcej pracy. Na początek musimy podzielić tę kolumnę dnia na liczbę i dzień tygodnia. Przeanalizujmy te kroki.

Pobieranie lat z tabeli dat

Aby uczynić to rozwiązanie dynamicznym, zamierzam pobrać lata z tabeli dat . Na pasku formuły widać, że użyłem projekcji, aby uzyskać tabelę jednokolumnową z mojej tabeli dat. To oczywiście będzie zawierało duplikaty. Aby je usunąć, dodałem Table.Distinct .

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Kiedy kliknę z boku w białe miejsce obok którejkolwiek z tych tabel, zobaczysz także listę z różnymi latami obecnymi w moim zapytaniu o tabelę dat.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Otrzymaliśmy nazwę miesiąca , ale tak naprawdę będziemy potrzebować numeru miesiąca . Teraz, kiedy połączymy rok z nazwą miesiąca, możemy użyć funkcji Date.From , aby zwrócić pierwszy dzień tego miesiąca jako wartość daty.

Dodając Date.Month , pozostaje nam tylko numer miesiąca dla tej konkretnej daty. Dla stycznia zwraca 1. Dla lutego zwraca 2 i tak dalej.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Uzyskiwanie liczby z kolumny dnia

Aby uzyskać liczbę z kolumny dnia, zdecydowaliśmy się nie dzielić kolumny i zamiast tego wyodrębnić wartość. Jak widać na pasku formuły, użyliśmy Text.BeforeDelimiter i wykorzystaliśmy tę spację do zidentyfikowania prawej i lewej części tego ciągu tekstowego.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Jeśli nie ma miejsca, chcemy zwrócić wszystko, co pozostaje w kolumnie dzień. Tak więc dla pierwszego rekordu, który zwraca 1. Dla drugiego rekordu, który zawiera tę spację, zwraca pierwszą część ciągu tekstowego, słowo Third .

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Zastosujemy podobne podejście, aby uzyskać nazwę daty, ale użyjemy funkcji List.PositionOf . Zwraca przesunięcie od zera wartości na liście przekazanej jako pierwszy argument i zwraca -1, jeśli wartość nie pojawia się na tej liście.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Dla pierwszego rekordu przekazuje wartość 1, której nie ma na naszej liście. Dlatego zwraca wartość -1. W przypadku drugiego rekordu zwraca wartość Monday .

Przekazuje to do naszej funkcji i zwraca 1, ponieważ jest to druga pozycja na naszej liście. Następnie zamienimy wszystkie wartości -1 na null .

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

W tym momencie utworzyliśmy wszystkie bloki konstrukcyjne potrzebne do wywołania funkcji niestandardowej.

Wywoływanie funkcji niestandardowej dla wiecznego kalendarza świąt

Na pasku formuły widzimy, że funkcja przyjmuje cztery argumenty: rok , miesiąc , cyfrę i dzień tygodnia .

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Ale w jaki sposób określa tę wartość daty? Ponownie użyjemy List.PositionOf , aby uzyskać wartość liczbową dla cyfry. Mamy listę zawierającą pierwszą, drugą, trzecią i czwartą. Kiedy przekazujemy liczbę do List.PositionOf , zwraca ona przesunięcie od zera.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Ponownie, jeśli wartość nie jest obecna, zwraca -1. Tak więc dla pierwszego rekordu przekazujemy wartość 1. 1 nie występuje na tej liście, dlatego zwraca wartość -1. W przypadku drugiego rekordu przekazujemy wartość Third, która jest trzecią pozycją na naszej liście. To zwraca wartość 2.

Tworzenie listy dat

Utwórzmy teraz listę dat. Określimy datę początkową dla tego miesiąca, określimy liczbę dni w tym miesiącu i użyjemy List.Dates do utworzenia listy zawierającej wszystkie dni w tym miesiącu.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Następnie użyjemy List.Select , aby zachować tylko te daty, które przypadają na określony dzień tygodnia.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Kiedy klikniemy obok dowolnej z tych list, zobaczymy, że zawiera ona tylko te cztery elementy.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Stosowanie logiki warunkowej

Na koniec zastosujemy logikę warunkową, aby skonstruować lub pobrać datę. Jeśli dzień tygodnia ma wartość null , co wskazuje, że mamy określoną datę, możemy użyć wewnętrznej #daty do skonstruowania wartości daty.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Jeśli cyfra jest równa ostatniej, możemy użyć funkcji List.Reverse , aby odwrócić kolejność na liście i wyodrębnić pierwszą wartość.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Jeśli chcemy zmienić ten porządek rosnący na malejący, zawsze możemy wyodrębnić ostatnią datę z tego zakresu dat. Nie ma znaczenia, czy na liście mamy cztery, czy pięć elementów. Odwracając kolejność i wyodrębniając pierwszą pozycję, zawsze mamy ostatnią datę.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

We wszystkich innych przypadkach używamy List.Skip .

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Możemy wyodrębnić wartość na podstawie tej pozycji na liście. W Święto Dziękczynienia cyfrą jest czwarta, a czwarta zwraca 3. Spowoduje to pominięcie pierwszych trzech wartości na liście i zawsze zwróci czwartą pozycję.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Złóżmy to wszystko razem i przejdźmy do zapytania o rozwiązanie. W kroku źródłowym nazywamy tabelę dat świąt RAW. Następnie dodamy kolumnę, która zwraca listę z datami.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Przeglądanie kodu M dla wiecznego kalendarza świąt

Sprawdźmy kod M dla kolumny. Dla każdego wiersza w tabeli zagnieżdżono tabelę zawierającą odrębne lata z tabeli dat. Następnie przekształciliśmy wartości w tej kolumnie roku, wywołując funkcję niestandardową.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Oczywiście, aby móc wywołać funkcję niestandardową, musimy najpierw przeprowadzić konfigurację. Musimy uzyskać numer miesiąca , wartość liczbową i oczywiście dzień tygodnia . Następnie z tej zagnieżdżonej tabeli zachowaliśmy listę z datami.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Kiedy klikniemy z boku w białym polu, możemy zobaczyć podgląd tej listy poniżej.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Następnym krokiem jest rozwinięcie tej listy i dodanie CelebratedOnDate .

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Oto logika, której użyliśmy w tym obliczeniu: jeśli data wypada w sobotę, odejmiemy dzień, aby wylądować w piątek. Jeśli jest to niedziela, dodamy dzień do lądowania w poniedziałek. Jeśli nie jest to sobota lub niedziela, chcemy mieć wartość null.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Ostatnim krokiem jest zmiana typów.

Wieczny kalendarz świąt — POTW #12 (rozwiązanie Power Query)

Wniosek

Tylko krótkie przypomnienie, że to ciągła seria, która odbywa się w każdą pierwszą i trzecią środę na forum LuckyTemplates. Problem opublikowany w pierwszym tygodniu wymaga rozwiązania opartego na języku DAX, podczas gdy problem w trzecim tygodniu wymaga rozwiązania opartego na dodatku Power Query.

Jeśli podobały Ci się treści omówione w tym POTW, zasubskrybuj kanał telewizyjny LuckyTemplates, aby uzyskać więcej. Cały czas publikujemy ogromną ilość treści ode mnie i wielu twórców treści, których celem jest ulepszenie sposobu, w jaki korzystasz z usługi LuckyTemplates i Power Platform.

Melisa

Leave a Comment

Dodawaj, usuwaj i zmieniaj nazwy kolumn w R za pomocą Dplyr

Dodawaj, usuwaj i zmieniaj nazwy kolumn w R za pomocą Dplyr

W tym samouczku omówimy pakiet dplyr, który umożliwia sortowanie, filtrowanie, dodawanie i zmianę nazw kolumn w języku R.

Funkcje zbierania w Microsoft Power Automate

Funkcje zbierania w Microsoft Power Automate

Odkryj różnorodne funkcje zbierania, które można wykorzystać w Power Automate. Zdobądź praktyczne informacje o funkcjach tablicowych i ich zastosowaniu.

Oceń wydajność kodu DAX w DAX Studio

Oceń wydajność kodu DAX w DAX Studio

Z tego samouczka dowiesz się, jak ocenić wydajność kodów DAX przy użyciu opcji Uruchom test porównawczy w DAX Studio.

Czym jest self w Pythonie: przykłady z życia wzięte

Czym jest self w Pythonie: przykłady z życia wzięte

Czym jest self w Pythonie: przykłady z życia wzięte

Jak zapisać i załadować plik RDS w R

Jak zapisać i załadować plik RDS w R

Dowiesz się, jak zapisywać i ładować obiekty z pliku .rds w R. Ten blog będzie również omawiał sposób importowania obiektów z R do LuckyTemplates.

Powrót do pierwszych N dni roboczych — rozwiązanie języka kodowania DAX

Powrót do pierwszych N dni roboczych — rozwiązanie języka kodowania DAX

Z tego samouczka języka kodowania DAX dowiesz się, jak używać funkcji GENERUJ i jak dynamicznie zmieniać tytuł miary.

Zaprezentuj spostrzeżenia przy użyciu wielowątkowej techniki dynamicznych wizualizacji w usłudze LuckyTemplates

Zaprezentuj spostrzeżenia przy użyciu wielowątkowej techniki dynamicznych wizualizacji w usłudze LuckyTemplates

W tym samouczku omówiono sposób korzystania z techniki wielowątkowych wizualizacji dynamicznych w celu tworzenia szczegółowych informacji na podstawie dynamicznych wizualizacji danych w raportach.

Wprowadzenie do filtrowania kontekstu w usłudze LuckyTemplates

Wprowadzenie do filtrowania kontekstu w usłudze LuckyTemplates

W tym artykule omówię kontekst filtra. Kontekst filtrowania to jeden z głównych tematów, z którym każdy użytkownik usługi LuckyTemplates powinien zapoznać się na początku.

Najlepsze wskazówki dotyczące korzystania z aplikacji w usłudze online LuckyTemplates

Najlepsze wskazówki dotyczące korzystania z aplikacji w usłudze online LuckyTemplates

Chcę pokazać, jak usługa online LuckyTemplates Apps może pomóc w zarządzaniu różnymi raportami i spostrzeżeniami generowanymi z różnych źródeł.

Analizuj zmiany marży zysku w godzinach nadliczbowych — Analizuj za pomocą LuckyTemplates i DAX

Analizuj zmiany marży zysku w godzinach nadliczbowych — Analizuj za pomocą LuckyTemplates i DAX

Dowiedz się, jak obliczyć zmiany marży zysku przy użyciu technik, takich jak rozgałęzianie miar i łączenie formuł języka DAX w usłudze LuckyTemplates.