Power Query for Analysts: Difference between revisions
No edit summary Tag: Manual revert |
|||
(108 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
== | {{Cat|Power Query|001}} | ||
== 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. | |||
<br> | |||
*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. | |||
* | <br> | ||
*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. | |||
<br> | <br> | ||
*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?" <br> | |||
*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. | |||
<br> | |||
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 | |||
<br> | <br> | ||
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 | |||
<br> | <br> | ||
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"). | |||
<br> | <br> | ||
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: | |||
* '''📂 [[Media:PQ_sales2.csv]]''' | |||
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",{{"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: | |||
<pre> | |||
if [StockLevel] < [MinimumStock] and [DaysSinceLastOrder] > 30 then "High" | |||
else if [StockLevel] < [MinimumStock] then "Medium" | |||
else "Low" | |||
</pre> | |||
# 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: | |||
<pre> | |||
if [OnTimeDeliveryRate] > 95 then "Excellent" | |||
else if [OnTimeDeliveryRate] >= 80 then "Good" | |||
else "Poor" | |||
</pre> | |||
# 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:''' | |||
* [https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_powierzchni Lista państw świata według powierzchni] | |||
* [https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_liczby_ludno%C5%9Bci Lista państw według liczby ludności] | |||
* [https://pl.wikipedia.org/wiki/Lista_pa%C5%84stw_%C5%9Bwiata_wed%C5%82ug_PKB_nominalnego 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:''' | |||
📂 [[Media:baza_klientow.xlsx|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. | |||
<br> | |||
*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, {{"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, {{"Email", each Text.Replace(Text.Replace(_, "@@", "@"), "..", ".")}}) | |||
*📌 Dodatkowo: usunięcie spacji wokół adresu e-mail | |||
Table.TransformColumns(Dane, {{"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, {{"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:''' | |||
📂 [[Media:baza_sprzedazy.xlsx|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. |
Latest revision as of 18:05, 10 March 2025
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.