Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power BI - Pobieranie danych i źródła w Power BI Desktop
Jak przenieść raport Power BI z Excela na bazę SQL Server bez budowania od nowa
Arkusz Excela przestał wystarczać, te same dane leżą już w bazie SQL Server, a raport Power BI dalej czyta stary skoroszyt. Sama zmiana źródła przyciskiem Zmień źródło tego nie załatwi, bo podmienia ścieżkę pliku albo adres serwera, ale nie zamienia skoroszytu na bazę. Pokazujemy na modelu Nordvelli z kursu, jak przenieść raport Power BI z Excela na SQL Server, zachowując miary, relacje i wszystkie strony raportu, i jak liczbami udowodnić, że nic się nie zgubiło.
Raport Nordvelli czyta arkusz C:\Kurs_PBI\Nordvella_dane.xlsx, a te same dziewięć tabel jest już w bazie Nordvella na SQL Server, odtworzonej z pliku Nordvella.bak.gz z lekcji 3. Okno Ustawienia źródła danych z przyciskiem Zmień źródło podmienia ścieżkę pliku albo adres serwera, ale nie zamienia skoroszytu na bazę. Nowe tabele dodane przez Pobierz dane to z kolei nowe tabele modelu: miary, relacje i wizualizacje dalej wskazują FaktSprzedaz z arkusza, a po usunięciu starej tabeli raport traci pola.
Każda tabela modelu to zapytanie Power Query o tej samej nazwie, a miary i wizualizacje odwołują się do nazw tabel i kolumn, nie do źródła. W zapytaniu z arkusza źródło opisują pierwsze kroki: Excel.Workbook czyta plik, nawigacja wybiera arkusz, a Table.PromoteHeaders podnosi pierwszy wiersz do nagłówków. Tabela w bazie ma już nagłówki i typy, więc te trzy kroki zastępują dwa: Sql.Database i wybór tabeli w schemacie dbo, tak jak w kodzie z lekcji 20. Dalsze kroki działają bez zmian, jeśli w bazie są kolumny o tych samych nazwach, z tą samą wielkością liter. Inaczej zapytanie kończy się błędem opisanym w poście o błędzie Nie można znaleźć kolumny w tabeli.
Zobacz też: Szkolenie Power BI - Desktop, DAX i Online + Copilot
FaktSprzedaz, 467 775 009,17 zł sprzedaży, 3600 wierszy FaktBudzet, 2714 wierszy FaktZwroty, 30 produktów, 15 sklepów, 1826 dni kalendarza i 200 pracowników. Rozkład na lata to 19 550, 21 747, 26 164, 29 545 i 11 669 wierszy w latach 2022-2026.EVALUATE
ROW(
"FaktSprzedaz", COUNTROWS(FaktSprzedaz),
"Sprzedaz", [Łączna sprzedaż],
"FaktBudzet", COUNTROWS(FaktBudzet),
"FaktZwroty", COUNTROWS(FaktZwroty),
"DimProdukty", COUNTROWS(DimProdukty),
"DimSklepy", COUNTROWS(DimSklepy),
"DimKalendarz", COUNTROWS(DimKalendarz),
"DimPracownicy", COUNTROWS(DimPracownicy)
)192.168.1.206,1433 i Nordvella. Zostaw tryb Importuj, bo raport z arkusza też jest importem. W oknie poświadczeń wybierz zakładkę Baza_danych i wpisz login oraz hasło. W oknie Nawigator sprawdź, czy są wszystkie tabele i czy nazwy kolumn zgadzają się z arkuszem, potem kliknij Anuluj.FaktSprzedaz i na karcie Widok kliknij Edytor zaawansowany. Zamień pierwsze kroki tak jak we wzorcu poniżej, napisanym na nazwach kroków z kodu M z lekcji 5, i dostosuj go do swoich nazw. W zapytaniu zbudowanym myszką pierwszy krok nazywa się Źródło. Krok NaglowkiPodwyzszone zostaje pod tą samą nazwą, ale zwraca tabelę z bazy, więc kolejne kroki nie wymagają poprawek. Edytor potwierdza poprawny kod tekstem „Nie wykryto błędów składniowych.”let
// przed: Zrodlo = Excel.Workbook(File.Contents("C:\Kurs_PBI\Nordvella_dane.xlsx"), null, true),
// FaktSprzedaz_Arkusz = Zrodlo{[Item="FaktSprzedaz", Kind="Sheet"]}[Data],
Zrodlo = Sql.Database("192.168.1.206,1433", "Nordvella"),
FaktSprzedaz_Tabela = Zrodlo{[Schema = "dbo", Item = "FaktSprzedaz"]}[Data],
// tabela z bazy ma już nagłówki, Table.PromoteHeaders usuwamy
NaglowkiPodwyzszone = FaktSprzedaz_Tabela,
TypyKolumn = Table.TransformColumnTypes(NaglowkiPodwyzszone, {
{"DataID", Int64.Type}, {"Ilosc", Int64.Type}, {"WartoscNetto", type number}})
in
TypyKolumnItem. Żeby adres serwera był w jednym miejscu, dodaj zapytanie BazaNordvella z jedną linią Sql.Database("192.168.1.206,1433", "Nordvella") i w pierwszym kroku każdego zapytania wpisz BazaNordvella zamiast wywołania Sql.Database. Późniejszą zmianę serwera albo bazy opisujemy w poście o zmianie serwera SQL Server w gotowym raporcie.DataID i ProduktID to liczby całkowite, kwoty liczby dziesiętne, a KanalSprzedazy tekst. Krok zmiany typu zostaw, bo pilnuje typów także wtedy, gdy baza ma inne.192.168.1.206,1433. Konfigurację opisujemy w lekcji o bramie danych i harmonogramie odświeżania.
Zamiana się udała, gdy zapytanie kontrolne z kroku 1 zwraca po zmianie te same liczby co przed nią. W kursie baza odtworzona z Nordvella.bak.gz miała w FaktSprzedaz 108 675 wierszy i 467 775 009,17 zł sprzedaży, tyle samo co arkusz. Sprawdź też, czy każda transakcja ma swój wymiar: COUNTROWS(VALUES(DimSklepy[SklepID])) ma się równać COUNTROWS(DimSklepy). Na Nordvelli obie dały 15, a dla produktów 30 i kalendarza 1826. Większa liczba w pierwszej funkcji oznacza pusty wiersz wymiaru, czyli klucze z bazy bez dopasowania.
Na koniec przejdź po stronach raportu i porównaj karty z kopią pliku. Kopię z arkuszem trzymaj do pierwszego udanego odświeżenia w usłudze, a w oknie Ustawienia źródła danych zaznacz plik Excela, którego raport już nie używa, i kliknij Wyczyść uprawnienia.
Zachowanie programu sprawdziliśmy w Power BI Desktop 2.157 (wydanie z sierpnia 2026 r.) z polskim interfejsem, a przykłady na modelu sieci Nordvella z bezpłatnego kursu Power BI. Microsoft wydaje nową wersję Power BI Desktop co miesiąc, więc nazwy przycisków i limity usługi mogą się zmieniać. Aktualne wartości podaje dokumentacja Microsoft Learn.
Wróć do listy: 131 najczęstszych pytań i problemów związanych z Power BI
Komentarze (0)
Brak komentarzy...