Mateusz Baczewski / 14 maja 2024
Wydaje się to oczywiste, ale warto to podkreślić. Pisanie zapytań pobierających komplet danych z tabeli źródłowej (np. z użyciem SELECT *) nigdy nie jest dobrym pomysłem. Wybierz tylko te kolumny, które rzeczywiście będą wykorzystane w tworzeniu miar czy będą stanowiły jeden z wymiarów w analizie. Przy odświeżaniu, Power BI wykona każde z zapytań i zapisze do datasetu wszystkie dane, które zostaną przez te zapytania zwrócone. Wybieranie wszystkich kolumn z tabeli źródłowej oznacza, wczytywanie niepotrzebnych wartości, które zwiększą czas potrzebny do odświeżenia danych.
Nie jesteś pewny, które z nich będą potrzebne? Nie ma problemu - pobierz wszystkie, a gdy skończysz wykonaj krok w tył i dostosuj zapytanie.
Nie wahaj się filtrować danych już na etapie zapytania. Na przykład, jeśli raport ma dotyczyć nowej akcji promocyjnej, która ruszyła od marca, to nie wczytuj danych sprzedażowych za poprzednie 3 lata. Jeśli akcja dotyczy tylko kilku wybranych SKU to wczytaj tylko je! W ten prosty sposób ograniczysz drugi z wymiarów tabeli i pozwolisz uniknąć zbędnych obliczeń i operacji na danych, które nie są istotne z punktu widzenia danego raportu. Owszem te same ograniczenia można zastosować na poziomie Power BI, ale nie jest to podejście optymalne, gdyż oznacza odfiltrowanie zbędnych danych na jednym z ostatnich etapów. To tak jakbyś załadował kosz pełen zakupów i dopiero przy kasie stwierdzał co finalnie kupisz, a czego nie. Nie łatwiej od samego początku wsadzać do koszyka tylko to czego potrzebujemy?
Aby grupować dane przed wczytaniem ich do Power BI, musisz być świadomym wymiarów analizy, do której będą one wykorzystane. Wczytywanie danych na zbyt dużym poziomie szczegółowości nie ma sensu i znowu - będzie prowadziło do obciążenia procesu odświeżania raportu Power BI.
Najłatwiej będzie zrozumieć to na przykładzie:
Dane sprzedażowe w tabelach SQLowych najczęściej zapisywanie są w formie zawierającej pojedyncze transakcje. Jeśli zależy nam na obserwowaniu wielkości sprzedaży z podziałem na klienta oraz miesiąc, wczytywanie do Power BI każdej pojedynczej transakcji nie ma sensu.
SELECT t_date, t_client, t_value FROM transactions
SELECT YEAR(t_date), MONTH(t_date), t_client, SUM(t_value) FROM transactions GROUP BY YEAR(t_date), MONTH(t_date), t_client
Dzięki temu:
SELECT t_date, t_client, SUM(t_value) FROM transactions GROUP BY t_date, t_client
Będzie pozwalało zejść najniżej do poziomu pojedynczego dnia. Wgląd w poszczególne transakcje nie będzie możliwy. Wejście na poziomy wyższej agregacji będzie natomiast bezproblemowe. Z tak przedstawionych danych bez problemu można policzyć sprzedaż tygodniową, miesięczną czy roczną.
Wszelkiego rodzaju kolumny kalkulowane, zmiany typów danych, scalania i tym podobne operacje implementuj już na etapie tworzenia zapytania. Unikaj wprowadzania ich w PowerQuery, które jest mniej wydajne. Dodatkowo, umieszczenie transformacji w zapytaniu zwiększa czytelność. Wszystkie operacje są skoncentrowane w jednym miejscu, co ułatwia zrozumienie logiki przetwarzania danych.
Tabele kalkulowane są odświeżane dopiero w momencie, gdy podstawowe źródła danych zostaną odświeżone. Przekłada się to na wydłużony czas oczekiwania na odświeżenie całego raportu, nawet w przypadku, gdy jej zawartość wydaje się być ograniczona.