Blog JSystems - uwalniamy wiedzę!
Blog JSystems - uwalniamy wiedzę!
Power Query w Excelu, Power BI i Fabric
JSON z API: kolumny z listami i rekordami - jak je rozwinąć w Power Query
Jak rozwinąć listę rekordów z JSON w Power Query, to pytanie wraca przy każdym API i każdym eksporcie zapisanym jako JSON. Pokazujemy, co oznaczają napisy List i Record, w jakiej kolejności rozwijać kolumny i jak rozpoznać błąd, gdy zamiast JSON przyjdzie coś innego. Przykłady opieramy na API kursów walut NBP z kursu i na pliku zamówień internetowych Nordvelli z materiałów do ćwiczeń, a operacje na danych sprawdziliśmy w polskim Excelu.
Po połączeniu z adresem API albo z plikiem JSON podgląd nie pokazuje tabeli, tylko wartości List i Record. W API NBP odpowiedź to lista z jednym rekordem o polach table, no, effectiveDate i rates, a dopiero w polu rates siedzi lista kursów. W pliku zamówień każde zamówienie ma rekord klient (typ, miasto), rekord dostawa (metoda, koszt) i listę pozycje, w której każda pozycja to rekord z polami sku, ilosc i cena_netto.
Po drodze możesz trafić na kolumnę, w której po rozwinięciu nadal stoi List, na liczbę wierszy, która po rozwinięciu nagle rośnie, i na błąd przy próbie zamiany listy rekordów na tekst: Expression.Error: Nie możemy przekonwertować wartości typu Record na typ Text. (ang. We cannot convert a value of type Record to type Text.). Gdy serwer zamiast JSON zwróci stronę HTML, na przykład z informacją o braku dostępu, zobaczysz DataFormat.Error: W danych wejściowych JSON znaleźliśmy nieoczekiwany znak. (ang. We found an unexpected character in the JSON input.).
Funkcja Json.Document tłumaczy JSON na wartości języka M: obiekt w nawiasach klamrowych staje się rekordem, tablica w nawiasach kwadratowych listą. Liczby przychodzą jako liczby, a daty jako tekst, bo JSON nie ma osobnego typu daty: w naszym teście pole utworzono było tekstem, a koszt dostawy liczbą. Rekord to zestaw nazwanych pól, czyli kolumny jednego wiersza. Lista to ciąg wartości, czyli przyszłe wiersze.
Stąd trzy różne polecenia. Listę zamieniasz w tabelę jednokolumnową poleceniem Do tabeli (funkcja Table.FromList), w której każdy wiersz zawiera rekord. Kolumnę rekordów rozwijasz do kolumn (Table.ExpandRecordColumn). Kolumnę list rozwijasz do nowych wierszy (Table.ExpandListColumn), a ta funkcja według swojego opisu tworzy kopię wiersza dla każdej wartości z listy. Dlatego zamówienie z trzema pozycjami zajmuje po rozwinięciu trzy wiersze, a jego pozostałe dane powtarzają się w każdym z nich.
https://api.nbp.pl/api/exchangerates/tables/A?format=json, a dla pliku Z pliku, Z formatu JSON. Przy publicznym API zostaw w oknie poświadczeń dostęp Anonimowy.rates, w pliku zamówień lista w polu zamowienia. Każde kliknięcie dodaje krok nawigacji.klient i dostawa, rozwiń tak samo. Gdy w różnych rekordach powtarzają się te same nazwy pól, zostaw zaznaczony prefiks: kolumny dostaną nazwy w rodzaju klient.typ i klient.miasto.pozycje, rozwiń ikoną rozwijania i wybierz Rozwiń do nowych wierszy. Każda pozycja dostanie własny wiersz: w naszym teście trzy zamówienia dały sześć wierszy. Pozycje są rekordami, więc rozwiń kolumnę jeszcze raz, tym razem do kolumn sku, ilosc i cena_netto. Zamówienie z pustą listą albo bez listy zostaje jednym wierszem z wartością null.utworzono, przychodzą jako tekst i wymagają zmiany typu.
Porównaj liczbę wierszy z danymi źródłowymi. Po zamianie listy zamówień na tabelę liczba wierszy ma się równać liczbie zamówień, a po rozwinięciu pozycji do nowych wierszy liczbie wszystkich pozycji. Dodaj kolumnę niestandardową z iloczynem ilości i ceny netto, zsumuj ją i porównaj z wartością w systemie źródłowym: w naszym teście trzy zamówienia dały 20566,97. Sprawdź też, czy w żadnej kolumnie nie zostały napisy List ani Record.
Pamiętaj, że po rozwinięciu pozycji koszt dostawy powtarza się w każdym wierszu zamówienia, więc suma tej kolumny po rozwinięciu policzy go wielokrotnie. Koszty na poziomie zamówienia sumuj przed rozwinięciem albo w osobnym zapytaniu. Gdy odświeżenie zgłasza nieoczekiwany znak w danych JSON, otwórz adres w przeglądarce i sprawdź, co zwraca serwer.
Wróć do listy: 88 najczęstszych pytań i problemów związanych z Power Query
Szkolenie Microsoft Excel - Power Query --> Dwa dni warsztatów z Excela: pobieranie danych z plików, folderów, SharePointa i baz SQL, ich czyszczenie i łączenie w Power Query, praca w języku M, a na koniec model danych i oparta na nim tabela przestawna. Prowadzi Sebastian Stasiak.
To szkolenie może być dofinansowane dla Ciebie z KFS lub BUR.
★★★★★Średnia ocena naszych szkoleń w Google: 5/5
Komentarze (0)
Brak komentarzy...