Spracovanie transformácií
V situáciách, keď sa odpoveď zdroja údajov nezobrazuje vo formáte, ktorý môže Power BI využívať priamo, možno použiť Power Query na vykonanie série transformácií.
Statické transformácie
Vo väčšine prípadov sú údaje prezentované konzistentným spôsobom zdrojom údajov: názvy stĺpcov, typy údajov a hierarchická štruktúra sú pre daný koncový bod konzistentné. V takejto situácii je vhodné vždy použiť rovnakú množinu transformácií na získanie údajov vo formáte prijateľnom pre službu Power BI.
Príklad statickej transformácie nájdete v kurze TripPin 2 – Data Pripojenie or pre službu REST Service, keď sa zdroj údajov považuje za štandardnú službu REST:
let
Source = TripPin.Feed("https://services.odata.org/v4/TripPinService/Airlines"),
value = Source[value],
toTable = Table.FromList(value, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
expand = Table.ExpandRecordColumn(toTable, "Column1", {"AirlineCode", "Name"}, {"AirlineCode", "Name"})
in
expand
Transformácie v tomto príklade sú:
Source
je záznam vrátený z volania doTripPin.Feed(...)
funkcie .- Hodnotu načítate z jedného z
Source
párov kľúč-hodnota. Názov kľúča jevalue
, a výsledok uložíte do premennej s názvomvalue
. value
Je to zoznam, ktorý konvertujete na tabuľku. Každý prvok vvalue
tabuľke sa stane riadkom, ktorý môžete volaťtoTable
.- Každý prvok v
value
je sám o sebe Záznam.toTable
obsahuje všetky tieto položky v jednom stĺpci:"Column1"
. Tento krok vytiahne všetky údaje pomocou kľúča"AirlineCode"
do stĺpca s názvom"AirlineCode"
a všetky údaje s kľúčom"Name"
do stĺpca s názvom"Name"
, pre každý riadok vtoTable
."Column1"
hodnota sa nahradí týmito dvomi novými stĺpcami.
Na konci dňa, keď budete mať údaje v jednoduchom tabuľkovom formáte, ktorý služba Power BI dokáže používať a jednoducho vykresliť:
Je dôležité poznamenať, že postupnosť statických transformácií tejto špecifickosti sa vzťahuje len na jeden koncový bod. V príklade uvedenom vyššie bude táto postupnosť transformácií fungovať "AirlineCode"
iba vtedy a "Name"
bude existovať v odpovedi koncového bodu REST, pretože sú pevne zakódované do kódu jazyka M. Táto postupnosť transformácií preto nemusí fungovať, ak sa pokúsite zasiahnuť /Event
koncový bod.
Táto vysoká úroveň špecifickosti môže byť potrebná na presunutie údajov do navigačnej tabuľky. V prípade všeobecnejších funkcií prístupu k údajom sa však odporúča vykonať len transformácie, ktoré sú vhodné pre všetky koncové body.
Poznámka
Nezabudnite otestovať transformácie za rôznych okolností údajov. Ak používateľ nemá v koncovom /airlines
bode žiadne údaje, majú transformácie za následok prázdnu tabuľku so správnou schémou? Alebo sa počas hodnotenia vyskytne chyba? Pozrite si tému TripPin 7. časť: Rozšírená schéma s typmi jazyka M, kde nájdete diskusiu o testovaní zariadenia.
Dynamické transformácie
Niekedy je potrebná zložitejšia logika na konvertovanie odpovedí rozhrania API na stabilné a konzistentné formuláre vhodné pre dátové modely Power BI.
Nekonzistentné odpovede rozhrania API
Základný tok riadenia jazyka M (ak príkazy, kódy stavu HTTP, skúste... bloky zachytenia atď.) sú zvyčajne dostatočné na zvládnutie situácií, v ktorých existuje niekoľko spôsobov, akými rozhranie API reaguje.
Určenie schémy za behu
Niektoré rozhrania API sú navrhnuté tak, aby sa viaceré informácie museli skombinovať, aby sa získal správny formát tabuľky. Zvážte odpoveď koncového /sheets
bodu služby Smartsheet, ktorá obsahuje pole názvov stĺpcov a pole údajových riadkov. Pripojenie alebo Smartsheet je schopný analyzovať túto odpoveď týmto spôsobom:
raw = Web.Contents(...),
columns = raw[columns],
columnTitles = List.Transform(columns, each [title]),
columnTitlesWithRowNumber = List.InsertRange(columnTitles, 0, {"RowNumber"}),
RowAsList = (row) =>
let
listOfCells = row[cells],
cellValuesList = List.Transform(listOfCells, each if Record.HasFields(_, "value") then [value]
else null),
rowNumberFirst = List.InsertRange(cellValuesList, 0, {row[rowNumber]})
in
rowNumberFirst,
listOfRows = List.Transform(raw[rows], each RowAsList(_)),
result = Table.FromRows(listOfRows, columnTitlesWithRowNumber)
- Najprv sa vysporiadať s informáciami o hlavičke stĺpca. Záznam každého stĺpca môžete načítať
title
do zoznamu. Čaká saRowNumber
na pridanie stĺpca, o ktorému viete, že ho budete vždy zobrazovať ako prvý stĺpec. - Ďalej môžete definovať funkciu, ktorá vám umožní analyzovať riadok v zozname buniek
value
. Znova môžete na server odoslaťrowNumber
informácie. - Použite svoju
RowAsList()
funkciu na každú zrow
hodnôt vrátených v odpovedi rozhrania API. - Konvertujte zoznam na tabuľku s určením hlavičiek stĺpcov.
Pripomienky
https://aka.ms/ContentUserFeedback.
Pripravujeme: V priebehu roka 2024 postupne zrušíme službu Problémy v službe GitHub ako mechanizmus pripomienok týkajúcich sa obsahu a nahradíme ju novým systémom pripomienok. Ďalšie informácie nájdete na stránke:Odoslať a zobraziť pripomienky pre