Wyciąganie daty i czasu z tekstu w Power Query bez formuł

0
6
Rate this post

Nawigacja:

Intencja: szybkie wyłuskanie daty i godziny z „brudnego” tekstu

Odbiorca tych wskazówek stoi zwykle przed jednym zadaniem: z długich opisów, nazw plików lub zlepionych pól tekstowych trzeba wyciągnąć poprawną datę i godzinę, a potem robić na nich analizy. Bez znajomości języka M, bez pisania własnych formuł, maksymalnie na klikach w interfejsie Power Query.

Chodzi nie tylko o jednorazową akcję, ale o powtarzalny proces, który da się zastosować do wielu plików, folderów lub raportów – tak, aby kolejne odświeżenia danych nie wymagały ręcznej korekty.

Kontekst biznesowy: po co wyciągać datę i czas z tekstu bez formuł

Typowe źródła: raporty, logi, nazwy plików i opisy

Większość procesów raportowych opiera się na datach: daty raportów, daty zamówień, godziny logowań, czas rozpoczęcia i zakończenia zdarzeń. Problem w tym, że te informacje często nie trafiają do Power Query w czystej postaci, jako osobne kolumny typu Data czy Data/Godzina. Zamiast tego pojawiają się w różnych miejscach:

  • w jednej komórce, razem z tekstem opisowym (np. „Spotkanie z klientem 12.03.2023 o 10:00”);
  • w nazwie pliku (np. „Raport_20230501_klientA.xlsx”);
  • jako część dłuższego ciągu (np. „2023-05-01 13:45 – zakończono proces”);
  • w kolumnie tekstowej, ale bez zdefiniowanego typu (import z CSV lub TXT).

Analiza takich danych wymaga uporządkowania. Bez wydobycia daty i godziny w postaci prawdziwych typów danych nie da się wiarygodnie filtrować, grupować, tworzyć przedziałów czasowych czy wizualizacji. Wszystko zostaje na poziomie „surowego tekstu”, który trudno wykorzystać w modelach danych.

Brak znajomości języka M a potrzeba automatyzacji

W wielu organizacjach Power Query obsługują osoby nietechniczne: kontrolerzy, analitycy biznesowi, osoby z działu sprzedaży lub logistyki. Dział IT przygotowuje źródła, ale reszta pracy dzieje się już w Excelu lub Power BI. W takiej sytuacji język M – mimo że potężny – jest barierą. Liczy się możliwość zbudowania całej logiki na klikach, tak aby inni użytkownicy mogli ją odtworzyć bez wchodzenia w edytor zaawansowany.

Konsekwencja jest prosta: techniki wyciągania daty i czasu z tekstu muszą opierać się na:

  • wbudowanych poleceniach kart „Przekształć” i „Dodaj kolumnę”,
  • opcji „Kolumna z przykładów”,
  • zmianie typów danych wraz z lokalnymi ustawieniami,
  • operacjach podziału tekstu i wyodrębniania fragmentów.

Takie podejście zmniejsza ryzyko błędów, ułatwia dokumentację kroków i pozwala szybciej diagnozować problemy przy kolejnych odświeżeniach danych.

Zakres możliwości interfejsu bez pisania formuł

Co realnie da się zrobić bez ręcznego pisania kodu M? Interfejs Power Query pozwala na całkiem szeroki zestaw operacji, m.in.:

  • konwersję tekstu na datę, czas lub datę z czasem,
  • podział kolumn według delimitera (np. spacji, myślnika, podkreślnika),
  • podział według liczby znaków,
  • wyodrębnienie znaków z początku, końca lub środka tekstu,
  • użycie „Kolumny z przykładów” jako inteligentnego „ekstraktora”,
  • automatyczne wyciąganie części daty/czasu z pól DateTime (dzień, miesiąc, godzina itp.).

Granica pojawia się przy bardzo nieregularnych formatach, wielu różnych wzorcach dat w jednym polu lub konieczności zaawansowanych warunków. Tam interfejs może już nie wystarczyć i potrzebne są formuły. Jednak przy większości codziennych zadań biznesowych da się zbudować skuteczną transformację bez wchodzenia w język M.

Kluczowe pytanie startowe: jak powtarzalny jest format?

Przed pierwszą operacją w Power Query warto zadać sobie jedno kontrolne pytanie: czy format daty i czasu jest powtarzalny? Można to doprecyzować kilkoma dodatkowymi pytaniami:

  • Czy data ma stałą strukturę (np. zawsze „RRRR-MM-DD” albo zawsze „DD.MM.RRRR”)?
  • Czy pojawiają się różne warianty (np. „1.5.2023” i „01.05.23” w tej samej kolumnie)?
  • Czy data jest zawsze w tym samym miejscu w ciągu, np. po drugim podkreślniku w nazwie pliku?
  • Czy tekst to „wolna forma” wprowadzana przez ludzi, z błędami, skrótami, różnymi separatorami?

Im bardziej stabilny format, tym łatwiej oprzeć się na prostym podziale kolumny i zmianie typu. Im bardziej chaotyczny – tym większy udział będzie mieć „Kolumna z przykładów” oraz decyzja, czy bez formuł w ogóle da się utrzymać poprawność danych.

Jak Power Query „widzi” tekst, daty i czas – fundamenty

Podstawowe typy: Text, Date, Time, DateTime, DateTimeZone

Power Query operuje na kilku kluczowych typach danych związanych z czasem:

  • Text – surowy ciąg znaków, dokładnie taki jak w źródle. Żadna logika daty nie jest stosowana, wszystko traktowane jest jako litery/cyfry.
  • Date – reprezentacja kalendarzowej daty bez informacji o godzinie. Na takim typie działają funkcje i operacje dat (dzień tygodnia, różnice dat, filtrowanie zakresów).
  • Time – sama godzina (czas dnia) bez daty, zwykle wykorzystywana przy analizie godzin pracy, logowań czy przedziałów dziennych.
  • DateTime – połączenie daty i czasu w jednym polu (np. „2023-05-01 13:45:00”), często stosowane w logach czy systemach transakcyjnych.
  • DateTimeZone – DateTime z informacją o strefie czasowej; przydaje się rzadziej, głównie przy międzynarodowych systemach.

Dla wyciągania daty i godziny z tekstu kluczowe są trzy typy: Text, Date i DateTime. Przekształcenie z Text do jednego z tych typów jest głównym etapem, na który trzeba zwrócić uwagę przy pracy bez formuł.

Automatyczne „Wykryj typ danych” – pomoc czy przeszkoda

Power Query ma funkcję automatycznego wykrywania typów, która uruchamia się przy wczytywaniu danych lub po wybraniu polecenia „Wykryj typ danych”. Dla kolumn z datami może to być zarówno zaleta, jak i źródło błędów.

Zaleta: gdy kolumna zawiera czyste, jednorodne daty w standardowym formacie, automatyczne wykrycie typu Data lub Data/Godzina oszczędza pracy. Problemy pojawiają się, gdy:

  • kolumna ma mieszane formaty (np. część wartości to „01.05.2023”, część to tekst „brak danych”),
  • kolumna zawiera tekst, w którym przypadkowo występują ciągi podobne do dat,
  • ustawienia regionalne są inne niż format daty w źródle (np. polskie ustawienia kontra amerykańskie daty „MM/DD/YYYY”).

Dobrą praktyką jest przeanalizowanie pierwszego kroku „Zmieniono typ” w edytorze kroków. Czasem opłaca się go usunąć i samodzielnie, świadomie ustawić typ danych po wstępnym oczyszczeniu tekstu.

Znaczenie ustawień regionalnych przy interpretacji dat

Ten sam zapis tekstowy może oznaczać zupełnie inną datę w zależności od ustawień regionalnych. Przykład: „01/05/2023”. Dla polskich ustawień będzie to 1 maja, dla ustawień angielskich (USA) – 5 stycznia. Power Query korzysta z:

  • globalnych ustawień regionalnych (język systemu/Excel/Power BI),
  • ustawień nadanych konkretnemu krokowi konwersji („Zmień typ za pomocą lokalnych ustawień”).

Jeżeli źródło danych pochodzi z innego kraju niż Twoje środowisko pracy, bezpieczniej jest użyć opcji „Zmień typ za pomocą lokalnych ustawień” i wybrać region zgodny z formatem dat w źródle (np. „English (United States)” dla „MM/DD/YYYY”). Pozwala to uniknąć cichych przekłamań typu „01/02” interpretowanego raz jako 1 lutego, a raz jako 2 stycznia.

Kontrola poprawności w podglądzie danych

Po każdej konwersji tekstu na datę lub DateTime warto poświęcić minutę na szybki przegląd kolumny. Dwa krótkie pytania kontrolne pomagają wychwycić błędy:

  • Co wiemy? Wiadomo, jaki format powinien być prawidłowy (np. daty miesięczne z jednego roku, godziny pracy między 6:00 a 22:00).
  • Czego nie wiemy? Nie ma pewności, czy wszystkie wiersze spełniają ten schemat, czy pojawiają się nieliczne wyjątki.

Praktyczny krok to posortowanie po nowej kolumnie daty rosnąco i malejąco. Łatwo wtedy dostrzec:

  • błędne wartości (puste, „Error”),
  • daty spoza spodziewanego zakresu (np. rok 1900 lub 2100),
  • nietypowe godziny (np. 00:00, gdy nie powinno ich być).

Taki szybki „scan” podglądu często ujawnia problemy wcześniej niż kolejne etapy raportu.

Kalkulator, smartfon z wykresami, lupa i zegar na czarnym biurku
Źródło: Pexels | Autor: Nataliya Vaitkevich

Przegląd wbudowanych narzędzi „bez formuł” do pracy na tekście

Narzędzia z karty „Przekształć” przy czyszczeniu danych tekstowych

Karta „Przekształć” to podstawowe miejsce pracy przy oczyszczaniu tekstu, z którego potem wyciągana będzie data lub godzina. Kluczowe polecenia to:

  • Podziel kolumnę – według delimitera (np. spacja, podkreślnik, myślnik) lub według liczby znaków; pozwala rozbić „brudny” tekst na kilka prostszych fragmentów;
  • Oczyść – usuwa niedrukowalne znaki, zbędne spacje nietypowe dla zwykłego tekstu; przydatne przy danych z systemów, które dodają „ukryte” znaki sterujące;
  • Przytnij – obcina standardowe spacje z początku i końca tekstu, co pomaga w późniejszej konwersji na datę;
  • Zamień wartości – pozwala szybko podmienić np. przecinek na dwukropek w godzinach, myślnik na kropkę w datach, czy usunąć określony fragment tekstu.

Operacje na karcie „Przekształć” modyfikują istniejącą kolumnę. To wygodne, gdy ma się pewność co do działania, ale wymaga ostrożności – po serii przekształceń trudniej odtworzyć pierwotny tekst. W procesach wrażliwych warto duplikować kolumnę i przekształcać kopię.

Narzędzia z karty „Dodaj kolumnę”: przykład, warunek, wyodrębnienie

Karta „Dodaj kolumnę” umożliwia budowę logiki „obok” istniejących danych, bez ich nadpisywania. Przy pracy z datą i czasem z tekstu szczególnie przydatne są:

  • Kolumna z przykładów – narzędzie, które na podstawie kilku ręcznie wpisanych przykładów próbuje odgadnąć i zautomatyzować regułę; idealne do wyodrębniania daty lub godziny z niejednoznacznego tekstu;
  • Kolumna warunkowa – umożliwia proste „jeżeli… to…” bez pisania formuł, np. gdy trzeba rozróżnić, które rekordy zawierają poprawną datę, a które mają być oznaczone jako „błąd” lub „brak”;
  • Wyodrębnij tekst – pozwala wyciągnąć określony fragment: z lewej, z prawej, z środka lub między określonymi znakami; sprawdza się przy nazwach plików z datą w konkretnym miejscu.

Mocną stroną tych narzędzi jest to, że tworzą nowe kolumny. Oryginalny tekst pozostaje nietknięty, więc w razie pomyłki zawsze można wrócić do punktu wyjścia bez przebudowy całego zapytania.

„Przekształć” kontra „Dodaj kolumnę” – co jest bezpieczniejsze

Przy pracy bez formuł jednym z kluczowych wyborów jest to, czy nadpisywać dane, czy tworzyć nowe kolumny pomocnicze. Zestawienie podejść pokazuje tę różnicę:

AspektKarta „Przekształć”Karta „Dodaj kolumnę”
Wpływ na istniejące daneNadpisuje kolumnęPozostawia oryginał, dodaje nową kolumnę
Ryzyko utraty informacjiWyższe, jeśli kroków jest dużoNiższe, oryginał zawsze dostępny
Czytelność procesuMoże być mniej oczywista po wielu krokachŁatwiej śledzić kolejne wersje danych
Liczba kolumn w modeluNie rośnie, pracujemy na tych samych polachRośnie, jeżeli każdy etap to nowa kolumna
Możliwość porównania „przed” i „po”Utrudniona, trzeba cofać się po krokachŁatwa, obok siebie widać surowy tekst i wynik

Przy niejednoznacznych lub krytycznych danych (np. daty księgowań, terminy umów) bezpieczniej jest zacząć od karty „Dodaj kolumnę”, a dopiero po przetestowaniu logiki ewentualnie uprościć proces.

Wyciąganie daty z tekstu narzędziami „podziel” i „wyodrębnij”

Daty w przewidywalnym miejscu: nazwy plików, stałe formaty

Najprostsza sytuacja to tekst, w którym data występuje zawsze w tym samym miejscu albo jest otoczona tymi samymi znakami. Typowy przykład: nazwa pliku eksportu „Raport_sprzedaży_2023-05-01.csv” albo „log_20230501.txt”. Co wiemy? Data jest obecna i stosuje jeden schemat zapisu. Czego nie wiemy? Czy w każdym wierszu schemat jest zachowany i czy nie ma wyjątków.

W takich scenariuszach połączenie „Podziel kolumnę” oraz „Wyodrębnij tekst” zwykle wystarcza bez jednej linijki formuły:

  1. Podział po delimitrze – wybór „Podziel kolumnę > Według delimitera” i wskazanie znaku, który otacza datę (np. podkreślnik, myślnik lub kropka). Jeżeli data jest ostatnim fragmentem, często wystarczy podział od prawej strony przy pierwszym napotkanym delimiterze.
  2. Wyodrębnienie z lewej/prawej – jeśli data ma stałą długość (np. zawsze 8 znaków „YYYYMMDD”), można użyć „Wyodrębnij > Z prawej” lub „Z lewej” z podaną liczbą znaków.
  3. Konwersja typu kolumny – po wyizolowaniu czystego fragmentu daty pozostaje zmiana typu kolumny na „Data” lub „Data/Godzina” z odpowiednimi ustawieniami regionalnymi.

Przykład praktyczny: lista plików z folderu w Power Query, gdzie kolumna „Nazwa” ma postać „export_2023-01-15.xlsx”. Po podziale „Według delimitera” na podkreślnik można wziąć ostatnią kolumnę (część po podkreślniku), następnie wyodrębnić z lewej 10 znaków („2023-01-15”) i zmienić typ na „Data”.

Daty w środku dłuższego tekstu: podział po spacjach i znakach specjalnych

W logach systemowych, opisach zdarzeń czy komentarzach daty bywają wplecione w dłuższe zdania, np. „Zgłoszenie utworzono 01.05.2023 o godz. 13:45 w systemie CRM”. Taki tekst rzadko ma stałą długość, ale zwykle zachowuje powtarzalny schemat separatorów.

Strategia jest tu zbliżona, choć wymaga 2–3 kroków więcej:

  • Najpierw można użyć „Podziel kolumnę > Według delimitera” i wskazać spację, co tworzy serię fragmentów (słowa, liczby, daty).
  • Następnie w podglądzie nagłówków nowych kolumn szuka się tej, w której pojawia się data (np. kolumna „Data_3” z wartościami „01.05.2023”).
  • Jeśli w niektórych wierszach data trafiła do innej kolumny (np. z powodu dodatkowego słowa), można rozważyć kolejne podziały według kropek, myślników lub dwukropków, aż data zostanie mechanicznie odseparowana.

Ten sposób sprawdza się w danych, gdzie treść jest w miarę regularna (standardowe komunikaty systemu). Przy opisach wpisywanych ręcznie przez użytkowników, dużo bardziej zróżnicowanych, lepszym narzędziem będzie „Kolumna z przykładów”.

Wyodrębnienie dat między stałymi znacznikami tekstu

Część systemów generuje komunikaty według sztywnego szablonu, np. „[DATA: 2023-05-01] Zdarzenie X zostało zakończone”. W takim wypadku można wykorzystać opcję „Wyodrębnij > Między ogranicznikami”.

Procedura jest prosta:

  1. Zaznaczenie kolumny z tekstem.
  2. „Dodaj kolumnę > Wyodrębnij > Tekst między ogranicznikami”.
  3. Wprowadzenie ogranicznika początkowego (np. „DATA: ” łącznie ze spacją) oraz końcowego (np. „]”).

Wynikiem jest kolumna zawierająca wyłącznie fragment między tymi znacznikami, czyli w przykładzie – samą datę. Potem pozostaje tylko zmiana typu danych. To rozwiązanie jest odporne na zmienną długość tekstu przed i po dacie, dopóki stałe oznaczniki się nie zmienią.

„Kolumna z przykładów” przy mieszanych formatach i chaotycznym tekście

Jak działa „Kolumna z przykładów” przy wydobywaniu dat

„Kolumna z przykładów” (ang. Column from Examples) analizuje wybrane kolumny i szuka wzorca na podstawie kilku ręcznie wpisanych przykładów. Gdy w danych tekstowych występują różne formaty dat i godzin, narzędzie to często bywa skuteczniejsze niż ręczne „Podziel” po kilku delimiterach.

Typowy scenariusz: jedna kolumna zawiera mieszankę opisów:

  • „Spotkanie 01.05.2023 10:00 – sala 2”
  • „Zmiana grafiku: 2023-05-02 (zmiana popołudniowa)”
  • „Brak terminu – do ustalenia”

Cel jest jasny: z każdego wiersza wyciągnąć datę, a w wierszach bez dat zostawić wartość pustą lub specjalne oznaczenie.

Krok po kroku: zbudowanie reguły wyodrębniania daty

Procedura użycia „Kolumny z przykładów” w takim przypadku przebiega zwykle tak samo:

  1. Zaznaczenie kolumny z tekstem (lub kilku kolumn, jeśli logika ma je łączyć).
  2. „Dodaj kolumnę > Kolumna z przykładów > Na podstawie wybranych kolumn”.
  3. W nowej kolumnie (w wierszu 1, 2, 3…) wpisywanie ręcznie oczekiwanych wyników:
    • dla „Spotkanie 01.05.2023 10:00 – sala 2” – wpisanie „01.05.2023”;
    • dla „Zmiana grafiku: 2023-05-02 (zmiana popołudniowa)” – wpisanie „2023-05-02”;
    • dla „Brak terminu – do ustalenia” – pozostawienie pustej komórki lub wpisanie np. „brak daty”.
  4. Obserwacja, jak Power Query automatycznie wypełnia pozostałe wiersze na podstawie rozpoznanego schematu.

W tle generowany jest kod M z funkcjami tekstowymi, ale użytkownik nie musi go rozumieć – ważne, by w podglądzie wyniki wyglądały poprawnie w kilku reprezentatywnych miejscach (różne formaty, różne długości opisów).

Kontrola działania na nietypowych przypadkach

„Kolumna z przykładów” jest wygodna, ale nie nieomylna. Warto przeprowadzić krótki test „krawędzi”:

  • Przewinąć do końca danych lub przefiltrować kilka nieoczywistych rekordów (bardzo krótkich, bardzo długich, z dodatkowymi liczbami).
  • Sprawdzić, czy wiersze z podobnymi, ale nieidentycznymi schematami (np. brak godziny, dodatkowe liczby w nawiasie) również zwróciły sensowne wyniki lub zostały puste.

Jeżeli pojawią się zaskakujące wartości (np. „05.01.2023-10”), można wrócić do edycji „Kolumny z przykładów” i dopisać kilka dodatkowych przykładów z tych trudniejszych przypadków. Czasami drobna korekta przykładu zmienia sposób, w jaki narzędzie buduje regułę.

Kiedy „Kolumna z przykładów” nie wystarcza

Są układy danych, w których nawet zaawansowany algorytm zgaduje błędnie. Dzieje się tak zwłaszcza wtedy, gdy:

  • tekst zawiera wiele różnych ciągów liczbowych podobnych do dat (ID, numery dokumentów, kody),
  • format dat radykalnie się różni między wierszami (np. „1 maja 2023”, „2023/05/01”, „01-MAY-23”),
  • brakuje jednego, dającego się wskazać separatora lub stałego fragmentu.

W takich przypadkach „Kolumna z przykładów” może wyciągać jeden z kilku ciągów liczbowych i trudno jej wskazać, co jest właściwą datą. Wtedy pozostaje podzielić problem na mniejsze kroki: najpierw odfiltrować najbardziej regularne przypadki i zająć się nimi osobno, a dopiero potem próbować obsłużyć pozostałe wiersze inną metodą lub ręczną korektą.

Zbliżenie ekranu komputera z wykresami i danymi finansowymi
Źródło: Pexels | Autor: Саша Алалыкин

Wyodrębnianie godziny i łączenie jej z datą

Godzina jako część tego samego tekstu co data

W logach zdarzeń i zapisach operacji często pojawia się zarówno data, jak i czas w jednym ciągu, np. „2023-05-01 13:45:22 – użytkownik zalogowany”. W zależności od potrzeb można traktować to jako jedną wartość DateTime lub rozbić na datę i godzinę osobno.

Przy podejściu bez formuł stosuje się dwa warianty:

  • Konwersja całego fragmentu na DateTime – jeżeli format jest spójny (np. „YYYY-MM-DD HH:MM:SS”), wystarczy wyodrębnić cały fragment w jednym kroku („Wyodrębnij z lewej” lub „między ogranicznikami”) i zmienić typ danych na „Data/Godzina”.
  • Podział na dwie kolumny – przy tekstach typu „01.05.2023 godz. 13:45” można najpierw rozdzielić część daty i godziny po spacji lub słowie „godz.”, a dopiero potem osobno konwertować datę na „Data”, godzinę na „Godzina”.

W praktyce, jeśli źródło wykorzystywane jest w modelu czasu rzeczywistego (np. analiza momentu logowania), wygodniejszy jest typ DateTime. Jeżeli zaś raport koncentruje się na rozkładzie godzin pracy niezależnie od dnia, godzina w osobnej kolumnie ułatwi grupowania i wizualizacje.

Godzina bez daty: interpretacja i pułapki

Czasem dysponujemy tylko fragmentem „HH:MM” lub „HH:MM:SS” w kolumnie tekstowej, np. „08:30”, „17:45”. Konwersja na typ „Godzina” jest wtedy prosta – wybór typu danych „Godzina” na karcie „Przekształć”. Problem pojawia się, gdy system źródłowy tak naprawdę przechowuje czas jako część większego znacznika, a my widzimy tylko jego wycinek.

Dwa krótkie pytania kontrolne pomagają w takiej sytuacji:

  • Co wiemy? Czy kolumna naprawdę opisuje wyłącznie czas dnia (np. rozpoczęcie zmiany), czy jest fragmentem pełnej daty i godziny, która gdzie indziej ma swój kontekst?
  • Czego nie wiemy? Czy w raporcie kiedykolwiek będzie potrzeba odtworzenia pełnego znacznika czasu – jeśli tak, lepiej nie gubić informacji o dacie zbyt wcześnie.

Jeżeli w innym polu istnieje data tego samego zdarzenia, najrozsądniej jest najpierw oba pola doprowadzić do poprawnych typów („Data” i „Godzina”), a następnie użyć opcji „Złącz kolumny” lub gotowego narzędzia „Z daty i godziny utwórz DateTime” (jeśli jest dostępne w danej wersji), tak aby powstało jedno pełne pole DateTime.

Sklejanie osobnych kolumn daty i czasu w DateTime (bez pisania formuł)

Gdy data i godzina znajdują się w osobnych kolumnach, ale potrzebna jest jedna kolumna DateTime, istnieje droga bez ręcznego wpisywania formuł:

  1. Upewnienie się, że kolumna daty ma typ „Data”, a kolumna czasu typ „Godzina”.
  2. Zaznaczenie obu kolumn (kolejność ma znaczenie – najpierw data, potem czas).
  3. Użycie „Dodaj kolumnę > Złącz kolumny” i wybranie odpowiedniego separatora (np. spacja).
  4. Zmiana typu nowej, złączonej kolumny na „Data/Godzina” z właściwym regionem.

Technicznie w środku powstaje najpierw tekst typu „2023-05-01 13:45:00”, a dopiero potem jest on interpretowany jako DateTime. Efekt końcowy jest jednak taki sam, jak ręczne zbudowanie formuły – bez potrzeby pisania kodu M.

Radzenie sobie z błędami i brakami w danych czasowych bez formuł

Identyfikacja błędnych konwersji: filtrowanie i sortowanie

Po przekształceniu tekstu na datę lub DateTime część wierszy może przyjąć wartość „Error” (błąd) lub pozostać pusta. Bez znajomości formuł można je dość szybko wyłapać:

  • Filtr w nagłówku kolumny – wybór tylko wartości „Error” lub „(puste)”.
  • Sortowanie rosnąco/malejąco, żeby sprawdzić skrajne daty i godziny.

Czyszczenie błędów: zamiana na wartości domyślne i oznaczanie problemów

Gdy błędów jest dużo, samo ich przeglądanie nie wystarcza. Trzeba zdecydować, co z nimi zrobić. Bez formuł można skorzystać z dwóch podstawowych narzędzi na wstążce:

  • „Zastąp błędy” – dostępne po kliknięciu prawym przyciskiem nagłówka kolumny lub na karcie „Przekształć”. Umożliwia zamianę wszystkich „Error” na jedną wartość, np.:
    • pustą komórkę (null),
    • ustaloną datę zastępczą (np. 1900-01-01),
    • tekst informacyjny w kolumnie pomocniczej.
  • „Usuń błędy” – dostępne analogicznie, usuwa całe wiersze z błędami w danej kolumnie.

Wybór między tymi opcjami zależy od znaczenia danych. Jeżeli pojedyncze błędne rekordy zaburzałyby statystyki minimalnie, usunięcie ich może być akceptowalne. Jeśli jednak każdy wiersz odpowiada np. jednej fakturze lub zgłoszeniu, kasowanie oznacza utratę obserwacji i zwykle lepszym wyjściem jest zamiana na kontrolowaną wartość domyślną.

Przed „Zastąp błędy” dobrze jest zadać krótkie pytanie kontrolne: co wiemy o tych rekordach poza tym, że data jest niepoprawna? Być może w dodatkowej kolumnie (np. „Status”) da się je oznaczyć i obsłużyć później w raporcie jako osobną kategorię.

Tworzenie kolumny-flag dla brakujących dat i godzin

Jeżeli braki są istotną informacją samą w sobie, przydaje się prosta flaga. Bez formuł da się ją zbudować z wykorzystaniem wbudowanej funkcji „Kolumna warunkowa”:

  1. Na karcie „Dodaj kolumnę” wybranie opcji „Kolumna warunkowa”.
  2. W oknie dialogowym wskazanie kolumny z datą lub czasem.
  3. Ustawienie warunku typu „równa się null” (lub „jest pusta”).
  4. Wpisanie wartości, np. „brak daty” dla spełnionego warunku oraz „ok” dla pozostałych.

Powstaje wtedy czytelna kolumna tekstowa, którą łatwo wykorzystać przy filtrowaniu, grupowaniu czy raportowaniu jakości danych. W przeciwieństwie do usuwania błędów, takie rozwiązanie zachowuje wszystkie rekordy, ale wyraźnie oznacza te, które wymagają ostrożniejszej interpretacji.

Porządkowanie stref czasowych bez rozbudowanych formuł

W raportach łączących dane z wielu systemów pojawia się dodatkowy kłopot: ta sama godzina zapisywana jest w różnych strefach czasowych. Nie da się tego rozwiązać jednym kliknięciem, jednak część pracy można wykonać bez pisania kodu.

Najprostsze scenariusze to:

  • Stała różnica czasu dla całego źródła – np. system A zapisuje w UTC, system B w czasie lokalnym. W takim przypadku:
    1. Najpierw konwersja kolumny tekstowej na DateTime.
    2. Następnie użycie polecenia „Dodaj kolumnę z daty/godziny > Czas lokalny / Uniwersalny”, jeśli jest dostępne.
    3. Jeżeli takiej komendy brak, zamiana godziny przez „Dodaj kolumnę z daty/godziny > Dodaj lub odejmij czas” z ustawioną stałą liczbą godzin.
  • Różne strefy wskazane w osobnej kolumnie – np. „CET”, „UTC”, „EET”. Wtedy konieczne bywa etapowe podejście: filtrowanie kolejnych grup i używanie „Zamień wartości” lub „Dodaj/odejmij czas” dla każdej grupy osobno.

Takie podejście jest bardziej ręczne niż pojedyncza formuła, ale zmniejsza ryzyko pomyłki, bo każda zmiana jest widoczna w podglądzie i dotyczy jasno zdefiniowanego podzbioru rekordów.

Scenariusze praktyczne: od prostego logu po chaotyczny opis

Stały format daty i czasu w logu systemowym

W logach wielu aplikacji pojawia się regularny wzorzec na początku każdej linii, np. „2023-05-01 13:45:22 | INFO | Użytkownik zalogowany”. Taki układ jest wdzięczny do obróbki bez formuł:

  1. Zaimportowanie pliku tekstowego lub CSV do Power Query.
  2. Jeśli cała linia wpadła do jednej kolumny, użycie „Podziel kolumny > Według ogranicznika” z separatorem „|” – pierwsza kolumna będzie zawierać DateTime w formacie tekstowym.
  3. Zmiana typu pierwszej kolumny na „Data/Godzina”. Power Query zwykle poprawnie rozpozna format „YYYY-MM-DD HH:MM:SS”.
  4. W razie wątpliwości co do interpretacji formatu można na chwilę zmienić ustawienia regionalne kolumny („Użyj lokalizacji”) i sprawdzić, czy odczyt dat jest spójny.

W takim scenariuszu nie pojawia się potrzeba dodatkowego wyciągania fragmentów tekstu: cała operacja opiera się na podziale po separatorze i zmianie typu danych.

Opisy zdarzeń z datą ukrytą w środku zdania

Inaczej wygląda praca z opisami typu „Zamówienie przyjęte 12.03.2023, planowana wysyłka jutro po 15:00”. Tutaj data i czas nie są na początku ani na końcu, tylko w środku, a słowa mogą się zmieniać. Zamiast od razu próbować wyciągnąć konkretne fragmenty, można podejść do tematu po kolei:

  • w pierwszym kroku wykorzystać „Kolumnę z przykładów”, wpisując samą datę w kilku reprezentatywnych wierszach – narzędzie często wychwyci cyfrowy wzorzec niezależnie od otaczających słów;
  • w drugim kroku, jeśli istotna jest także godzina, spróbować utworzyć kolejną „Kolumnę z przykładów” z samymi godzinami (np. „15:00”),
  • jeśli godziny przyjmują kilka wariantów (np. „po 15:00”, „ok. 16:30”), w trudniejszych rekordach lepiej dopuścić puste wartości zamiast wymuszać niepewne interpretacje.

Końcowy efekt nie zawsze obejmie 100% rekordów. Dla części opisów, w których brak twardej daty lub godziny, nowa kolumna pozostanie pusta – i to jest poprawna informacja: tekst nie zawierał konkretnego znacznika czasu.

Harmonogram z częściowo wypełnionymi terminami

Typowy przykład z działów operacyjnych: jedna kolumna „Data planowana”, druga „Data realizacji”, trzecia „Komentarz”. W komentarzach zdarzają się dopiski typu „przesunięte na 05-06-2023”, podczas gdy w kolumnie „Data planowana” nadal widnieje stara wartość albo jest pusta.

Bez formuł można przyjąć proste, ale przejrzyste podejście warstwowe:

  1. Najpierw uporządkowanie kolumn „twardych” – konwersja „Data planowana” i „Data realizacji” na typ „Data”.
  2. Potem próba wyciągnięcia dat z „Komentarza” za pomocą „Kolumny z przykładów” – z naciskiem na najczęściej występujące wzorce.
  3. Na koniec użycie „Kolumny warunkowej”, np.:
    • jeśli „Data planowana” jest pusta, ale w kolumnie pomocniczej z komentarza udało się wyciągnąć datę – przyjmij tę datę jako planowaną;
    • w przeciwnym razie zostaw istniejącą wartość.

Takie połączenie prostych narzędzi daje efekt zbliżony do złożonej formuły, ale każdy krok jest widoczny jako osobna transformacja. Przy analizie błędów łatwiej ustalić, na którym etapie coś zostało zinterpretowane inaczej, niż zakładał autor danych.

Drewniane kafelki układające się w napis DATA na drewnianym tle
Źródło: Pexels | Autor: Markus Winkler

Ręczne sterowanie kolejnością kroków przekształceń daty i czasu

Dlaczego kolejność operacji ma znaczenie

Power Query zapisuje każdą operację jako osobny krok na liście „Zastosowane kroki”. Kolejność tych pozycji decyduje, w jakim stanie tabela trafia do kolejnych przekształceń. Przy dacie i czasie szczególnie widać to w dwóch miejscach:

  • gdy ten sam tekst jest najpierw cięty, a dopiero potem konwertowany,
  • gdy kilka kolumn jest łączonych w DateTime, podczas gdy jedna z nich miała błędny typ danych.

Jeżeli po wstawieniu nowego kroku pojawiają się niespodziewane błędy, pierwszym ruchem powinno być przejrzenie listy kroków i sprawdzenie, czy „Zmiana typu” (ikonka ABC/123 w nagłówkach) nie została automatycznie dodana zbyt wcześnie.

Przesuwanie kroków bez pisania kodu

Bez zaglądania do edytora zaawansowanego można sterować kolejnością w prosty sposób:

  1. W panelu „Zastosowane kroki” zaznaczenie wybranego kroku.
  2. Użycie strzałek w górę/dół (jeśli są dostępne) lub usunięcie kroku i ponowne wykonanie operacji we właściwym momencie.
  3. W razie potrzeby zmiana nazwy kroków na bardziej opisowe, np. „Wyciągnięcie daty z opisu”, „Konwersja na DateTime”.

Prosty przykład z praktyki: po imporcie pliku CSV Power Query automatycznie zgaduje typy danych i ustawia kolumnę z datą jako tekst. Użytkownik dzieli tę kolumnę na datę i godzinę, po czym próbuje zmienić typ nowej kolumny na DateTime. Jeżeli „Zmiana typu” była wykonana jeszcze przed podziałem, część informacji mogła zostać utracona. Cofnięcie lub przesunięcie tego kroku przed operację „Podziel kolumnę” często rozwiązuje problem bez dodatkowej logiki.

Ustalanie etapu, na którym najlepiej wyodrębniać datę

Gdy tekst zawiera zarówno daty, jak i inne dane, pojawia się pytanie: w którym momencie przepływu wyjmować datę? Można przyjąć prostą zasadę roboczą:

  • jeżeli tekst jest jeszcze „surowy” (bez zbędnych kolumn), lepiej najpierw wykonać podstawowe operacje: usunięcie niepotrzebnych wierszy, podział pliku na logiczne kolumny, filtrowanie ewidentnych duplikatów;
  • gdy tabela zawiera już tylko te kolumny, które rzeczywiście będą użyte w modelu, wówczas dodawać kroki wyodrębniania dat i czasów.

Takie podejście ogranicza liczbę miejsc, w których potencjalnie powstają błędne daty. Jeśli coś będzie wymagało korekty, łatwiej ją przeprowadzić w jednym czy dwóch krokach niż w wielu rozrzuconych po całej historii przekształceń.

Łączenie technik „bezformułowych” z minimalnym kodem M

Kiedy drobna ingerencja w kod daje największy efekt

Nawet przy założeniu pracy bez formuł zdarzają się sytuacje, w których jedno proste wyrażenie M znacząco upraszcza proces. Z perspektywy użytkownika różnica między całkowitym brakiem kodu a pojedynczą, skopiowaną linią bywa mniejsza niż między skomplikowaną sekwencją kliknięć a jednym ruchem.

Szczególnie opłaca się to w trzech sytuacjach:

  • gdy trzeba zastosować identyczną transformację na kilku kolumnach z datą jednocześnie,
  • gdy „Kolumna z przykładów” tworzy bardzo rozbudowany ciąg kroków, a w kodzie widać, że chodzi o powtarzającą się operację typu „Text.Middle”,
  • gdy trzeba zamienić region (np. between „dd.MM.yyyy” a „MM/dd/yyyy”) dla wielu kolumn naraz.

Przykład z życia biurowego: arkusz zawiera sześć kolumn opisujących kolejne terminy (start projektu, planowany koniec, faktyczny koniec, data akceptacji itd.), wszystkie zapisane jako tekst „DD.MM.RRRR”. Power Query potrafi zmienić typ każdej z nich osobno, ale zamiast powtarzać ten sam ruch sześć razy, można:

  1. zmienić typ jednej kolumny,
  2. przejść do edytora zaawansowanego,
  3. skopiować fragment linijki „Table.TransformColumnTypes” i dopisać pozostałe nazwy kolumn.

Efekt końcowy nie zmienia się dla użytkownika raportu, a autor zapytania utrzymuje spójną logikę w jednym miejscu.

Czytelność a automatycznie generowane kroki

Narzędzia „z przykładów” oraz kreatory (np. dzielenia kolumn) często generują długi kod, który trudno interpretować bez dobrej znajomości języka M. Z punktu widzenia osoby, która ma tylko przejrzeć zapytanie po czasie, czytelność bywa wtedy ograniczona.

Proste środki zaradcze, niewymagające pisania własnych funkcji, to:

  • zmienianie nazw kroków na opisowe, zamiast pozostawiania „Added Custom” czy „Changed Type1”,
  • grupowanie podobnych przekształceń – np. wszystkie operacje na dacie wykonywać jedną po drugiej, nie rozdzielać ich filtrowaniem innych kolumn,
  • unikanie dublowania kroków „Zmiana typu” dla tej samej kolumny: gdy po kilku ruchach typ przestaje pasować, lepiej poprawić istniejący krok niż dodawać nowy.

Tak uporządkowany kod M pozostaje w dużej mierze wynikiem pracy kreatorów, ale jest łatwiejszy do prześledzenia i ewentualnej modyfikacji. W praktyce biznesowej, gdzie raporty często przechodzą między zespołami, przejrzysta historia kroków bywa równie ważna jak sam efekt końcowy.

Źródła

  • Power Query M formula language specification. Microsoft – Oficjalna dokumentacja typów danych i konwersji w Power Query
  • Prepare data with Power Query in Excel. Microsoft – Opis interfejsu Power Query, kroków przekształceń i automatyzacji
  • ETL Best Practices with Power Query. SQLBI – Praktyki projektowania powtarzalnych procesów ETL w Power Query
  • M is for (Data) Monkey. Holy Macro! Books (2015) – Książka o praktycznym użyciu Power Query, w tym pracy z datami i tekstem
  • Collect, Combine, and Transform Data Using Power Query in Excel and Power BI. Microsoft Press (2018) – Podręcznik krok po kroku o czyszczeniu i transformacji danych bez kodu M
  • ISO 8601 – Data elements and interchange formats – Information interchange – Representation of dates and times. International Organization for Standardization – Norma definiująca standardowe zapisy dat i czasu, np. RRRR-MM-DD

Poprzedni artykułPeeling kawitacyjny – na czym polega zabieg i jakie daje efekty dla skóry twarzy
Tomasz Zieliński
Tomasz Zieliński specjalizuje się w analizie danych w Excelu: tabelach przestawnych, Power Query i budowie czytelnych raportów. Na blogu przekłada złożone zagadnienia na praktyczne procedury, które da się wdrożyć od razu w firmie. Pracuje metodycznie: najpierw definiuje cel, potem dobiera narzędzia i sprawdza rozwiązanie na danych z błędami, brakami i duplikatami. W tekstach dba o precyzję nazw, zgodność z aktualnymi wersjami Excela oraz o to, by wskazówki były bezpieczne dla plików współdzielonych.