Blog JSystems - uwalniamy wiedzę!

Szukaj

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

W skrócie

  • Zmiana źródła z Excel na SQL Server w Power BI kusi, żeby dodać nowe tabele z bazy, ale wtedy miary, relacje i wizualizacje dalej wskazują stare tabele z arkusza.
  • Tabela modelu to zapytanie Power Query o tej samej nazwie. Gdy zachowasz nazwę zapytania i nazwy kolumn, a zmienisz tylko kroki, które czytają dane, model i raport zostają bez zmian.
  • W Edytorze zaawansowanym każdego zapytania zamień krok Źródło i nawigację na Sql.Database, usuń podwyższanie nagłówków, a przed zmianą i po niej porównaj liczby wierszy i sumy zapytaniem DAX.

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.

Jak to wygląda w praktyce

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.

Dlaczego tak się dzieje

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.

Co zrobić krok po kroku

  1. Zanim cokolwiek zmienisz, zapisz kopię pliku i liczby kontrolne. W widoku zapytań w języku DAX uruchom zapytanie poniżej. Na modelu Nordvelli z arkusza zwróciło 108 675 wierszy 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)
    )
  2. Sprawdź połączenie z bazą. Kliknij Pobierz dane, wybierz Baza danych programu SQL Server i wpisz Serwer oraz Baza danych, w kursie 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.
  3. Na karcie Narzędzia główne kliknij Przekształć dane, zaznacz zapytanie 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
        TypyKolumn
  4. Powtórz to w każdym zapytaniu, zmieniając tylko nazwę tabeli w Item. Ż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.
  5. Klikaj kolejne kroki każdego zapytania i sprawdź, czy żaden nie kończy się błędem. Porównaj typy kolumn z tymi sprzed zmiany: w Nordvelli 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.
  6. Kliknij Zamknij i zastosuj. Gdy Power BI zgłasza błąd szyfrowania połączenia, opisujemy go w poście o szyfrowanym połączeniu z SQL Server w Power Query. Po załadowaniu uruchom ponownie zapytanie z kroku 1 i porównaj każdą liczbę. Uruchom też kontrolę sierot z sekcji niżej.
  7. Przed publikacją pamiętaj, że baza w sieci firmy wymaga w usłudze bramy standardowej. Według lekcji 19 usługa dopasuje źródło do połączenia bramy tylko wtedy, gdy serwer i baza są zapisane tak samo jak w tym połączeniu, dlatego w zapytaniach używaj dokładnie tego zapisu, na przykład 192.168.1.206,1433. Konfigurację opisujemy w lekcji o bramie danych i harmonogramie odświeżania.
Okno Baza danych programu SQL Server w Power BI Desktop: serwer 192.168.1.206,1433, baza Nordvella, tryb łączności Importuj
Okno łącznika SQL Server z serwerem 192.168.1.206,1433, bazą Nordvella i trybem łączności Importuj. Serwer zapisany z portem po przecinku musi się zgadzać z połączeniem bramy danych.

Jak sprawdzić, że problem zniknął

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.

Źródła i sposób sprawdzenia

  • Microsoft Learn: SQL Server database connector (Power Query) (źródło)
  • Microsoft Learn: Sql.Database (Power Query M) (źródło)
  • Microsoft Learn: Table.PromoteHeaders (Power Query M) (źródło)
  • Kurs Power BI: lekcja 3 (łącznik SQL Server, Ustawienia źródła danych, baza Nordvella z tymi samymi tabelami), lekcja 5 (kod M z Excel.Workbook i Sql.Database), lekcja 19 (zapis serwera a brama, 108 675 wierszy i 467 775 009,17 zł w bazie)
  • Sprawdzone zapytaniami DAX na modelu Nordvelli: liczby wierszy wszystkich tabel, suma sprzedaży i budżetu, rozkład na lata, kontrola sierot.

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

Najczęściej zadawane pytania

Jak zmienić źródło danych z Excela na SQL Server w Power BI?
W edytorze Power Query otwórz Edytor zaawansowany każdego zapytania i zamień kroki, które czytają skoroszyt, na Sql.Database z adresem serwera i nazwą bazy oraz wybór tabeli w schemacie dbo. Krok podwyższania nagłówków usuń, bo tabela w bazie ma już nagłówki. Nazwy zapytań i kolumn zostaw bez zmian, wtedy miary, relacje i wizualizacje działają dalej.
Czy po zmianie źródła w Power BI trzeba budować raport od nowa?
Nie, jeśli zachowasz nazwy zapytań i nazwy kolumn. Miary i wizualizacje odwołują się do tabel i kolumn modelu, a nie do źródła. Raport trzeba przebudować dopiero wtedy, gdy zamiast podmiany kroków dodasz nowe tabele z bazy i usuniesz stare, bo miary i relacje starych tabel znikną razem z nimi.
Jak sprawdzić, czy po zmianie źródła Power BI ma te same dane?
Przed zmianą i po niej uruchom w widoku zapytań w języku DAX zapytanie z COUNTROWS dla każdej tabeli i sumą głównej miary. Na modelu Nordvelli punkty kontrolne to 108 675 wierszy sprzedaży i 467 775 009,17 zł. Porównaj też COUNTROWS(VALUES(DimSklepy[SklepID])) z COUNTROWS(DimSklepy) i tak samo dla innych wymiarów, żeby wychwycić klucze bez dopasowania.
Czy raport na SQL Server wymaga bramy danych w usłudze Power BI?
Tak, gdy SQL Server działa w sieci firmy, odświeżanie w usłudze wymaga bramy standardowej. Usługa dopasuje źródło do połączenia bramy tylko wtedy, gdy serwer i baza w zapytaniach są zapisane tak samo jak w połączeniu, na przykład adres z portem po przecinku.

Komentarze (0)

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

Brak komentarzy...