Power Query for Analysts
Modul 1: Wprowadzenie do Power Query i podstawowe transformacje
Cel
W tym ćwiczeniu nauczysz się:
Importować dane z pliku CSV do Power Query. Sprawdzać i dostosowywać typy danych, koncentrując się na konwersji daty zapisanej jako tekst na rzeczywisty typ daty. Zastosować podstawowe filtrowanie danych. Korzystać z pomocy zewnętrznej (np. ChatGPT) w celu uzyskania wskazówek dotyczących tworzenia niestandardowego kodu M, bez bezpośredniego kopiowania rozwiązań.
Dostarczone dane
Otrzymujesz do pobrania plik CSV o nazwie 📂Media:PQsales.csv który zawiera dane zamówień sprzedaży.
Instrukcje
- Krok 1: Importuj dane
 
- Otwórz Power Query w Excelu lub Power BI.
 - Zaimportuj dane z pliku sales.csv.
 - Zauważ, że kolumna OrderDate została zaimportowana jako tekst ze względu na swój format (dd/MM/yyyy).
 
- Krok 2: Sprawdź i przekonwertuj typy danych
 
- Sprawdź, czy każda kolumna ma poprawny typ danych.
 - Ręcznie przekształć kolumnę OrderDate z tekstu na typ daty.
 - Wskazówka: Jeśli napotkasz trudności, możesz zapytać ChatGPT o wskazówki, jak napisać funkcję M do konwersji tekstu na datę.
 
- Krok 3: Zastosuj podstawowe filtrowanie
 
- Filtruj zestaw danych, tak aby pozostały tylko wiersze, w których koszt jest większy niż 200.
 - Propozycja: Użyj interfejsu graficznego Power Query lub napisz prosty skrypt M, aby zastosować filtr. Jeśli to konieczne, skonsultuj się z ChatGPT w celu uzyskania pomysłów na implementację tego filtru.
 
- Krok 4: Przejrzyj i zapisz swoją pracę
 
- Potwierdź, że transformacje zostały poprawnie zastosowane, przeglądając podgląd danych.
 - Zapisz zapytanie i udokumentuj kroki, które podjąłeś.
 
Zadanie
Wykonaj kroki opisane powyżej w Power Query. Eksperymentuj z dostępnymi opcjami transformacji i staraj się zrozumieć, jak każdy krok wpływa na Twoje dane. Używaj ChatGPT w celu uzyskania wskazówek lub rozwiązywania problemów, ale unikaj kopiowania kompletnych rozwiązań dosłownie.
Modul 2: Laczenie i scalanie danych z wielu zrodel
Cel
W tym ćwiczeniu nauczysz się:
Importować dane z wielu plików CSV do Power Query. Scalić (połączyć) dane z różnych źródeł na podstawie wspólnego klucza. Użyć lewego zewnętrznego łączenia (Left Outer Join) do dodania szczegółów klienta do zamówień sprzedaży. Korzystać z pomocy zewnętrznej (np. ChatGPT) w celu uzyskania wskazówek dotyczących pisania niestandardowego kodu M, bez kopiowania kompletnych rozwiązań.
Dostarczone dane
Otrzymujesz do pobrania dwa pliki CSV:
📂 Media:PQ_sales2.csv – Zawiera dane zamówień sprzedaży:
📂 Media:PQ_customers.csv – Zawiera informacje o klientach:
Instrukcje
- Krok 1: Importuj dane
 
Otwórz Power Query w Excelu lub Power BI. Zaimportuj dane z obu plików PQ_sales.csv i PQ_customers.csv. Sprawdź, czy oba zapytania zostały załadowane poprawnie.
- Krok 2: Sprawdź i przekonwertuj typy danych
 
Potwierdź, że każda kolumna ma odpowiedni typ danych w obu zapytaniach. Na przykład, zauważ, że kolumna OrderDate w PQ_sales.csv jest zaimportowana jako tekst z powodu niestandardowego formatu. Wskazówka: Użyj funkcji transformacji, jeśli jakiekolwiek dostosowania są potrzebne.
- Krok 3: Scal dane
 
Scal zapytanie PQ_sales.csv z zapytaniem PQ_customers.csv. Użyj kolumny Customer jako klucza dopasowania. Wybierz lewy zewnętrzny join (Left Outer Join), aby każde zamówienie sprzedaży zostało zachowane wraz z odpowiednimi szczegółami klienta. Propozycja: Jeśli nie wiesz, jak napisać kod M do tego scalenia, zapytaj ChatGPT o wskazówki dotyczące scalania zapytań.
- Krok 4: Przejrzyj scalone dane
 
Potwierdź, że wynikowe zapytanie zawiera dodatkowe kolumny (np. Region, CustomerSince) z pliku PQ_customers.csv. Sprawdź scalone dane, aby upewnić się, że szczegóły klientów zostały poprawnie połączone z odpowiednimi zamówieniami sprzedaży.
- Krok 5: Zapisz swoją pracę
 
Zapisz swoje zapytanie i udokumentuj kroki transformacji, które zastosowałeś.
Zadanie
Wykonaj kroki opisane powyżej w Power Query. Eksperymentuj z interfejsem graficznym i niestandardowym kodem M w celu wykonania scalania. Korzystaj z zasobów zewnętrznych (np. ChatGPT) w celu uzyskania wskazówek lub rozwiązywania problemów, ale unikaj kopiowania kompletnych rozwiązań dosłownie.
Modul 3: Tworzenie niestandardowych kolumn i funkcji
Cel
W tym ćwiczeniu nauczysz się:
Tworzyć niestandardowe kolumny obliczeniowe w Power Query.
Używać wbudowanych funkcji Power Query do manipulacji tekstem, liczbami i datami.
Pisać niestandardowe funkcje w języku M, aby automatyzować transformacje.
Korzystać z ChatGPT do pomocy przy pisaniu i optymalizacji kodu M.
Dostarczone dane
Do tego ćwiczenia wykorzystamy następujące zbiory danych:
📂Media:PQ_sales2.csv (używany w poprzednich modułach)
📂Media:PQ_discounts.csv (nowy zbiór danych) - zawiera stawki rabatowe w zależności od typu produktu.
Instrukcje
- Krok 1: Importuj dane
 
Otwórz Power Query w Excelu lub Power BI. Zaimportuj oba pliki: PQ_sales.csv i PQ_discounts.csv. Upewnij się, że obie tabele zostały załadowane poprawnie.
- Krok 2: Tworzenie niestandardowej kolumny dla całkowitego kosztu
 
W tabeli PQ_sales dodaj nową niestandardową kolumnę: Przejdź do Dodaj kolumnę → Kolumna niestandardowa. Nazwij ją TotalCost. Utwórz formułę do obliczenia całkowitego kosztu jako:
Quantity * Cost
Kliknij OK i sprawdź wyniki.
- Krok 3: Zastosowanie rabatów za pomocą scalania
 
Scal PQ_sales z PQ_discounts, używając kolumny Product jako klucza. Rozwiń kolumnę DiscountRate do tabeli PQ_sales. Dodaj kolejną niestandardową kolumnę o nazwie DiscountedPrice:
[TotalCost] - ([TotalCost] * [DiscountRate])
Sprawdź, czy nowa kolumna poprawnie stosuje rabaty.
- Krok 4: Tworzenie niestandardowej funkcji w M
 
Utwórz funkcję do kategoryzowania produktów w różne przedziały cenowe: Przejdź do Strona główna → Edytor zaawansowany. Napisz funkcję M, która przyjmuje Cost jako wejście i zwraca kategorię:
Low if Cost < 500 Medium if Cost between 500 and 1500 High if Cost > 1500
Wskazówka: Jeśli nie jesteś pewny, jak zbudować funkcję, zapytaj ChatGPT: "Jak napisać funkcję M, która kategoryzuje ceny na Low, Medium i High?" 
- Krok 5: Przypisywanie kategorii
 
W tabeli PQ_sales dodaj niestandardową kolumnę, używając funkcji. Nazwij kolumnę PriceCategory. Upewnij się, że kategorie są wyświetlane poprawnie na podstawie wartości w kolumnie Cost.
Zadanie
- ✔ Wykonaj wszystkie kroki w Power Query.
 - ✔ Eksperymentuj zarówno z interfejsem graficznym, jak i z kodem M.
 - ✔ Korzystaj z ChatGPT w celu rozwiązywania problemów lub poprawiania skryptu M.
 
Modul 4: Zaawansowane transformacje danych w Power Query
Cel
W tym module nauczysz się:
- ✔ Jak pivotować i unpivotować dane w Power Query.
 - ✔ Jak dzielić i scalać kolumny w celu lepszej strukturyzacji danych.
 - ✔ Jak używać transformacji warunkowych.
 - ✔ Jak wykorzystać ChatGPT do tworzenia złożonych skryptów M.
 
Dostarczone dane
Do tego ćwiczenia wprowadzimy nowy zbiór danych:
PQ_sales_pivot.csv, który zawiera miesięczne dane sprzedaży różnych produktów.
📂 Media:PQ_sales_pivot.csv - Struktura danych w formacie pivot.
Instrukcje
Krok 1: Importuj dane
Otwórz Power Query w Excelu lub Power BI.
Zaimportuj plik PQ_sales_pivot.csv.
Upewnij się, że tabela została poprawnie załadowana.
Krok 2: Unpivotowanie danych
Obecna tabela ma szeroki format, który nie jest idealny do analizy.
Unpivotuj kolumny miesięczne, aby dane miały strukturę:
- Product
 - Category
 - Month
 - Sales Amount
 
Jak to zrobić:
- Kliknij Transformuj → Użyj pierwszego wiersza jako nagłówków, aby upewnić się, że kolumny mają poprawne nazwy.
 - Zaznacz kolumny z miesiącami (Jan 2025, Feb 2025 itd.).
 - Kliknij Transformuj → Unpivotuj kolumny.
 - Zmień nazwy wynikowych kolumn:
 
"Attribute" → Month
"Value" → Sales Amount
Krok 3: Dzielnie i scalanie kolumn
- Kolumna Month obecnie zawiera wartości takie jak "Jan 2025".
 - Podziel tę kolumnę na Month Name i Year:
 - Zaznacz kolumnę Month.
 - Kliknij Transformuj → Podziel kolumnę → Według ogranicznika.
 - Wybierz spację (" ") jako ogranicznik.
 - Zmień nazwy nowych kolumn na Month Name i Year.
 
- Przykład scalania kolumn:
 
Jeśli chcesz scalić Product i Category, zaznacz obie kolumny.
- Kliknij Transformuj → Scal kolumny.
 - Użyj " - " jako separatora (np. "Monitor - Electronics").
 
Krok 4: Dodanie transformacji warunkowych
- Dodaj nową niestandardową kolumnę o nazwie "Sales Performance":
 
if [Sales Amount] < 300 then "Low" else if [Sales Amount] >= 300 and [Sales Amount] < 800 then "Medium" else "High"
- Upewnij się, że kolumna poprawnie kategoryzuje wyniki sprzedaży.
 
Zadanie
- ✔ Wykonaj wszystkie kroki w Power Query.
 - ✔ Eksperymentuj z unpivotowaniem, dzieleniem, scalaniem i logiką warunkową.
 - ✔ Korzystaj z ChatGPT w celu rozwiązywania problemów lub poprawiania skryptu M.
 
Modul 5: Parametryzacja i dynamiczne zapytania w Power Query
Cel ćwiczenia
W tym module nauczysz się:
- ✔ Jak tworzyć parametry w Power Query.
 - ✔ Jak używać parametrów do dynamicznego filtrowania i sterowania wynikami zapytań.
 
Dostarczone dane
W tym ćwiczeniu użyjemy pliku:
oraz nowego zestawu danych
- 📂 Media:PQ_parameters.xlsx, który zawiera wartości do dynamicznego filtrowania.
 
Instrukcje
- 🔹 Krok 1: Załaduj plik CSV do Power Query
 
- Otwórz Excela i przejdź do „Dane” → „Pobierz dane” → „Z pliku” → „Z pliku CSV”.
 - Wybierz plik `PQ_sales.csv` i kliknij „Załaduj do Power Query”.
 - Po załadowaniu pliku upewnij się, że Power Query rozpoznał poprawnie dane.
 
- 🔹 Krok 2: Przetwórz tabelę `Parameters`
 
- W Power Query przejdź do tabeli **`Parameters`**.
 - **Transponuj tabelę** – kliknij **„Przekształć” → „Transponuj”**.
 - **Ustaw pierwszy wiersz jako nagłówki** – kliknij **„Przekształć” → „Użyj pierwszego wiersza jako nagłówków”**.
 - **Zmień typy danych** dla `startDate` i `endDate` na **Date**:
- Kliknij nagłówek `startDate` → wybierz typ `Date`.
 - Powtórz dla `endDate`.
 
 
- 🔹 Krok 3: Utwórz osobne zapytania dla `startDate` i `endDate`
 
- W tabeli `Parameters` kliknij prawym przyciskiem myszy na wartość w `startDate` → **„Dodaj jako nowe zapytanie”** (`Add as new query`).
 - Powtórz tę operację dla `endDate`.
 
- 🔹 Krok 4: Zmień typ danych w kolumnie `OrderDate` w tabeli `PQ Sales` na date
 
- Wróć do zapytania `PQ Sales`.
 - Kolumna `OrderDate` zawiera daty w formacie `DD MM YY`.
 - **Rozdziel ją na trzy kolumny**:
- Kliknij **„Przekształć” → „Podziel kolumnę” → „Według ogranicznika”**.
 - Wybierz **spację** (` `) jako ogranicznik.
 - Powstają trzy nowe kolumny: `OrderDate.1`, `OrderDate.2`, `OrderDate.3` (dzień, miesiąc, rok).
 
 - **Zmień typy danych** tych kolumn na `Number` (`Int64.Type`).
 - **Połącz je w poprawny format `YYYY-MM-DD`**:
- Kliknij **„Scal kolumny”** (`Merge Columns`).
 - Wybierz kolejność: `OrderDate.2`, `OrderDate.3`, `OrderDate.1` (miesiąc, rok, dzień).
 - Ustaw separator `/`.
 - Zmień nazwę kolumny na `DateOrder`.
 - Zmień jej typ na **Date**.
 
 
- 🔹 Krok 5: Dodanie dynamicznego filtra do `DateOrder`
 
- Otwórz **Edytor Zaawansowany** (`View` → `Advanced Editor`).
 - Znajdź ostatni krok przed `in`:
 
#"Renamed Columns" = Table.RenameColumns(#"Changed Type2",Template:"Merged", "DateOrder")
- 🔹 Krok 6 :Dodaj filtr:
 
#"Filtered Rows" = Table.SelectRows(#"Renamed Columns", each [DateOrder] >= startDate and [DateOrder] <= endDate)
Upewnij się, że startDate i endDate są w formacie Date.
Zmień końcową wartość in, aby zwracała #"Filtered Rows":
in
    #"Filtered Rows"
- 🔹 Krok 7: Sprawdzenie wyników
 
- Kliknij „Gotowe” (Done).
 - Sprawdź, czy dane są filtrowane poprawnie.
 - Kliknij „Zamknij i Załaduj” (Close & Load), aby zapisać dane w Excelu
 
Modul 6: Automatyzacja Laczenia i Odswiezania Danych w Power Query
Cel
W tym module nauczysz się:
- ✔ Jak automatycznie importować i łączyć pliki z folderu.
 - ✔ Jak radzić sobie z różnymi nazwami kolumn w różnych plikach.
 - ✔ Jak przygotować dane do raportowania niezależnie od struktury źródłowych plików.
 - ✔ Jak ustawić automatyczne odświeżanie danych w Power Query.
 
Dostarczone dane
W tym ćwiczeniu użyjemy zestawu wielu plików sprzedażowych, które znajdują się w jednym folderze.
📂 Media:Sales_Jan.xlsx – Sprzedaż za styczeń
📂 Media:Sales_Feb.xlsx – Sprzedaż za luty
📂 Media:Sales_Mar.xlsx – Sprzedaż za marzec
Każdy plik zawiera podobne dane, ale ma inne nazwy kolumn dla wartości sprzedaży:
W Sales_Jan.xlsx kolumna sprzedaży to Total Sale.
W Sales_Feb.xlsx kolumna sprzedaży to Revenue.
W Sales_Mar.xlsx kolumna sprzedaży to SalesAmount.
Celem jest połączenie tych plików w jeden zbiór i dostosowanie nazw kolumn, aby były spójne.
Instrukcje
- Krok 1: Pobranie plików z folderu
 
- Otwórz Power Query w Excelu.
 - Wybierz Dane → Pobierz dane → Z pliku → Z folderu.
 - Wskaż folder, w którym znajdują się pliki sprzedażowe (Sales_Jan.xlsx, Sales_Feb.xlsx, Sales_Mar.xlsx).
 - Kliknij Załaduj (Load), aby dodać pliki do Power Query bez automatycznego łączenia.
 
- Krok 2: Zastosowanie kodu M do załadowania danych
 
- Otwórz Zaawansowany Edytor w Power Query.
 - Wklej poniższy kod M i kliknij Gotowe:
 
let
    // Wczytanie plików z folderu
    Source = Folder.Files("C:\Users\pathToFolder..."),
    
    // Dodanie kolumny, która otworzy zawartość pliku Excel
    AddContent = Table.AddColumn(Source, "Custom", each Excel.Workbook([Content])),
    
    // Rozwinięcie zawartości, aby zobaczyć wszystkie dane
    ExpandContent = Table.ExpandTableColumn(AddContent, "Custom", {"Name", "Data"}, {"File Name", "Data"})
in
    ExpandContent
- Po zastosowaniu kodu zobaczysz tabelę z nową kolumną Data.
 
- Krok 3: Rozwinięcie zawartości tabel
 
- Kliknij ikonę rozwinięcia obok kolumny Data, aby zobaczyć pełne dane z plików.
 - Upewnij się, że wszystkie kolumny z różnych plików są widoczne.
 
- Krok 4: Usunięcie zbędnych kolumn
 
- Sprawdź tabelę i usuń niepotrzebne kolumny (np. kolumny techniczne dotyczące plików, które nie są wymagane do analizy).
 - Kliknij Przekształć → Usuń kolumny i usuń zbędne kolumny.
 
- Krok 5: Nadanie nazw kolumnom
 
- Ustaw własne nazwy kolumn zgodnie ze spójnym formatem (np. Total Sale → Sales).
 - Kliknij Przekształć → Zmień nazwę kolumny dla każdej kolumny, aby nadać im jednolitą strukturę.
 
- Krok 6: Usunięcie zbędnych wierszy (powtórzeń nagłówków)
 
- Zastosuj filtr na kolumnie zawierającej wartości sprzedaży.
 - Usuń wiersze zawierające powtórzenia nagłówków, które mogą występować z powodu łączenia wielu plików.
 - Kliknij Przekształć → Usuń wiersze → Usuń duplikaty lub zastosuj filtr manualnie.
 
- Krok 7: Automatyczne odświeżanie danych
 
- Przejdź do Dane → Właściwości zapytania → Odświeżaj dane przy otwieraniu pliku.
 - Możesz także ustawić automatyczne odświeżanie co X minut.
 - Jeśli dodasz nowy plik do folderu (np. Sales_Apr.xlsx), Power Query automatycznie pobierze dane z nowego pliku po odświeżeniu!
 
Zadanie
- ✔ Załaduj i połącz dane z Sales_Jan.xlsx, Sales_Feb.xlsx, Sales_Mar.xlsx.
 - ✔ Ujednolić nazwy kolumn i przekształcić dane w jednolity format.
 - ✔ Usuń puste wiersze, zbędne kolumny i duplikaty.
 - ✔ Ustaw automatyczne odświeżanie, aby nowe pliki były automatycznie dołączane.
 - ✔ Skorzystaj z ChatGPT do optymalizacji kodu M w Power Query.
 
Modul 7: Optymalizacja Wydajnosci Zapytan w Power Query
Cel
W tym module nauczysz się:
- ✔ Jak przyspieszyć działanie Power Query w przypadku dużych zbiorów danych.
 - ✔ Jak unikać nieefektywnych operacji, które spowalniają zapytania.
 - ✔ Jak korzystać z funkcji buforowania i operacji na poziomie bazy danych.
 - ✔ Jak minimalizować ilość przetwarzanych danych dla lepszej wydajności.
 
Wprowadzenie
Power Query pozwala na transformację danych, ale przy dużych zbiorach może działać wolno. W tym module nauczysz się optymalnych praktyk, które pozwolą skrócić czas przetwarzania zapytań.
Instrukcje
- Krok 1: Unikanie niepotrzebnych operacji na całym zbiorze danych
 
- Wczytaj duży plik CSV 📂Media:PQSales_Large.csv.
 - Sprawdź liczbę wierszy i kolumn – im więcej danych, tym większe znaczenie ma optymalizacja.
 - Usuń zbędne kolumny na początku zapytania, zamiast na końcu.
 - Użyj Filtrowania wczesnego – zastosuj filtr, aby ograniczyć liczbę przetwarzanych wierszy od razu po imporcie.
 
- Krok 2: Używanie funkcji buforowania (Table.Buffer)
 
- Sprawdź, jak działa przetwarzanie kroków – każda operacja może powodować ponowne przeliczenie całego zapytania.
 - Dodaj krok Table.Buffer() po filtrze, aby zapobiec ponownemu przetwarzaniu danych:
 
let
    Source = Csv.Document(File.Contents("C:\Users\gp\Desktop\PQ\Sales_Large.csv"),[Delimiter=",", Columns=6, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    FilteredRows = Table.SelectRows(Source, each [Cost] > 500),
    BufferedData = Table.Buffer(FilteredRows)
in
    BufferedData
Zastosowanie Table.Buffer() powoduje, że Power Query zapisuje wyniki kroku w pamięci, zamiast ponownie przeliczać je w kolejnych krokach.
- Krok 3: Minimalizacja liczby wczytywanych wierszy
 
- Jeśli pracujesz z dużą bazą danych lub plikami CSV, załaduj tylko potrzebne kolumny i wiersze.
 - Zamiast pobierać wszystkie dane, użyj funkcji Keep Top Rows do pobrania np. pierwszych 1000 wierszy dla testów.
 - Użyj funkcji Remove Duplicates na wczesnym etapie, aby zmniejszyć liczbę przetwarzanych danych.
 
- Krok 4: Optymalizacja połączeń z bazą danych
 
- Jeśli pracujesz z SQL Server, Power BI lub inną bazą danych, unikaj pobierania całej tabeli do Power Query.
 - Zamiast tego, filtrowanie i grupowanie wykonuj na poziomie bazy danych za pomocą przekształceń natywnych SQL.
 
Przykład:
let
    Source = Sql.Database("ServerName", "DatabaseName", [Query="SELECT OrderID, OrderDate, Customer, Product FROM Sales WHERE Cost > 500"])
in
    Source
Dzięki temu Power Query pobierze już przefiltrowane dane, zamiast filtrować całą tabelę w pamięci.
- Krok 5: Unikanie operacji „drill-down” na dużych zbiorach danych
 
- Power Query często automatycznie sugeruje „drill-down” (np. wybór pojedynczej wartości z tabeli).
 - Jeśli wykonujesz operację na dużych zbiorach, staraj się pracować na całych tabelach, zamiast przekształcać pojedyncze rekordy.
 
- Krok 6: Automatyczne odświeżanie zoptymalizowanych zapytań
 
- Po zoptymalizowaniu zapytania, ustaw odświeżanie w Excelu lub Power Query, aby aktualizowało się w odpowiednich interwałach.
 - W Excelu przejdź do Dane → Właściwości zapytania → Odświeżaj dane przy otwieraniu pliku.
 
Zadanie
- Wczytaj duży plik CSV (PQSales_Large.csv).
 - Ogranicz liczbę wczytywanych wierszy i kolumn.
 - Zastosuj Table.Buffer() i sprawdź różnicę w wydajności.
 - Jeśli korzystasz z bazy danych, zoptymalizuj zapytanie SQL.
 - Ustaw automatyczne odświeżanie zoptymalizowanego zapytania.
 - Skorzystaj z ChatGPT do analizy wydajności i dalszej optymalizacji kodu M.
 
Modul 8: Tworzenie dynamicznych raportow i paneli w Excelu z Power Query
Cel
W tym module nauczysz się:
- ✔ Jak wykorzystać Power Query do dynamicznego generowania raportów.
 - ✔ Jak łączyć dane z różnych źródeł w jednym raporcie.
 - ✔ Jak tworzyć interaktywne raporty przy użyciu tabel przestawnych.
 - ✔ Jak zautomatyzować odświeżanie raportów w Excelu.
 
Dostarczone dane
Do tego ćwiczenia użyjemy następujących plików:
- 📂 Media:PQ_Sales_Data.xlsx – Dane sprzedażowe.
 - 📂 Media:PQ_Regions.xlsx – Dane o regionach sprzedaży.
 - 📂 Media:PQ_Targets.xlsx – Cele sprzedażowe.
 
Instrukcje
- Krok 1: Importowanie danych i łączenie źródeł*
 
- Otwórz Power Query w Excelu.
 - Zaimportuj pliki PQ_Sales_Data.xlsx, PQ_Regions.xlsx i PQ_Targets.xlsx.
 - Połącz dane ze sobą, używając klucza wspólnego – np. kolumny "Region".
 - Sprawdź, czy dane są poprawnie połączone i wyświetlają się we właściwym formacie.
 
- Krok 2: Tworzenie dynamicznego raportu*
 
- Kliknij Zamknij i Załaduj do... i wybierz Tabelę przestawną.
 - Wstaw tabelę przestawną w nowym arkuszu i upewnij się, że źródłem danych jest Power Query.
 - W polach tabeli przestawnej ustaw:
 
* Wiersze → Region. * Kolumny → Miesiąc. * Wartości → Suma Sprzedaży.
Sprawdź poprawność wyników i sformatuj tabelę.
- Krok 3: Dodanie warunkowego formatowania*
 
- Wybierz kolumnę "Suma Sprzedaży" w tabeli przestawnej.
 - Kliknij Formatowanie warunkowe → Skalowanie kolorów.
 - Ustaw gradientowe kolory dla niskiej i wysokiej sprzedaży.
 - Zastosuj regułę "Większe niż" i podświetl wartości powyżej celu sprzedażowego (dane z PQ_Targets.xlsx).
 
=B5> VLOOKUP($A5,Targets!$A$2:$B$8,2,0)
- Krok 4: Automatyzacja odświeżania danych*
 
- Przejdź do Dane → Właściwości zapytania → Odświeżaj dane przy otwieraniu pliku.
 - Możesz także ustawić odświeżanie automatyczne co X minut.
 - Sprawdź, czy po dodaniu nowych danych do plików źródłowych raport aktualizuje się poprawnie.
 
Zadanie
- Załaduj i połącz dane z PQ_Sales_Data.xlsx, PQ_Regions.xlsx i PQ_Targets.xlsx.
 - Utwórz tabelę przestawną i sformatuj dane dynamicznie.
 - Dodaj warunkowe formatowanie na podstawie celów sprzedażowych.
 - Ustaw automatyczne odświeżanie danych.
 - Skorzystaj z ChatGPT do analizy i optymalizacji zapytań Power Query.
 
Podsumowanie mod1 - mod8
Cel ćwiczenia
W tym zadaniu podsumujesz wszystkie dotychczas poznane zagadnienia w Power Query poprzez wykonanie serii transformacji na danych dotyczących inwentaryzacji magazynowej i dostawców. Wykorzystasz import danych, filtrowanie, scalanie, dodawanie kolumn, niestandardowe funkcje i optymalizację zapytań.
Dostarczone dane
Do wykonania ćwiczenia wykorzystasz pliki:
- 📂 Media:PQ_inventory.csv – Dane o stanie magazynowym
 - 📂 Media:PQ_suppliers.csv – Informacje o dostawcach
 - 📂 Media:PQ_orders.csv – Zamówienia dostaw do magazynu
 
Instrukcje
🔹 Krok 1: Importowanie danych
- Otwórz Power Query w Excelu lub Power BI.
 - Zaimportuj trzy pliki CSV: `PQ_inventory.csv`, `PQ_suppliers.csv`, `PQ_orders.csv`.
 - Sprawdź, czy dane zostały poprawnie załadowane.
 
🔹 Krok 2: Sprawdzenie i konwersja typów danych
- Upewnij się, że kolumny w każdym zbiorze mają poprawne typy danych.
 - Problem do rozwiązania: kolumna `StockLevel` (poziom zapasów) została błędnie zaimportowana jako tekst, ponieważ zawiera wartości z jednostkami, np. `150 kg`, `200 l`, `75 szt`.
 - Przekształć kolumnę `StockLevel`, aby zawierała tylko wartości liczbowe, a jednostkę zapisz w osobnej kolumnie `Unit`.
 - Sprawdź, czy kolumna `SupplierID` została poprawnie rozpoznana jako liczba całkowita.
 
🔹 Krok 3: Scalanie danych
- Połącz `PQ_inventory.csv` z `PQ_suppliers.csv` za pomocą klucza `SupplierID`.
 - Użyj `Left Outer Join`, aby zachować wszystkie rekordy magazynowe.
 - Następnie scal `PQ_orders.csv` z `PQ_inventory.csv`, używając `ProductID` jako klucza.
 - Sprawdź, czy do tabeli magazynowej dodano informacje o dostawcach i zamówieniach.
 
🔹 Krok 4: Tworzenie kolumn niestandardowych
- Dodaj kolumnę `ReorderLevel`, która oznaczy produkty wymagające zamówienia, gdy `StockLevel` jest mniejsze niż `MinimumStock`.
 - Dodaj kolumnę `DaysSinceLastOrder`, która oblicza liczbę dni od ostatniego zamówienia na dany produkt.
 - Utwórz niestandardową funkcję w M, która przypisuje priorytet zamówienia:
 
if [StockLevel] < [MinimumStock] and [DaysSinceLastOrder] > 30 then "High" else if [StockLevel] < [MinimumStock] then "Medium" else "Low"
- Dodaj kolumnę `OrderPriority` i przypisz do niej wynik tej funkcji.
 
🔹 Krok 5: Filtrowanie i transformacje warunkowe
- Usuń produkty, które są w stanie `Discontinued`.
 - Dodaj nową kolumnę `SupplierRating`, która klasyfikuje dostawców według ich niezawodności:
 
if [OnTimeDeliveryRate] > 95 then "Excellent" else if [OnTimeDeliveryRate] >= 80 then "Good" else "Poor"
- Sprawdź, czy klasyfikacja działa poprawnie.
 
🔹 Krok 6: Przekształcanie struktury danych
- Wykonaj unpivotowanie kolumn `Stock_Jan`, `Stock_Feb`, `Stock_Mar`, aby uzyskać strukturę z kolumnami: `Product`, `Month`, `Stock Level`.
 - Rozdziel kolumnę `ProductDetails` na `ProductName` i `Category`.
 - Scal kolumny `SupplierName` i `Country`, używając ` - ` jako separatora.
 
🔹 Krok 7: Optymalizacja zapytania
- Zastosuj `Table.Buffer()`, aby poprawić wydajność przetwarzania.
 - Usuń zbędne kolumny i duplikaty na początku przekształceń, a nie na końcu.
 - Jeśli dane są duże, ogranicz liczbę wczytywanych wierszy do testowych 1000.
 
🔹 Krok 8: Eksport wyników
- Zapisz gotowe zapytanie jako tabelę w Excelu.
 - Przetestuj odświeżanie danych po zmianie wartości w plikach źródłowych.
 - Ustaw automatyczne odświeżanie zapytania.
 
Zadanie
- ✔ Wykonaj wszystkie kroki opisane powyżej.
 - ✔ Eksperymentuj zarówno z interfejsem graficznym, jak i kodem M.
 - ✔ Zastosuj optymalizację zapytań, aby poprawić wydajność przetwarzania.
 - ✔ Upewnij się, że transformacje działają poprawnie i wyniki są zgodne z oczekiwaniami.
 - ✔ Skorzystaj z ChatGPT w celu rozwiązywania problemów lub optymalizacji skryptu M.
 
Modul 10: Import i analiza plików PDF w Power Query
Cel
W tym module nauczysz się:
- ✔ Jak importować dane z plików PDF do Power Query.
 - ✔ Jak przekształcać dane i wykonywać analizy na poszczególnych raportach biznesowych.
 - ✔ Jak wizualizować wyniki i wyciągać wnioski na podstawie raportów.
 
Dostarczone dane
Do ćwiczenia wykorzystamy pliki PDF zawierające raporty biznesowe:
- 📂 Media:Monthly_Sales_Report_Jan2024.pdf – Raport sprzedaży
 - 📂 Media:Employee_Attendance_Q1_2024.pdf – Raport frekwencji pracowników
 - 📂 Media:Customer_Feedback_Survey_2024.pdf – Raport opinii klientów
 
Instrukcje
🔹 Zadanie 1: Analiza raportu sprzedaży
- Oblicz sumaryczną sprzedaż dla wszystkich produktów.
 - Znajdź produkt o najwyższej i najniższej sprzedaży.
 - Oblicz średnią wartość transakcji na podstawie liczby transakcji i wartości sprzedaży.
 - Grupuj dane według regionów i oblicz łączną sprzedaż dla każdego regionu.
 - Utwórz tabelę przestawną przedstawiającą sprzedaż według regionów i produktów.
 
🔹 Zadanie 2: Analiza raportu frekwencji pracowników
- Oblicz średni wskaźnik frekwencji dla wszystkich działów.
 - Znajdź dział z najwyższą i najniższą frekwencją.
 - Utwórz nową kolumnę klasyfikującą frekwencję według kategorii:
- Wysoka: powyżej 95%
 - Średnia: 85% - 95%
 - Niska: poniżej 85%
 
 - Przefiltruj dane tak, aby wyświetlić tylko pracowników z niską frekwencją.
 - Stwórz wizualizację (np. wykres słupkowy) przedstawiającą średnią frekwencję dla poszczególnych działów.
 
🔹 Zadanie 3: Analiza raportu opinii klientów
- Oblicz średnią ocenę klientów na podstawie skali 1-5.
 - Znajdź liczbę klientów, którzy wystawili ocenę 1 lub 5.
 - Wygeneruj raport podsumowujący najczęściej powtarzające się pozytywne i negatywne opinie.
 - Posortuj dane według oceny klientów od najniższej do najwyższej.
 - Stwórz wykres kołowy pokazujący rozkład ocen klientów.
 
Podsumowanie
- ✔ Wykonaj zadania analityczne dla każdego raportu oddzielnie.
 - ✔ Zastosuj filtrowanie, sortowanie i grupowanie danych.
 - ✔ Wykorzystaj tabele przestawne do agregowania wyników.
 - ✔ Wizualizuj wyniki za pomocą wykresów w Excelu lub Power BI.
 - ✔ Skorzystaj z ChatGPT, jeśli napotkasz trudności w analizie danych.
 
Modul 11: Importowanie i analiza danych z sieci Web
Cel
W tym module nauczysz się:
- ✔ Jak importować dane z tabel statystycznych dostępnych na stronach Wikipedii do Power Query.
 - ✔ Jak przekształcać i analizować dane dotyczące krajów świata.
 - ✔ Jak wizualizować wyniki porównań w Excelu lub Power BI.
 
Źródło danych
W tym ćwiczeniu wykorzystamy rzeczywiste dane tabelaryczne dotyczące krajów świata. Importujemy je bezpośrednio z Wikipedii, gdzie dostępne są zestawienia obejmujące:
- 📊 **Powierzchnię krajów świata** 🌍
 - 📊 **Liczbę ludności w poszczególnych krajach** 👥
 - 📊 **Produkt Krajowy Brutto (PKB) w podziale na państwa** 💰
 
źródła:
- Lista państw świata według powierzchni
 - Lista państw według liczby ludności
 - Lista państw według PKB nominalnego
 
Instrukcje
🔹 Krok 1: Importowanie danych z Wikipedii
- Otwórz Power Query w Excelu lub Power BI.
 - Wybierz opcję **Pobierz dane** → **Z sieci Web**.
 - Wpisz adres URL jednej z powyższych stron Wikipedii.
 - Po załadowaniu dostępnych tabel wybierz tę, która zawiera dane statystyczne (np. powierzchnia krajów, ludność, PKB).
 - Kliknij **Załaduj do Power Query**, aby rozpocząć przekształcanie danych.
 
🔹 Krok 2: Przekształcanie i czyszczenie danych
- **Usuń zbędne kolumny**, pozostawiając tylko te, które są kluczowe dla analizy.
 - **Zmień typy danych**, aby liczby były poprawnie interpretowane (np. `Powierzchnia` jako liczba, `PKB` jako waluta).
 - **Usuń puste wartości** i ewentualne błędy w danych.
 - **Zamień nazwy kolumn** na bardziej zrozumiałe, np. `Kraj`, `Powierzchnia (km²)`, `Ludność`, `PKB (mld USD)`.
 
🔹 Krok 3: Analiza i porównanie krajów
- **Oblicz gęstość zaludnienia**, dodając nową kolumnę według wzoru:
 
Gęstość zaludnienia = Ludność / Powierzchnia
- **Posortuj kraje według PKB**, aby zobaczyć najbogatsze i najbiedniejsze państwa.
 - **Porównaj powierzchnię i liczbę ludności**, aby znaleźć największe i najmniejsze kraje oraz te o największej liczbie mieszkańców.
 - **Zastosuj filtrowanie**, aby wyświetlić tylko wybrane kontynenty lub regiony świata.
 
🔹 Krok 4: Wizualizacja wyników
- Utwórz **tabelę przestawną** w Excelu, aby porównać powierzchnię, ludność i PKB krajów.
 - Wstaw **wykres słupkowy**, aby pokazać największe gospodarki świata.
 - Użyj **mapy cieplnej**, aby zobrazować gęstość zaludnienia w poszczególnych regionach.
 - Dodaj **formatowanie warunkowe**, aby wyróżnić kraje o skrajnych wartościach statystycznych.
 
Zadanie
- ✔ Zaimportuj dane dotyczące krajów świata z Wikipedii do Power Query.
 - ✔ Przekształć i wyczyść dane, aby były gotowe do analizy.
 - ✔ Oblicz gęstość zaludnienia oraz inne wskaźniki statystyczne.
 - ✔ Stwórz wykresy i tabele porównawcze w Excelu lub Power BI.
 - ✔ Skorzystaj z ChatGPT w razie problemów z importem lub analizą danych.
 
Modul 12: Czyszczenie i przekształcanie danych tekstowych w Power Query
Cel
W tym module nauczysz się:
- ✔ Jak usuwać zbędne spacje i poprawiać wielkość liter.
 - ✔ Jak poprawiać formatowanie adresów e-mail.
 - ✔ Jak ujednolicić numery telefonów.
 - ✔ Jak poprawić błędy w kodach pocztowych.
 - ✔ Jak rozdzielać i scalać tekst w tabelach.
 
Dane wejściowe
Dostaliśmy chaotycznie wprowadzone dane klientów, które wymagają czyszczenia.
Plik do pobrania: 📂 Pobierz plik baza_klientow.xlsx
Instrukcje
🔹 Krok 1: Czyszczenie imion i nazwisk
- Usuń podwójne spacje.
 - Zamień imiona i nazwiska na format "Pierwsza litera duża, reszta małe".
 - Popraw literówki w nazwiskach.
 
🔹 Krok 2: Poprawienie formatowania adresów e-mail
- Zamień "@@" na "@".
 - Zamień ".." na ".".
 - Zamień ",com" na ".com".
 - Usuń zbędne spacje wokół adresów e-mail.
 
🔹 Krok 3: Normalizacja numerów telefonów
- Usuń spacje, nawiasy, kropki i znaki "+48".
 - Konwertuj numery do formatu „601-123-456”.
 
🔹 Krok 4: Poprawienie kodów pocztowych
- Zamień "_" na "-".
 - Usuń błędne znaki w kodach pocztowych.
 
🔹 Krok 5: Rozdzielanie i scalanie tekstu
- Rozdziel kolumnę "Imię i Nazwisko" na dwie osobne kolumny.
 - Scal kolumny "Adres" i "Miasto" w jedną kolumnę "Pełny Adres".
 
Oczekiwany efekt końcowy
Po wykonaniu operacji dane klientów powinny zostać poprawnie sformatowane i ujednolicone, gotowe do dalszej analizy w Excelu lub Power BI.
Zadanie
- ✔ Oczyść dane klientów – popraw imiona, e-maile i telefony.
 - ✔ Usuń duplikaty i błędne wpisy.
 - ✔ Rozdziel nazwiska, scal adresy.
 - ✔ Ujednolić format kodów pocztowych.
 - ✔ Zastosuj formatowanie warunkowe w Excelu dla błędnych wartości.
 
- 1️⃣ Czyszczenie błędów w imionach i nazwiskach
 - ✅ Usunięcie podwójnych spacji
 - ✅ Zamiana nazwisk na pierwsza litera duża, reszta małe
 - ✅ Poprawienie literówek (np. „kowalsky” → „Kowalski”)
 
- 📌 Kod M do poprawy wielkości liter i usunięcia spacji:
 
Table.TransformColumns(Dane, {{"Imię i Nazwisko", Text.Proper}, {"Miasto", Text.Upper}})
- 📌 Zamiana podwójnych spacji na pojedyncze:
 
Table.TransformColumns(Dane, Template:"Imię i Nazwisko", each Text.Replace( , " ", " "))
- 2️⃣ Poprawienie formatowania e-maili
 - ✅ Zamiana „@@” na „@”
 - ✅ Zamiana „..” na „.”
 - ✅ Poprawienie „,com” → „.com”
 
- 📌 Kod M do poprawy e-maili:
 
Table.TransformColumns(Dane, Template:"Email", each Text.Replace(Text.Replace( , "@@", "@"), "..", "."))
- 📌 Dodatkowo: usunięcie spacji wokół adresu e-mail
 
Table.TransformColumns(Dane, Template:"Email", Text.Trim)
- 3️⃣ Normalizacja numerów telefonów
 - ✅ Usunięcie nawiasów, kropek, myślników, spacji
 - ✅ Konwersja do jednolitego formatu 601-123-456
 
- 📌 Usunięcie zbędnych znaków z telefonu
 
Table.TransformColumns(Dane, {{"Telefon", each Text.Remove(_, {" ", "(", ")", "+", "-", "."})}})
- 📌 Dodanie standardowego formatu numeru
 
Table.AddColumn(Dane, "Telefon Formatowany", each Text.Middle([Telefon], 0, 3) & "-" & Text.Middle([Telefon], 3, 3) & "-" & Text.Middle([Telefon], 6, 3))
- 4️⃣ Poprawienie kodów pocztowych
 - ✅ Zamiana „_” na „-”
 - ✅ Usunięcie błędnych znaków np. „WRO-567”
 
- 📌 Kod M do poprawienia kodów pocztowych:
 
Table.TransformColumns(Dane, Template:"Kod Pocztowy", each Text.Replace( , " ", "-"))
- 5️⃣ Rozdzielanie i scalanie tekstu
 - ✅ Podział „Imię i Nazwisko” na Imię i Nazwisko
 - ✅ Scalanie Adres + Miasto → Pełny Adres
 
- 📌 Kod M do podziału na Imię i Nazwisko:
 
Table.SplitColumn(Dane, "Imię i Nazwisko", Splitter.SplitTextByEachDelimiter({" "}, QuoteStyle.None, false), {"Imię", "Nazwisko"})
- 📌 Kod M do scalania adresów:
 
Table.AddColumn(Dane, "Pełny Adres", each [Adres] & ", " & [Miasto])
Modul 13: Grupowanie, agregowanie i analiza danych sprzedażowych w Power Query
Cel
W tym module nauczysz się:
- ✔ Jak grupować dane według kategorii, klientów i miesięcy.
 - ✔ Jak agregować dane (suma, średnia, liczba transakcji).
 - ✔ Jak tworzyć segmentacje klientów.
 - ✔ Jak przygotować raporty do dalszej analizy w Excelu.
 
Dane wejściowe
Dostaliśmy dane sprzedażowe, które chcemy pogrupować według różnych kategorii i przeprowadzić analizę sprzedaży.
Plik do pobrania: 📂 Pobierz plik baza_sprzedazy.xlsx
Instrukcje
- 🔹 Krok 1: Wczytanie danych do Power Query
 
- Załaduj plik **baza_sprzedazy.xlsx** do Power Query.
 - Sprawdź typy danych – upewnij się, że:
 
- Kolumna **Data sprzedaży** jest w formacie daty. - Kolumna **Cena jednostkowa** i **Ilość** są w formacie liczbowym.
- 🔹 Krok 2: Duplikowanie danych dla różnych grupowań
 
- Kliknij prawym przyciskiem myszy na wczytanej tabeli w Power Query i wybierz **Powiel**.
 - Powtórz tę operację dla każdej nowej grupy, aby mieć oddzielne tabele dla różnych grupowań.
 
- 🔹 Krok 3: Grupowanie danych według produktów
 
- Na tabeli **GrupowanieProdukt** wykonaj grupowanie.
 - Przejdź do zakładki **Strona główna** → **Grupuj według**.
 - Wybierz **Produkt** jako kolumnę grupującą.
 - W sekcji **Nowe kolumny** dodaj:
 
- **Suma sprzedanych jednostek** (`SUM(Ilość)`). - **Łączna wartość sprzedaży** (`SUM(Cena jednostkowa * Ilość)`). - **Średnia cena jednostkowa** (`AVERAGE(Cena jednostkowa)`).
- 🔹 Krok 4: Grupowanie danych według klientów
 
- Na tabeli **GrupowanieKlient** wykonaj grupowanie.
 - Powtórz proces grupowania, tym razem wybierając **ID Klienta**.
 - Dodaj:
 
- **Liczbę transakcji** (`COUNT`). - **Łączną wartość zamówień** (`SUM(Cena jednostkowa * Ilość)`). - **Średnią wartość zamówienia** (`AVERAGE(Cena jednostkowa * Ilość)`).
- 🔹 Krok 5: Grupowanie miesięczne sprzedaży
 
- Na tabeli **GrupowanieMiesiąc** wykonaj grupowanie.
 - Wybierz kolumnę **Data sprzedaży** i przekształć ją na **miesiąc**:
 
- Kliknij **Dodaj kolumnę** → **Wyodrębnij** → **Miesiąc**.
- Pogrupuj dane według miesiąca i oblicz **łączną sprzedaż w każdym miesiącu**.
 
- 🔹 Krok 6: Wykorzystanie zaawansowanych agregacji
 
- Dodaj nową kolumnę, która wyliczy średnią wartość zamówienia dla danego klienta w stosunku do całej sprzedaży:
 
```m [Łączna wartość zamówień] / List.Sum(#"Tabela_Sprzedaż"[Łączna wartość zamówień])
Stwórz segmentację klientów – dodaj kolumnę warunkową:
Jeśli sprzedaż > 10 000 zł → Kluczowy klient. Jeśli sprzedaż 5 000 - 10 000 zł → Średni klient. Jeśli sprzedaż < 5 000 zł → Mały klient.
Zadanie
- ✔ Zaimportuj dane sprzedażowe i sprawdź poprawność typów danych.
 - ✔ Powiel tabelę, aby utworzyć niezależne grupowania.
 - ✔ Pogrupuj dane według produktów, klientów i miesięcy na oddzielnych tabelach.
 - ✔ Oblicz sumy sprzedaży, średnie wartości zamówień i liczby transakcji.
 - ✔ Dodaj klasyfikację klientów na podstawie wartości zamówień.
 
✔ Przygotuj tabelę przestawną do analizy wyników.