Robert – wierny czytelnik blogów ExcelBI.pl i 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:
- Funkcja Excelowa POŁĄCZ.TEKSTY, którą z postaci komórki później można zamienić na parametr PQ.
- 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:
- W zapytaniu do bazy danych SQL wklejam najpierw kroki z zapytania z listą, pamiętając o przecinku na końcu linijki.
- Dopisuję warunek filtrujący SQL, uzupełniając go o nawiasy i cudzysłowy wymagane przez Power Query.
WHERE MojaKolumna IN (MojaLista)
- 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.
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.