Jak pobrać z bazy danych SQL listę wartości stworzoną w Excelu, używając Power Query?

Robert – wierny czytelnik blogów skuteczneraporty.pl/SkuteczneRaporty.pl – zerknął na artykuł nt. pobierania danych z bazy danych SQL z parametrami pobieranymi z komórek i przesłał następujące pytanie: Czy można do Power Query z tabeli Excel wgrać listę wartości, która zasili zapytanie SQL? I nie chodziło o pobranie całej tabeli z SQL i założenie filtrów poprzez np. scalanie i połączenie obu tabel, a wysłanie zapytanie do bazy danych tylko o konkretne rekordy. Odpowiedź brzmi: TAK.

Krok 1: Przygotuj listę wartości w Excelu

W moim przypadku listę wartości stanowi tabela Excela z 20 identyfikatorami klientów.

Krok 2: Złącz wartości w 1 tekst i utwórz parametr

Jest na to kilka sposobów:

  1. Funkcja Excelowa POŁĄCZ.TEKSTY, którą z postaci komórki później można zamienić na parametr PQ.
  2. Trik w Power Query

Ja w tym celu wykorzystałem konwersję na listę, którą realizuje się poprzez odwołanie do (1) konkretnej kolumny z konkretnego kroku. Listę umieszczam w środku (2) funkcji języka M Text.Combine z separatorem w postaci przecinka, dzięki czemu na koniec otrzymuję parametr tekstowy.

Krok 3: Stwórz zapytanie do bazy danych SQL

W moim przypadku był to prosty SELECT z tabeli z klientami.

Krok 4: Wklej zapytanie z listą do środka zapytania SQL i podłącz

Ten krok jest najtrudniejszy technicznie, gdyż wymaga połączenia obu zapytań w jedno. Wynika to z zapory bezpieczeństwa danych Power Query, która nie pozwala odwoływać się do kroków między zapytaniami z Excelem i bazą danych SQL, generując błąd Formula.Firewall.

Dlatego:

  1. W zapytaniu do bazy danych SQL wklejam najpierw kroki z zapytania z listą, pamiętając o przecinku na końcu linijki.
  2. Dopisuję warunek filtrujący SQL, uzupełniając go o nawiasy i cudzysłowy wymagane przez Power Query.

WHERE MojaKolumna IN (MojaLista)

  1. Poprawiam nazwę kroku Źródło na Źródło2, żeby nazwy kroków się nie duplikowały.

W ten sposób na koniec otrzymałem z bazy danych SQL krótką listę klientów, których źródłem była Excelowa tabela.

Podziękowania

Specjalne podziękowanie w tym artykule kieruję do Roberta i jego zespołu. Zachęcam też Ciebie, drogi Czytelniku, do podsyłania wyzwań w narzędziach Power Query, Power Pivot i Power BI, które być może staną się zaczynem do kolejnego artykułu na blogu.

Plik Excel do pobrania z zapytaniem Power Query

Tu możesz pobrać plik Excel i przetestować rozwiązanie na swojej bazie danych SQL.

Udostępnij ten wpis:

Brak komentarzy

  1. A co jeżeli chcę przekazać jako parametr z arkusza do zapytania sql np rok bo sposób z artykułu nie działa

    let
    //
    Warunek = Excel.CurrentWorkbook(){[Name=”Tabela1″]}[Content],
    Warunek1= Warunek{0}[Rok],
    Źródło = Odbc.Query(*** WHERE YEAR ([Date]) = 2023#(lf)
    in
    Źródło

    • Hej Mariusz, jeśli piszesz zapytanie SQL to w argumencie YEAR nie ma nawiasów kwadratowych – będzie YEAR(Date). A zamiast 2023 podepnij swój parametr.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *