Blog JSystems - uwalniamy wiedzę!

Szukaj
Schemat wizualizacji Python w Power BI: model Nordvelli, pola w sekcji Wartości, ramka dataset, skrypt seaborn i obraz PNG na stronie raportu
Ścieżka danych: pola wybrane z modelu Nordvelli trafiają do skryptu jako ramka danych o nazwie dataset, kod seaborn rysuje wykres, a Power BI wstawia go na stronę jako obraz. Ta nazwa to jedyny most między modelem a Twoim kodem.

W skrócieWizualizacja Python albo R w Power BI to wykres rysowany skryptem na kolumnach z modelu, który Power BI pokazuje na kanwie obok wbudowanych wykresów. Konfigurujemy interpreter Pythona i R w Power BI Desktop, budujemy wykres seaborn i ggplot2 na danych Nordvelli i uczymy się szukać przyczyny błędu skryptu.

Lekcja 13 z 28 bezpłatnego kursu Power BI, od pierwszego raportu do Fabric i Copilota, na jednym zestawie danych sieci Nordvella.

<-- Spis wszystkich lekcji
<-- Lekcja 12: Motywy JSON, branding i formatowanie raportuLekcja 14: DAX CALCULATE i kontekst filtrów -->

Wbudowane wykresy Power BI wystarczają w większości raportów Nordvelli, ale prędzej czy później trafisz na potrzebę, której standardowa galeria nie zaspokoi: rozkład wartości koszyka z nałożoną krzywą gęstości, mapa cieplna korelacji ocen z ankiet satysfakcji, czy wykres skrzynkowy (box plot, wykres pokazujący medianę i rozrzut) marży w rozbiciu na kategorie. W takich momentach Power BI pozwala oddać stronę raportu skryptowi w Pythonie albo w R. Ty wybierasz kolumny z modelu, skrypt rysuje wykres w bibliotece seaborn lub ggplot2, a Power BI renderuje gotowy obraz na kanwie raportu, obok wykresów natywnych.

W tym rozdziale przejdziemy przez to na danych Nordvelli krok po kroku: najpierw skonfigurujemy interpreter (program uruchamiający kod) w Opcjach, potem zbudujemy realny wykres seaborn na tabeli FaktSprzedaz, dołożymy do tej tabeli kolumny wyliczone skryptem w Power Query, zrobimy wykres w R przez ggplot2, a na koniec zobaczymy, jak wygląda błąd skryptu i gdzie szukać jego przyczyny.

Z tej lekcji dowiesz się:

Pliki do tej lekcji

Plik startowy: stan z końca lekcji 12 (motyw Nordvella Branding i strona Dashboard). Od niego zaczynasz krok 1.

Pobierz nordvella_12_motyw.pbix

Gotowy efekt: plik w stanie z końca tej lekcji: strona Python i R z wizualizacją Pythona, wizualizacją R i fragmentatorem miasta oraz tabela FaktSprzedaz z kolumnami Sezon i CzyAnomalia z kroku skryptu Pythona w Power Query.

Pobierz nordvella_13_python_r.pbix

Skrypty z lekcji: ten sam kod co w ramkach poniżej, w plikach gotowych do otwarcia w edytorze.

Pobierz 13_seaborn_wizual.pyPobierz 13_powerquery_sezon_anomalie.pyPobierz 13_ggplot_korelacja.RPobierz 13_ggplot_hex.R

Dane źródłowe:
Nordvella_dane.xlsx - dziewięć tabel Nordvelli w arkuszu Excel. Pliki .pbix z tego kursu czytają go z folderu C:\Kurs_PBI.

Pobierz Nordvella_dane.xlsx

Kiedy Python lub R, a kiedy natywny wykres

Co chcemy osiągnąć. Dział sprzedaży Nordvelli chce wiedzieć, jak rozkłada się wartość pojedynczej transakcji w każdej kategorii, a do takiego pytania pasuje wykres pudełkowy, którego w standardowym zestawie Power BI nie ma. Zanim sięgniemy po Pythona albo R, chcemy umieć rozpoznać, kiedy skrypt jest naprawdę potrzebny, a kiedy natywny wykres zrobi to lepiej.

Zanim uruchomisz interpreter, zadaj sobie jedno pytanie: czy natywny wykres Power BI naprawdę nie potrafi tego pokazać. W Nordvelli odpowiedź brzmi "nie" znacznie rzadziej, niż się wydaje. Sprzedaż według miast, trend, udział kategorii, mapa sklepów: to wszystko robisz natywnie i lepiej, bo natywne wizualizacje są interaktywne. Sprawdź to od razu na pliku startowym.

Krok 1: otwórz plik startowy i zapisz go pod nową nazwą

Otwórz nordvella_12_motyw.pbix z ramki na początku lekcji. Od razu wybierz Plik, Zapisz jako i zapisz plik w tym samym folderze jako nordvella_13_python_r.pbix. Dzięki temu plik z lekcji 12 zostaje nietknięty, a nowa nazwa jest widoczna w pasku tytułu na wszystkich zrzutach tej lekcji.

Na pasku stron na dole okna kliknij kartę Przegląd (strona z lekcji 11), a potem na Wykresie miast kliknij najdłuższy słupek, Warszawa.

Strona Przegląd raportu Nordvelli w Power BI po kliknięciu słupka Warszawa: karty i tabela przeliczone na jedno miasto
Jedno kliknięcie w słupek Warszawy i cała strona przelicza się na to miasto: Łączna sprzedaż schodzi z 468 mln zł do 223 mln zł, Liczba transakcji ze 109 tys. do 52 tys., a tabela pokazuje cztery warszawskie punkty sprzedaży z sumą 222 818 295 zł. Pozostałe słupki blakną. Wykres w Pythonie albo R tego nie potrafi: jest obrazem.

Kliknij słupek Warszawy jeszcze raz, żeby zdjąć zaznaczenie. Wykres ze skryptu w Pythonie lub R tej interaktywności nie ma. Wynik jest obrazem PNG: nie da się kliknąć w punkt, żeby przefiltrować resztę strony. To cena za dostęp do bibliotek statystycznych. Płać ją tylko wtedy, gdy dostajesz w zamian coś, czego natywnie nie masz.

Reguły wyboru między natywnym wykresem Power BI a wizualizacją w Pythonie lub R na danych Nordvelli
Reguły wyboru w jednym obrazku. Po skrypt sięgasz dopiero wtedy, gdy natywna galeria naprawdę nie ma czym tego pokazać.
Potrzeba w NordvelliCzym zrobić
Sprzedaż według miast, trend, udział kategorii, mapa sklepówNatywny wykres (interaktywny, filtruje stronę)
Histogram wartości transakcji z krzywą gęstościPython (seaborn) lub R
Wykres pudełkowy wartości transakcji w czterech kategoriach produktówPython (seaborn) lub R (ggplot2)
Mapa cieplna korelacji ocen z FaktSatysfakcjaPython (seaborn, heatmap)
Linia regresji marży względem wartości transakcji z przedziałem ufnościR (ggplot2, geom_smooth)

Wskazówka: wykres skryptowy trzymaj na osobnej stronie analitycznej, a nie na głównym dashboardzie. Odbiorca dashboardu chce klikać i filtrować, a na stronie analitycznej liczy się głębia.

Konfiguracja interpretera: Opcje i skrypty Python

Co chcemy osiągnąć. Power BI nie ma wbudowanego Pythona, a bez niego żaden skrypt w raporcie Nordvelli się nie uruchomi. Chcemy zainstalować Pythona z potrzebnymi bibliotekami i wskazać go w opcjach Power BI.

Power BI nie ma wbudowanego Pythona. Instalujesz go sam, a Power BI korzysta z niego przy każdym rysowaniu wizualizacji i przy każdym odświeżeniu zapytania ze skryptem.

Krok 2: zainstaluj Pythona i biblioteki

Pobierz instalator ze strony python.org (Downloads, Windows) i uruchom go. Na pierwszym ekranie zaznacz pole Add python.exe to PATH, a potem kliknij Install Now. Instalator wrzuci Pythona do C:\Users\TwojaNazwa\AppData\Local\Programs\Python\Python314. Na naszym komputerze Python jest zainstalowany dla wszystkich użytkowników (opcja Customize installation, Install Python 3.14 for all users), dlatego leży w C:\Program Files\Python314. Power BI wykrywa oba miejsca. Alternatywą jest dystrybucja Anaconda, która ma pandas, matplotlib i seaborn od razu.

Po instalacji otwórz Wiersz polecenia (menu Start, wpisz cmd) i wpisz komendę, która dociągnie biblioteki używane w tym rozdziale:

python -m pip install pandas matplotlib seaborn

Pakiety, które już masz, pip oznaczy linią Requirement already satisfied, a doinstalowane wypisze w ostatniej linii Successfully installed. U nas pandas (3.0.6) i matplotlib (3.11.2) były już na maszynie, więc pip doinstalował tylko seaborn (0.13.2).

Wiersz polecenia Windows z instalacją bibliotek pandas, matplotlib i seaborn przez pip dla Power BI
Instalacja bibliotek w Wierszu polecenia. Przy pandas i matplotlib pip wypisuje Requirement already satisfied, seaborn dociąga i kończy linią Successfully installed seaborn-0.13.2.

Krok 3: wskaż interpreter w Opcjach

W Power BI Desktop wybierz Plik, Opcje i ustawienia, Opcje. W lewej kolumnie okna, w grupie GLOBALNE, kliknij Wykonywanie skryptów w języku Python. Po prawej zobaczysz sekcję Opcje skryptów w języku Python z listą Wykryte katalogi główne języka Python. Jeśli Power BI znalazł Twoją instalację, jest na liście, wystarczy ją zostawić. Jeśli nie, wybierz z listy Inna i wskaż katalog Pythona przyciskiem Przeglądaj. Pole Wykryte środowiska IDE języka Python możesz zostawić bez zmian, do tej lekcji wystarczy edytor wbudowany w Power BI. Kliknij OK.

Okno Opcje w Power BI Desktop z sekcją Opcje skryptów w języku Python i wykrytym katalogiem C:\Program Files\Python314
Sekcja Opcje skryptów w języku Python. Power BI sam znalazł instalację w C:\Program Files\Python314. Niżej pole środowiska IDE, tu z wykrytym Visual Studio Code.

Pułapka: jeśli masz kilka instalacji Pythona (na przykład Anacondę i osobny python.org), Power BI wykryje je wszystkie, a biblioteki masz tylko w jednej. Wskaż dokładnie ten katalog, w którym uruchamiałeś pip install. Zły katalog to najczęstsza przyczyna błędu No module named 'seaborn'.

Dodanie wizualizacji Python i ramka dataset

Krok 4: dodaj stronę Python i R

Co chcemy osiągnąć. W tej sekcji wstawimy pierwszy element wizualny Pythona, przekażemy mu trzy pola z modelu i sprawdzimy, w jakiej postaci trafiają do skryptu: jako ramka danych pandas o nazwie dataset. Na tym samym elemencie w następnej sekcji narysujemy wykres seaborn, a fragmentator miast pokaże, czy wykres reaguje na filtry raportu.

Wizualizacje skryptowe postawimy na osobnej stronie. Kliknij + na końcu paska stron. Power BI doda pustą stronę. Kliknij dwukrotnie jej nazwę, wpisz Python i R i naciśnij Enter.

Nowa pusta strona Python i R w Power BI Desktop na końcu paska stron raportu Nordvelli
Pusta strona Python i R za stroną Dashboard z lekcji 12. Strona ma rozmiar 1920 na 1080 pikseli, tak jak strony z motywem Nordvelli.

Krok 5: wstaw fragmentator miasta

Fragmentator przyda się za chwilę, żeby sprawdzić, czy wykres Pythona reaguje na filtry. Kliknij puste płótno, w panelu Wizualizacje kliknij ikonę Fragmentator, a w panelu Dane rozwiń tabelę DimSklepy i zaznacz haczykiem Miasto. Przy zaznaczonym fragmentatorze kliknij ikonę pędzla Formatuj element wizualny, kartę Ogólne i rozwiń Właściwości. W sekcji Pozycja wpisz Pozioma 1560 i Pionowa 30, w sekcji Rozmiar Wysokość 500 i Szerokość 330. Każdą liczbę zatwierdź Enterem.

Fragmentator Miasto z listą jedenastu miast Nordvelli przy prawej krawędzi strony Python i R w Power BI
Fragmentator z jedenastoma miastami przy prawej krawędzi strony. Żadne miasto nie jest zaznaczone. Żeby zaznaczyć sam fragmentator, klikaj w jego nagłówek Miasto, a nie w listę, bo klik w listę wybiera miasto.

Krok 6: wstaw wizualizację Python

Kliknij puste miejsce na płótnie, a w panelu Wizualizacje kliknij ikonę z napisem Py (podpowiedź: Wizualizacja języka Python). Przy pierwszym elemencie skryptowym Power BI pokaże okno Włącz elementy wizualne skryptu z ostrzeżeniem, że wizualizacje skryptów mogą wykonywać kod, który może stanowić zagrożenie dla bezpieczeństwa lub prywatności. Kliknij Włącz.

Okno Włącz elementy wizualne skryptu w Power BI Desktop po kliknięciu ikony Py w panelu Wizualizacje
Okno zgody na skrypty. Pod nim widać już pusty element Python na płótnie i otwarty Edytor skryptów języka Python.

Na płótnie jest mały, pusty element z logo Pythona, a dolną połowę okna zajmuje Edytor skryptów języka Python z napisem Przeciągnij pola do obszaru Wartości w okienku Wizualizacja, aby zacząć tworzyć skrypt.. W panelu Wizualizacje pojawił się obszar Wartości.

Pusty element wizualny Python na stronie Power BI i Edytor skryptów języka Python z prośbą o przeciągnięcie pól do obszaru Wartości
Stan po kliknięciu Włącz. Element jest mały i jest tam, gdzie kliknąłeś płótno. Powiększysz go w kroku 10.

Krok 7: wrzuć pola do sekcji Wartości

Przy zaznaczonym elemencie Python rozwiń w panelu Dane tabelę FaktSprzedaz i przeciągnij kolumnę WartoscBrutto na napis Dodaj pola danych tutaj w obszarze Wartości. W edytorze od razu pojawi się kilka linii komentarza wygenerowanych przez Power BI, a nad nimi zielony pasek Zduplikowane wiersze zostaną usunięte z danych..

Edytor skryptów języka Python w Power BI z preambułą wygenerowaną po dodaniu pola WartoscBrutto do sekcji Wartości
Po pierwszym polu edytor ma preambułę z ramką dataset. W obszarze Wartości jest Suma elementów WartoscBrutto, do tego wrócimy w kroku 8.

Teraz z tabeli DimProdukty przeciągnij kolumnę Kategoria, a z FaktSprzedaz kolumnę SprzedazID. Upuszczaj każde pole tuż pod ostatnim polem w obszarze Wartości. Preambuła ma teraz trzy kolumny:

# Następujący kod służący do tworzenia ramki danych i usuwania zduplikowanych wierszy jest zawsze wykonywany i działa jako preambuła skryptu:

# dataset = pandas.DataFrame(WartoscBrutto, Kategoria, SprzedazID)
# dataset = dataset.drop_duplicates()

# W tym miejscu wklej lub wpisz kod skryptu:
Obszar Wartości elementu Python w Power BI z polami Suma elementów WartoscBrutto, Kategoria i Liczba elementów SprzedazID oraz preambuła skryptu
Trzy pola w obszarze Wartości. Power BI sam nadał polom liczbowym agregację: Suma elementów WartoscBrutto i Liczba elementów SprzedazID.

Przeczytaj pierwszą linię komentarza: kod tworzący ramkę i usuwający duplikaty jest zawsze wykonywany. Linie z # są tylko informacją, ich zakomentowanie ani usunięcie niczego nie zmienia. Dwie transakcje Nordvelli z tą samą wartością i kategorią to dwie osobne sprzedaże, a Power BI zostawiłby z nich jedną. Na samych polach WartoscBrutto i Kategoria do skryptu trafiłoby 100 790 wierszy zamiast 108 675. Dlatego dodaliśmy SprzedazID: każda transakcja ma inny numer, więc żaden wiersz nie jest duplikatem.

Krok 8: przestaw pola liczbowe na Nie sumuj

Power BI grupuje dane wizualizacji po polach tekstowych, a pola liczbowe sumuje. Przy obecnych ustawieniach skrypt dostałby cztery wiersze, po jednym na kategorię, z sumą wartości i liczbą transakcji. Histogram z czterech liczb nie ma sensu. W obszarze Wartości kliknij strzałkę w dół przy polu Suma elementów WartoscBrutto i wybierz Nie sumuj.

Menu pola WartoscBrutto w obszarze Wartości elementu Python w Power BI z zaznaczoną pozycją Suma i opcją Nie sumuj
Menu pola w obszarze Wartości. Haczyk jest przy Suma, kliknij Nie sumuj.

To samo zrób przy polu Liczba elementów SprzedazID: strzałka w dół, Nie sumuj. W obszarze zostają trzy pola bez przedrostków.

Obszar Wartości elementu Python w Power BI z polami WartoscBrutto, Kategoria i SprzedazID bez agregacji
Po przestawieniu pola nazywają się tak jak kolumny: WartoscBrutto, Kategoria, SprzedazID. Teraz każdy wiersz ramki to jedna transakcja.

Czym dokładnie jest dataset

Ramka danych (po angielsku DataFrame, tabela z nazwanymi kolumnami z biblioteki pandas) o nazwie dataset zawiera tylko kolumny z sekcji Wartości i tylko wiersze, które przechodzą przez filtry strony. Jeśli we fragmentatorze wybierzesz Kraków, skrypt dostanie tylko krakowskie transakcje. Tak wyglądają pierwsze wiersze naszej ramki (kolejność kolumn jak w obszarze):

WartoscBruttoKategoriaSprzedazID
7 624,13Komputery1
8 250,29Komputery2
9 139,98Telefony3
11 604,85Telefony4
3 810,76AGD/RTV5

Wykres seaborn na danych Nordvelli

Co chcemy osiągnąć. Chcemy dać działowi sprzedaży Nordvelli wykres, którego Power BI nie narysuje natywnie: rozkład wartości transakcji z porównaniem kategorii, i sprawdzić, czy reaguje na fragmentator miasta tak jak zwykła wizualizacja.

Wykres odpowie na pytanie działu sprzedaży: jak rozkłada się wartość pojedynczej transakcji i czy różni się między kategoriami. Złożymy go z dwóch paneli: histogramu wartości transakcji i wykresu pudełkowego (box plot, wykres pokazujący medianę i rozrzut) wartości w podziale na kategorie.

Krok 9: wklej kod i uruchom skrypt

Kliknij w edytorze pod ostatnią linią preambuły i wklej kod z ramki poniżej (jest też w pliku 13_seaborn_wizual.py). Potem kliknij ikonę Uruchom skrypt, ostatnią po prawej na ciemnym pasku edytora (trójkąt w kółku).

import matplotlib.pyplot as plt
import seaborn as sns

sns.set_theme(style="whitegrid")
fig, axes = plt.subplots(1, 2, figsize=(11, 4.5))

# Panel 1: rozkład wartości pojedynczej transakcji
sns.histplot(
    data=dataset, x="WartoscBrutto",
    bins=50, kde=True, color="#E02D33", ax=axes[0]
)
axes[0].set_title("Rozkład wartości transakcji (Nordvella)")
axes[0].set_xlabel("Wartość brutto (PLN)")
axes[0].set_ylabel("Liczba transakcji")

# Panel 2: wykres pudełkowy wartości per kategoria produktu
sns.boxplot(
    data=dataset, x="Kategoria", y="WartoscBrutto",
    hue="Kategoria", palette="Reds", legend=False, ax=axes[1]
)
axes[1].set_title("Wartość transakcji wg kategorii")
axes[1].set_xlabel("Kategoria")
axes[1].set_ylabel("Wartość brutto (PLN)")
axes[1].tick_params(axis="x", rotation=30)

plt.tight_layout()
plt.show()

Power BI przekaże dataset do Pythona, wykona kod i wstawi to, co narysował matplotlib, jako obraz. Element na płótnie jest jednak tak mały, że wykres jest nieczytelny.

Wynik skryptu seaborn w małym elemencie Python na płótnie Power BI i kod w Edytorze skryptów języka Python
Skrypt zadziałał, ale w małej ramce widać tylko zarys histogramu i wykresu pudełkowego. Na dole koniec kodu z plt.show().

Krok 10: powiększ element i zwiń edytor

Przy zaznaczonym elemencie Python kliknij ikonę pędzla Formatuj element wizualny, kartę Ogólne, rozwiń Właściwości i wpisz w sekcji Pozycja: Pozioma 30, Pionowa 30, a w sekcji Rozmiar: Wysokość 500, Szerokość 1500. Każdą liczbę zatwierdź Enterem. Najpierw pozycja, potem rozmiar, bo Power BI przycina szerokość do krawędzi strony liczonej od bieżącego położenia.

Panel Formatuj element wizualny w Power BI z rozmiarem 500 na 1500 i pozycją 30, 30 dla wizualizacji Python
Właściwości elementu Python: wysokość 500, szerokość 1500, pozycja 30 i 30. Power BI od razu rysuje wykres na nowo w większej ramce.

Kliknij strzałkę w dół na prawym końcu paska Edytor skryptów języka Python, żeby zwinąć edytor, a potem kliknij puste miejsce strony. Płótno wraca do pełnej wysokości i wykres da się przeczytać.

Wizualizacja Python z seaborn na stronie Python i R w Power BI: histogram wartości transakcji Nordvelli i wykres pudełkowy według czterech kategorii
Wynik skryptu na całej sieci. Najwyższy słupek histogramu ma ponad 28 tys. transakcji, wykres pudełkowy pokazuje cztery kategorie: Akcesoria, Komputery, AGD/RTV i Telefony. Tytuł nad wykresem Power BI ułożył sam z nazw pól.

Krok 11: sprawdź, czy wykres słucha fragmentatora

Kliknij Gdańsk we fragmentatorze Miasto. Power BI uruchomi skrypt od nowa na samych gdańskich transakcjach: najwyższy słupek histogramu spada do około 1 700, a kształt rozkładu zostaje ten sam. Kliknij Gdańsk jeszcze raz, żeby zdjąć zaznaczenie.

Animacja: wizualizacja Python w Power BI przed i po wybraniu Gdańska we fragmentatorze Miasto
Bez zaznaczenia najwyższa etykieta osi Liczba transakcji to 30 000, po kliknięciu Gdańska 1 600 (najwyższy słupek sięga nieco ponad nią, około 1 700). Wizualizacja Pythona reaguje na filtry jak każda inna, tylko wolniej, bo za każdym razem uruchamia skrypt.

Krok 12: otwórz wykres w trybie koncentracji uwagi

Najedź myszą na wykres Pythona i kliknij ikonę Tryb koncentracji uwagi w prawym górnym rogu ramki. Wizualizacja zajmie całe płótno. Wróć przyciskiem Powrót do raportu w lewym górnym rogu.

Wizualizacja Python w trybie koncentracji uwagi w Power BI: histogram i wykres pudełkowy wartości transakcji w Gdańsku
Tryb koncentracji uwagi, zrzut zrobiony przy zaznaczonym Gdańsku. W powiększeniu dobrze widać etykiety osi i pojedyncze transakcje odstające powyżej 50 000 zł.

Jak zinterpretować to, co widzisz

Histogram po lewej pokazuje, że większość transakcji Nordvelli jest niska: najliczniejszy przedział, od około 2 700 do 4 000 zł, ma 28 624 transakcje. Linia gęstości (KDE, wygładzona krzywa pokazująca, gdzie danych jest najwięcej) potwierdza, że rozkład jest prawoskośny: ma długi ogon w stronę wysokich kwot, aż do 62 676 zł. Wykres pudełkowy pokazuje to, czego histogram nie pokaże. Pudełko to zakres od pierwszego do trzeciego kwartyla, kreska w środku to mediana, a kropki to transakcje odstające. Mediana Akcesoriów to 1 102 zł, Komputerów 3 552 zł, AGD/RTV 3 965 zł, a Telefonów 5 554 zł. Telefony mają najwyżej położone pudełko i najdroższą transakcję w danych.

Wskazówka: ten sam wykres zrobisz dla marży. Przeciągnij MarzaNetto do sekcji Wartości, przestaw na Nie sumuj i w kodzie wykresu pudełkowego zamień y="WartoscBrutto" na y="MarzaNetto".

Skrypt Python w Power Query

Co chcemy osiągnąć. Analityk Nordvelli chce przy każdej transakcji widzieć porę roku i znacznik, czy kwota mocno odstaje od typowych. Chcemy dodać te dwie kolumny skryptem Pythona w Power Query, zanim dane trafią do modelu.

Python w Power BI ma drugie oblicze: skrypt w Power Query, który nie rysuje, tylko przekształca tabelę, zanim trafi do modelu. Dołożymy do FaktSprzedaz dwie kolumny: Sezon z porą roku i CzyAnomalia z flagą transakcji odstających według reguły trzech sigm (wartość dalej niż trzy odchylenia standardowe od średniej).

Krok 13: otwórz Edytor Power Query na tabeli FaktSprzedaz

Na karcie Narzędzia główne kliknij strzałkę pod przyciskiem Przekształć dane i wybierz Przekształć dane.

Rozwinięte menu przycisku Przekształć dane na karcie Narzędzia główne w Power BI Desktop
Menu przycisku Przekształć dane. Pierwsza pozycja otwiera Edytor Power Query.

W oknie edytora kliknij FaktSprzedaz na liście zapytań po lewej, a potem kartę Przekształć na wstążce. Po prawej stronie wstążki jest grupa Skrypty z dwoma przyciskami: Uruchom skrypt języka R i Uruchom skrypt języka Python. Zapytanie ma na razie cztery kroki: Źródło, Nawigacja, Nagłówki o podwyższonym poziomie i Zmieniono typ.

Edytor Power Query z zapytaniem FaktSprzedaz i kartą Przekształć, na której jest grupa Skrypty z przyciskiem Uruchom skrypt języka Python
FaktSprzedaz w Edytorze Power Query. Kolumny CenaNetto, WartoscNetto i WartoscBrutto mają typ liczbowy (ikona 1.2 w nagłówku), liczby mają przecinek dziesiętny.

Krok 14: wklej skrypt Pythona

Kliknij Uruchom skrypt języka Python. W oknie Uruchom skrypt języka Python pole Skrypt ma już linię # Element 'dataset' zawiera dane wejściowe dla skryptu. Kliknij pod nią i wklej kod z ramki (jest też w pliku 13_powerquery_sezon_anomalie.py). Pod polem okno pisze, z której instalacji Pythona skorzysta. Kliknij OK.

import pandas as pd

# dataset = tabela FaktSprzedaz przekazana z Power Query
df = dataset.copy()

# Wyliczenie sezonu z klucza daty (DataID w formacie RRRRMMDD)
miesiac = df["DataID"].astype(str).str[4:6].astype(int)
mapa_sezonow = {
    12: "Zima", 1: "Zima", 2: "Zima",
    3: "Wiosna", 4: "Wiosna", 5: "Wiosna",
    6: "Lato", 7: "Lato", 8: "Lato",
    9: "Jesień", 10: "Jesień", 11: "Jesień",
}
df["Sezon"] = miesiac.map(mapa_sezonow)

# Oznaczenie transakcji odstających (reguła trzech sigm)
srednia = df["WartoscBrutto"].mean()
odchylenie = df["WartoscBrutto"].std()
df["CzyAnomalia"] = (
    (df["WartoscBrutto"] - srednia).abs() > 3 * odchylenie
).astype(int)

# Power Query pokaże każdą ramkę danych jako osobną tabelę - tutaj będzie to df
Okno Uruchom skrypt języka Python w Edytorze Power Query z wklejonym kodem liczącym sezon i anomalie dla tabeli FaktSprzedaz
Okno skryptu z wklejonym kodem pod domyślnym komentarzem. Pod polem: Skrypt jest uruchamiany przy użyciu instalacji języka Python C:\Program Files\Python314.

Krok 15: ustaw poziom prywatności

Zamiast podglądu pojawi się żółty pasek Wymagane są informacje dotyczące prywatności danych.. Power Query traktuje skrypt jak osobne źródło danych i chce wiedzieć, czy wolno mu przekazać dane z pliku Excel. Kliknij Kontynuuj.

Pasek Wymagane są informacje dotyczące prywatności danych w Edytorze Power Query po dodaniu kroku Uruchom skrypt języka Python
Nowy krok Uruchom skrypt języka Python jest już na liście Zastosowane kroki, ale podgląd czeka na decyzję o prywatności.

W oknie Poziomy prywatności jest jeden wiersz: c:\, czyli dysk, na którym leży C:\Kurs_PBI\Nordvella_dane.xlsx. Rozwiń listę po prawej, wybierz Organizacyjne i kliknij Zapisz. Pole Ignoruj kontrole poziomów prywatności dla tego pliku zostaw puste: ono wyłącza kontrolę dla całego pliku, a to zabezpieczenie przed wysłaniem danych tam, gdzie nie powinny trafić.

Okno Poziomy prywatności w Power Query ze źródłem c:\ ustawionym na Organizacyjne przed uruchomieniem skryptu Python
Źródło c:\ na poziomie Organizacyjne. Przycisk Zapisz staje się aktywny dopiero po wybraniu poziomu.

Krok 16: wybierz tabelę df

Po kilkunastu sekundach Power Query pokaże tabelę z kolumnami Name i Value i dwoma wierszami: dataset i df. To wszystkie ramki danych, które zostały w pamięci po skrypcie. Nasz wynik to df, więc kliknij Table w wierszu df.

Wynik kroku Uruchom skrypt języka Python w Power Query: tabela z dwiema ramkami danych dataset i df
Skrypt zwraca każdą ramkę danych z pamięci. dataset to tabela wejściowa, df to tabela z nowymi kolumnami.

Tabela się rozwinie, a Power Query sam doda krok Zmieniono typ1. Spójrz na nagłówki kolumn CenaNetto, WartoscNetto, WartoscBrutto i MarzaNetto: mają ikonę ABC, czyli typ tekstowy, a liczby mają kropkę zamiast przecinka (7624.13). Python oddaje liczby dziesiętne z kropką, a Power BI w polskich ustawieniach regionalnych nie rozpoznaje ich jako liczb. Gdyby tak zostało, miary sprzedaży i marży z poprzednich lekcji przestałyby działać, bo nie da się zsumować tekstu.

Tabela df w Power Query po skrypcie Python: kolumny CenaNetto, WartoscNetto i WartoscBrutto z typem tekstowym i kropką dziesiętną
Po rozwinięciu df kolumny z kwotami są tekstem (ikona ABC). Kolumny z liczbami całkowitymi, na przykład SprzedazID i Ilosc, mają poprawny typ 123.

Krok 17: przywróć typ liczbowy z ustawieniami regionalnymi

Kliknij nagłówek CenaNetto, a potem z wciśniętym Ctrl nagłówki WartoscNetto, WartoscBrutto i MarzaNetto (MarzaNetto znajdziesz po przewinięciu tabeli w prawo, za KosztWlasny; KosztWlasny ma poprawny typ, nie zaznaczaj go). Kliknij prawym przyciskiem myszy nagłówek jednej z zaznaczonych kolumn i wybierz Zmień typ, Używając ustawień regionalnych....

Menu kontekstowe nagłówka kolumny w Power Query z podmenu Zmień typ i pozycją Używając ustawień regionalnych
Cztery kolumny z kwotami są zaznaczone. Na końcu podmenu Zmień typ jest pozycja Używając ustawień regionalnych. Po prawej widać też nowe kolumny Sezon i CzyAnomalia.

W oknie Zmienianie typu za pomocą ustawień regionalnych ustaw Typ danych na Liczba dziesiętna, a Ustawienia regionalne na Angielski (Stany Zjednoczone). Pod spodem okno pokaże przykład liczby w tym zapisie: 2,100.50. Kliknij OK.

Okno Zmienianie typu za pomocą ustawień regionalnych w Power Query: Liczba dziesiętna i Angielski (Stany Zjednoczone)
Ustawienia regionalne mówią Power Query, jak czytać tekst: kropka to separator dziesiętny, przecinek oddziela tysiące.
Kolumny z kwotami w Power Query po zmianie typu z ustawieniami regionalnymi: typ 1.2 i przecinek dziesiętny
Kolumny mają znów typ 1.2 i przecinek dziesiętny. Na liście kroków doszedł krok Zmieniono typ z ustawieniami regionalnymi.

Krok 18: zamknij edytor i wczytaj wynik

Kliknij kartę Narzędzia główne i przycisk Zamknij i zastosuj. Power BI uruchomi skrypt na wszystkich 108 675 wierszach i przeładuje tabelę. W oknie Ładowanie przez chwilę zobaczysz FaktSprzedaz z licznikiem wierszy z Pythona.

Okno Ładowanie w Power BI Desktop podczas wczytywania tabeli FaktSprzedaz przetworzonej skryptem Python
Ładowanie FaktSprzedaz. Trwa dłużej niż zwykle, bo Python przelicza całą tabelę, i tak będzie przy każdym kolejnym odświeżeniu.

Po załadowaniu w panelu Dane, w tabeli FaktSprzedaz, są dwie nowe kolumny: CzyAnomalia i Sezon. Sprawdziliśmy wynik zapytaniem DAX: anomalii jest 2 109 (wszystkie powyżej 22 132 zł, czyli średnia 5 209 zł plus trzy odchylenia po 5 641 zł), sezony rozkładają się tak: Zima 34 981 transakcji, Wiosna 28 409, Jesień 26 082, Lato 19 203. Łączna sprzedaż nadal wynosi 467 775 009,17 zł, więc poprawka typów niczego nie zepsuła.

Panel Dane w Power BI z tabelą FaktSprzedaz i nowymi kolumnami CzyAnomalia i Sezon dodanymi skryptem Python
Nowe kolumny w panelu Dane: CzyAnomalia na górze listy, Sezon niżej, w kolejności alfabetycznej.

Pułapka: skrypt w Power Query uruchamia się przy każdym odświeżeniu danych, a nie raz. Jeśli transformację da się zapisać w języku M albo w kolumnie DAX, wybierz je. Po publikacji w usłudze Power BI zapytanie ze skryptem Pythona odświeży się tylko przez bramę danych w trybie osobistym, na komputerze z tym samym Pythonem i bibliotekami.

Wykres ggplot (R) w raporcie

Co chcemy osiągnąć. Zarząd Nordvelli pyta, czy droższe transakcje przynoszą wyższą marżę i czy wygląda to tak samo w każdej kategorii. Chcemy odpowiedzieć wykresem narysowanym w języku R biblioteką ggplot2, bo część analityków pracuje w R, a nie w Pythonie.

R działa w Power BI tak samo jak Python, tylko z inną ikoną w panelu Wizualizacje (litera R) i innym interpreterem. Dane w skrypcie R też nazywają się dataset, ale to data.frame, natywna tabela języka R.

Krok 19: zainstaluj R i wskaż go w Opcjach

Pobierz R dla Windows ze strony projektu CRAN (cran.r-project.org) i zainstaluj z domyślnymi ustawieniami. U nas to R 4.6.1 w C:\Program Files\R\R-4.6.1. Uruchom program R z menu Start i w konsoli wpisz:

install.packages(c("ggplot2", "hexbin"))

Pakiet ggplot2 rysuje wykres, hexbin jest potrzebny w wariancie z kafelkami w kroku 23. Potem w Power BI wybierz Plik, Opcje i ustawienia, Opcje, w grupie GLOBALNE kliknij Obsługa skryptów języka R i sprawdź, czy na liście Wykryte katalogi główne języka R jest katalog R.

Okno Opcje w Power BI z sekcją Opcje skryptu języka R i wykrytym katalogiem C:\Program Files\R\R-4.6.1
Sekcja Opcje skryptu języka R. Power BI wykrył katalog sam. Gdyby go nie było na liście, wybierasz pozycję Inna i wskazujesz katalog przyciskiem Przeglądaj.

Krok 20: wstaw wizualizację R

Kliknij puste miejsce na płótnie pod wykresem Pythona, a w panelu Wizualizacje kliknij ikonę R (podpowiedź: Element wizualny skryptu R). Zgodę na skrypty dałeś już w kroku 6, więc okno się nie pojawi. Power BI wstawi element R pod wykresem Pythona i otworzy Edytor skryptów języka R.

Pusty element wizualny R pod wykresem Python na stronie Python i R w Power BI Desktop
Pusty element R z napisem Zaznacz lub przeciągnij pola, aby wypełnić tę wizualizację. Edytor skryptów języka R jest zwinięty na dole okna.

Krok 21: wrzuć pola i przestaw je na Nie sumuj

Pytanie dla Nordvelli: czy droższe transakcje przynoszą wyższą marżę i czy wygląda to tak samo w każdej kategorii. Do obszaru Wartości przeciągnij z FaktSprzedaz WartoscBrutto i MarzaNetto, z DimProdukty Kategoria, a na końcu z FaktSprzedaz SprzedazID. Przy WartoscBrutto, MarzaNetto i SprzedazID wybierz ze strzałki Nie sumuj, tak jak w kroku 8. Rozwiń edytor strzałką w górę na jego pasku. Preambuła w R wygląda tak:

# Następujący kod służący do tworzenia ramki danych i usuwania zduplikowanych wierszy jest zawsze wykonywany i działa jako preambuła skryptu:

# dataset <- data.frame(WartoscBrutto, MarzaNetto, Kategoria, SprzedazID)
# dataset <- unique(dataset)

# W tym miejscu wklej lub wpisz kod skryptu:
Edytor skryptów języka R w Power BI z preambułą data.frame i unique oraz czterema polami bez agregacji w obszarze Wartości
Cztery pola bez agregacji i preambuła R. Duplikaty usuwa tu funkcja unique, a pasek nad kodem ostrzega o tym tak samo jak przy Pythonie.

Krok 22: wklej kod ggplot2 i uruchom

Wklej kod pod preambułą (plik 13_ggplot_korelacja.R) i kliknij Uruchom skrypt na pasku edytora. Rysowanie ponad 108 tys. punktów z liniami regresji trwa kilkanaście sekund.

library(ggplot2)

# dataset = data.frame z polami WartoscBrutto, MarzaNetto, Kategoria, SprzedazID
ggplot(dataset, aes(x = WartoscBrutto, y = MarzaNetto, color = Kategoria)) +
  geom_point(alpha = 0.35, size = 1.6) +
  geom_smooth(method = "lm", se = TRUE) +
  scale_color_brewer(palette = "Set1") +
  labs(
    title = "Korelacja: wartość transakcji a marża (Nordvella)",
    x = "Wartość brutto (PLN)",
    y = "Marża netto (PLN)",
    color = "Kategoria"
  ) +
  theme_minimal(base_size = 12)

Zwiń edytor i otwórz wykres R w trybie koncentracji uwagi, tak jak w kroku 12. Każdy punkt to jedna transakcja, kolor to kategoria, a przez każdą chmurę przechodzi linia regresji (dopasowana prosta). geom_smooth(method = "lm") dolicza ją metodą regresji liniowej, a se = TRUE rysuje wokół niej pas niepewności; przy tak dużej liczbie punktów pas jest węższy niż linia.

Wykres ggplot2 w Power BI: chmura punktów wartości transakcji i marży Nordvelli z liniami regresji dla czterech kategorii
Najbardziej stroma jest linia Akcesoriów (niebieska), potem AGD/RTV (czerwona), Komputery (zielona) i najpłaska Telefony (fioletowa).

Nachylenie linii to sygnał biznesowy: ile złotych marży przynosi każda złotówka wartości transakcji. Policzyliśmy je na danych: Akcesoria około 0,33 zł, AGD/RTV 0,18 zł, Komputery 0,08 zł, Telefony 0,05 zł. Telefony mają najdroższe transakcje (krok 12), ale najniższą marżę na złotówkę. Akcesoria to małe kwoty z dużym narzutem.

Krok 23: wypróbuj wariant z kafelkami heksagonalnymi

Gdy punktów jest tyle, że zlewają się w plamę, lepiej pokazać gęstość. W trybie koncentracji rozwiń edytor, zaznacz cały kod (Ctrl+A), wklej wariant z ramki (plik 13_ggplot_hex.R) i kliknij Uruchom skrypt.

# Wariant lekki: gdy punktów jest za dużo i wykres się zlewa,
# zastąp chmurę gęstością 2D (kafelki heksagonalne)
library(ggplot2)

ggplot(dataset, aes(x = WartoscBrutto, y = MarzaNetto)) +
  geom_hex(bins = 40) +
  scale_fill_gradient(low = "#fdd", high = "#E02D33") +
  labs(title = "Gęstość: wartość a marża", x = "Wartość brutto (PLN)", y = "Marża netto (PLN)") +
  theme_minimal()
Wariant wykresu R z geom_hex w Power BI: kafelki heksagonalne gęstości transakcji Nordvelli według wartości i marży
Kolor kafelka koduje liczbę transakcji. Najciemniejsze kafelki w lewym dolnym rogu to ponad 10 000 transakcji, czego na chmurze punktów nie widać.

Wariant hex był tylko próbą. Wklej z powrotem kod z kroku 22 (razem z preambułą albo pod nią), kliknij Uruchom skrypt, zwiń edytor i wróć do raportu przyciskiem Powrót do raportu. Plik efektu tej lekcji ma na stronie wykres z kroku 22.

Wskazówka: wizualizacja Python i R dostaje najwyżej 150 000 wierszy. FaktSprzedaz ma 108 675 transakcji, więc mieści się w całości, ale jeśli dołożysz pola, które mnożą wiersze, Power BI weźmie tylko pierwsze 150 000 i wykres pokaże niepełny obraz. Wtedy agreguj dane przed wykresem albo zawęź je fragmentatorem.

Błąd skryptu w wizualizacji: jak go czytać

Co chcemy osiągnąć. Wykres skryptowy w raporcie Nordvelli kiedyś pokaże szary prostokąt zamiast wykresu, na przykład po literówce w nazwie kolumny. Chcemy nauczyć się czytać komunikat błędu, zanim zdarzy się to naprawdę.

Prędzej czy później zamiast wykresu zobaczysz szary prostokąt. Sprawdź, jak to wygląda, zanim zdarzy się naprawdę.

Krok 24: zrób celową literówkę

Kliknij wykres Pythona, rozwiń edytor i w linii data=dataset, x="WartoscBrutto", usuń jedną literę, tak żeby było x="WartosBrutto". Kliknij Uruchom skrypt.

Wizualizacja Python w Power BI z komunikatem Nie można wyświetlić tego elementu wizualnego po literówce WartosBrutto w kodzie
W linii 15 jest WartosBrutto. Na płótnie zamiast wykresu ikona błędu i napis Nie można wyświetlić tego elementu wizualnego z łączem Zobacz szczegóły.

Krok 25: otwórz szczegóły błędu

Kliknij łącze Zobacz szczegóły w środku elementu, a w oknie, które się otworzy, przycisk Zobacz szczegóły. I tu czeka rozczarowanie: zamiast treści wyjątku Pythona dostajesz ServiceErrorToClientError, identyfikator działania i godzinę. Ani słowa o kolumnie WartosBrutto, ani numeru linii. Kliknij Zamknij i popraw literówkę z powrotem na WartoscBrutto.

Okno szczegółów błędu wizualizacji Python w Power BI z ServiceErrorToClientError, identyfikatorem działania i godziną
Całe szczegóły błędu: Podstawowy błąd ServiceErrorToClientError, identyfikator działania i godzina. Przydatne dla pomocy technicznej, nie dla Ciebie.

Wniosek praktyczny: diagnozę robisz poza Power BI, a poniższa tabela mówi, czego szukać. Komunikaty w pierwszej kolumnie zobaczysz w konsoli Pythona, w Power BI wszystkie wyglądają jak na zrzucie wyżej.

Komunikat w konsoli PythonaPrzyczyna i naprawa
ModuleNotFoundError: No module named 'seaborn'Biblioteki nie ma w interpreterze wskazanym w Opcjach. Uruchom pip install seaborn w tym Pythonie, który wskazujesz Power BI, albo popraw katalog w Opcjach.
ValueError: Could not interpret value `WartosBrutto` for `x`Kolumny nie ma w dataset: literówka albo pole nie trafiło do sekcji Wartości. Porównaj nazwę z preambułą.
Brak komunikatu, a wykresu nie maBrakuje plt.show() na końcu skryptu. Krok 26 pokazuje, jak to wygląda w Power BI.
ValueError: could not convert string to floatKolumna liczbowa przyszła jako tekst. Rzutuj: dataset["WartoscBrutto"] = pd.to_numeric(dataset["WartoscBrutto"]).
Wykres jest, ale liczby się nie zgadzająPola liczbowe mają agregację Suma zamiast Nie sumuj (krok 8) albo dane przekroczyły 150 000 wierszy.

Krok 26: sprawdź, co robi brak plt.show()

Na końcu kodu zamień plt.show() na # plt.show(), czyli zakomentuj tę linię, i kliknij Uruchom skrypt. Kod jest poprawny, matplotlib rysuje wykres w pamięci, ale Power BI zbiera go do obrazu dopiero na wywołanie plt.show(). Wizualizacja pokazuje ten sam komunikat co przy literówce. W R analogicznie: wykres ggplot(...) musi zostać wypisany, więc nie przypisuj go do zmiennej bez późniejszego print().

Wizualizacja Python w Power BI po zakomentowaniu linii plt.show z tym samym komunikatem Nie można wyświetlić tego elementu wizualnego
Linia 33: # plt.show(). Komunikat na płótnie jest identyczny jak przy literówce. Jeśli kod wygląda dobrze, sprawdź najpierw, czy w ogóle kazałeś cokolwiek pokazać.

Usuń znak # przed plt.show(), kliknij Uruchom skrypt, zwiń edytor i kliknij puste miejsce strony. Wykres wraca.

Wskazówka: zanim wkleisz kod do Power BI, uruchom go raz w zwykłym Pythonie (w notatniku Jupyter albo w konsoli) na kilku wierszach danych Nordvelli wczytanych do zmiennej dataset. Tam błąd pokaże pełny ślad wywołania (traceback) z numerem linii.

Ograniczenia w chmurze i dobre nawyki

Co chcemy osiągnąć. Raport Nordvelli trafi do usługi Power BI, a tam wizualizacje Python i R działają z ograniczeniami. Chcemy wiedzieć, czego się spodziewać po publikacji, i zapisać plik lekcji z kompletem wykresów.

Po publikacji w usłudze Power BI (piszemy o niej w dalszych rozdziałach) wizualizacje Python i R rysuje sama usługa, ale tylko z pakietami z listy obsługiwanych przez Microsoft i z limitem czasu wykonania. Zapytanie z krokiem skryptu w Power Query, jak nasze FaktSprzedaz, odświeży się w chmurze tylko przez bramę danych w trybie osobistym, na komputerze z zainstalowanym Pythonem i bibliotekami.

Krok 27: zapisz plik lekcji

Naciśnij Ctrl+S albo kliknij ikonę dyskietki w lewym górnym rogu. Plik nordvella_13_python_r.pbix ma teraz stronę Python i R z oboma wykresami i fragmentatorem oraz kolumny Sezon i CzyAnomalia w FaktSprzedaz.

Strona Python i R raportu Nordvelli w Power BI: wykres seaborn, wykres ggplot2 z liniami regresji i fragmentator Miasto
Stan końcowy lekcji: na górze wizualizacja Python, pod nią wizualizacja R, z prawej fragmentator Miasto. Tak wygląda plik efektu do pobrania.

Po ponownym otwarciu pliku (także pliku efektu z ramki na początku lekcji) Power BI zapyta o zgodę jeszcze raz, a zamiast wykresów pokaże napisy Wizualizacja języka Python nie są włączone i przyciski Wybierz, aby włączyć. Kliknij Włącz w oknie Włącz elementy wizualne skryptu i wykresy się narysują.

Okno Włącz elementy wizualne skryptu po ponownym otwarciu pliku nordvella_13_python_r.pbix z wizualizacjami Python i R
Ponowne otwarcie pliku: okno ma tym razem trzy przyciski, Włącz, Przegląd i Anuluj, a wizualizacje czekają na zgodę.
Cztery nawyki przy Pythonie i R w Power BI: wspólne środowisko, skrypt tylko do rysowania, agregacja przed wykresem, testy poza Power BI
Cztery zasady, które oszczędzają kłopotów zespołom pracującym na skryptach w Power BI.
ZasadaDlaczego
Jedna instalacja Pythona na cały zespółRaport z wykresem seaborn zadziała u kolegi tylko, gdy ma te same biblioteki. Ustalcie wspólne środowisko i wersje.
Skrypt na kanwie tylko do wizualizacji, nie do transformacjiDo przekształceń danych używaj Power Query albo DAX. Wykres skryptowy zostaw na to, czego natywne wizualizacje nie pokażą.
Agreguj przed wykresem108 675 punktów na wykresie punktowym zlewa się w plamę (krok 23). Zagreguj do miast lub kategorii, żeby wykres coś mówił i szybciej się rysował.
Testuj kod poza Power BIKonsola Pythona pokaże pełny błąd z numerem linii, Power BI tylko ogólny komunikat.

Pliki z tego rozdziału do pobrania

Gotowy efekt lekcji i cztery skrypty z ramek wyżej. Jeśli coś u Ciebie wygląda inaczej niż na zrzutach, porównaj swój plik z plikiem efektu.

nordvella_13_python_r.pbix - plik po lekcji: strona Python i R oraz kolumny Sezon i CzyAnomalia (krok 27)
13_seaborn_wizual.py - histogram i wykres pudełkowy seaborn (krok 9)
13_powerquery_sezon_anomalie.py - skrypt Power Query z kolumnami Sezon i CzyAnomalia (krok 14)
13_ggplot_korelacja.R - wykres ggplot2 z liniami regresji (krok 22)
13_ggplot_hex.R - wariant z kafelkami heksagonalnymi (krok 23)

Python i R to mocne uzupełnienie Power BI, ale ich rola jest wąska i celowa. W kolejnym rozdziale wracamy do serca narzędzia, czyli do języka DAX i funkcji CALCULATE, gdzie zdecydowana większość analiz Nordvelli powstaje bez ani jednej linii Pythona. Wykresy skryptowe traktuj jako specjalistyczne uzupełnienie strony analitycznej, a nie fundament raportu.

✕

Najczęściej zadawane pytania

Jak skonfigurować interpreter Pythona w Power BI Desktop?
Zainstaluj Pythona z bibliotekami pandas, matplotlib i seaborn, następnie w Power BI wejdź w Plik, Opcje i ustawienia, Opcje, pozycja Wykonywanie skryptów w języku Python, i w polu Wykryte katalogi główne języka Python wskaż katalog instalacji. Power BI wykryje instalację i pokaże jej ścieżkę.
Czy w Power BI można używać seaborn i ggplot na własnych danych?
Tak. Power BI przekazuje wybrane pola do skryptu jako ramkę danych o nazwie dataset. W Pythonie rysujesz na niej wykres seaborn, w R analogiczny wykres ggplot2, a Power BI renderuje obraz PNG bezpośrednio na stronie raportu.
Co oznacza komunikat Nie można wyświetlić tego elementu wizualnego przy wizualizacji Python w Power BI?
To ogólny błąd wykonania skryptu. Łącze Zobacz szczegóły pokazuje tylko ServiceErrorToClientError z identyfikatorem działania i godziną, więc przyczynę ustalasz, uruchamiając kod poza Power BI: najczęściej literówka w nazwie kolumny, brak wywołania plt.show() albo brak biblioteki w interpreterze wskazanym w Opcjach. Gdy wykres się rysuje, ale liczby się nie zgadzają, sprawdź, czy pola liczbowe w sekcji Wartości mają ustawione Nie sumuj.
Czy wizualizacje Python i R działają po publikacji w usłudze Power BI?
Tak, ale z ograniczeniami. Usługa rysuje je sama, tylko z pakietami z listy obsługiwanych przez Microsoft i z limitem czasu wykonania. Zapytanie z krokiem skryptu Pythona w Power Query odświeży się w chmurze tylko przez bramę danych w trybie osobistym, na komputerze z zainstalowanym Pythonem i bibliotekami.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...