Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Power BI
Usługa Power BI nie odświeża: zestaw danych zawiera dynamiczne źródło danych
Na ten problem trafiasz po opublikowaniu raportu, który pobiera dane z API. W Power BI Desktop wszystko działa, a w usłudze odświeżanie (ang. refresh) modelu nie rusza, bo Power BI widzi w nim dynamiczne źródło danych (ang. dynamic data source). Pokazujemy, jak znaleźć takie zapytanie jeszcze przed publikacją, jak przepisać wywołanie Web.Contents, żeby usługa mogła je odświeżać, i na co uważać przy parametrach w adresie.
Zapytanie w Power BI Desktop zwraca dane, a po publikacji model w usłudze Power BI nie daje się odświeżyć. Microsoft opisuje to wprost: w większości przypadków modeli semantycznych z dynamicznymi źródłami danych nie da się odświeżać w usłudze Power BI.
Sprawdzisz to jeszcze w Power BI Desktop. W edytorze Power Query kliknij Ustawienia źródła danych na karcie Narzędzia główne i zostań w widoku Źródła danych w bieżącym pliku. Jeśli w tym oknie widać ostrzeżenie „Niektóre źródła danych mogą nie być wyświetlane na liście z powodu ręcznie utworzonych zapytań.” (ang. „Some data sources may not be listed because of hand-authored queries.”), plik zawiera dynamiczne źródło, którego usługa nie odświeży. Typowe miejsce to krok w rodzaju:
= Json.Document(Web.Contents(
"https://api.nbp.pl/api/exchangerates/rates/A/" & Waluta & "/?format=json"))
Dynamiczne źródło danych to według Microsoftu takie, dla którego części informacji potrzebnych do połączenia nie da się ustalić, zanim Power Query wykona zapytanie, bo powstają w kodzie albo pochodzą z innego źródła. Dokumentacja podaje trzy przykłady: nazwę serwera i bazy SQL Server, ścieżkę pliku CSV i adres usługi sieci Web. W kroku powyżej pełny adres powstaje dopiero po doklejeniu wartości Waluta, więc przed wykonaniem zapytania nie wiadomo, z jakim adresem trzeba się połączyć.
Dokumentacja wymienia wyjątki, które usługa odświeża: Web.Contents z opcjami RelativePath i Query oraz zapytania odwołujące się do parametrów Power Query. Opis funkcji w Power Query pokazuje to na przykładzie ze stałym adresem https://www.bing.com i dodaje, że te opcje „służą do dynamicznej kwerendy statycznego podstawowego adresu URL”. RelativePath dopisuje tekst „do podstawowego adresu URL przed wysłaniem żądania”, a Query pozwala dodawać parametry zapytania do adresu „bez konieczności zajmowania się sekwencjami ucieczki”. Stały adres bazowy jest znany przed wykonaniem zapytania, a zmienne części dochodzą dopiero przy wysyłaniu żądania.
Web.Contents, w którego pierwszym argumencie adres jest sklejany operatorem & z parametru, kolumny albo wyniku innego zapytania.RelativePath, a parametry spod znaku zapytania do rekordu Query. Krok z objawów przyjmie postać = Json.Document(Web.Contents("https://api.nbp.pl/api/", [RelativePath = "exchangerates/rates/A/" & Waluta, Query = [format = "json"]])).Query kończy się błędem Expression.Error: „Nie możemy przekonwertować wartości 2 na typ Text.” (ang. „We cannot convert the value 2 to type Text.”). Zamień ją funkcją Text.From, tak jak w lekcji o źródłach danych: Query = [page = Text.From(nr)].RelativePath. W naszym teście w Excelu taka funkcja wywołana dla EUR i USD w jednym zapytaniu zatrzymała się na komunikacie „Aby połączyć dane, potrzebne są informacje. Określ poziom prywatności dla każdego źródła danych.” (ang. „Information is needed in order to combine data. Please specify a privacy level for each data source.”). Nadaj wtedy źródłu api.nbp.pl poziom Publiczne przyciskiem Edytuj uprawnienia w oknie Ustawienia źródła danych.W Power BI Desktop otwórz ponownie Ustawienia źródła danych w widoku Źródła danych w bieżącym pliku i sprawdź, czy ostrzeżenie o ręcznie utworzonych zapytaniach zniknęło, a adres API jest na liście źródeł. W usłudze zajrzyj do historii odświeżania modelu (ang. Refresh history): odświeżenie na żądanie ma się zakończyć powodzeniem.
Przepisanie nie zmienia wyniku. W Excelu wariant z adresem sklejonym i wariant z RelativePath zwróciły dla waluty EUR ten sam rekord z kodem EUR, a Uri.BuildQueryString([format = "json", page = "2"]) pokazuje, jaki ciąg zapytania zbuduje rekord Query: format=json&page=2. Żeby problem nie wrócił, w każdym nowym zapytaniu do API zapisuj stały adres bazowy w pierwszym argumencie, a zmienne w RelativePath i Query, i przed każdą publikacją zaglądaj do okna Ustawienia źródła danych.

Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query
Szkolenie Power BI - Desktop, DAX i Online --> Pięć dni od pierwszego raportu do publikacji w usłudze Power BI: Power Query, model danych z wielu tabel, DAX, wizualizacje i Copilot. To szkolenie ma terminy gwarantowane.
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...