Spracovanie transformácií

V situáciách, keď sa odpoveď zdroja údajov nezazentuje vo formáte, ktorý dokáže služba Power BI používať priamo, Power Query možno použiť na vykonanie série transformácií.

Statické transformácie

Vo väčšine prípadov sú údaje prezentované v zdroji údajov konzistentným spôsobom: 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í, aby sa údaje vo formáte, ktorý je prijateľné pre power BI.

Príklad statickej transformácie môžete nájsť v kurze TripPin Part 2 – Data Connector 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ú:

  1. Source Je záznam vrátený z volania TripPin.Feed(...) na .
  2. Vytiahnete hodnotu z jedného Source z párov kľúča a hodnoty. Názov kľúča je a výsledok value uložíte do premennej s názvom value .
  3. value je zoznam, ktorý konvertujete na tabuľku. Každý prvok v value sa stane riadkom v tabuľke, ktorý môžete volať toTable .
  4. Každý prvok v value sebe je Záznam. toTable Všetky sú uvedené v jednom stĺpci: "Column1" . Tento krok vytiahne všetky údaje s kľúčom do stĺpca s názvom a všetky údaje s kľúčom do "AirlineCode" stĺpca s názvom pre každý riadok v "AirlineCode" "Name" "Name" toTable . "Column1" budú nahradené týmito dvomi novými stĺpcami.

Na konci dňa, keď o vás zostalo údaje v jednoduchom tabuľkovom formáte, ktorý Power BI dokáže použiť a jednoducho vykresliť:

Údaje v tabuľkovej forme.

Je dôležité poznamenať, že postupnosť statických transformácií tejto špecifickosti sa vzťahuje iba na jeden koncový bod. V príklade uvedenom vyššie bude táto postupnosť transformácií fungovať iba vtedy a existovať v odpovedi koncového bodu REST, pretože sú pevné za "AirlineCode" "Name" kódované do kódu M. To znamená, že táto sekvencia transformácií nemusí fungovať, ak sa pokúsite o prístup ku koncovmu /Event bodu.

Táto vysoká úroveň špecifickosti môže byť potrebná pri prenose údajov do navigačnej tabuľky, ale pri všeobecných funkciách prístupu k údajom sa odporúča vykonať iba transformácie, ktoré sú vhodné pre všetky koncové body.

Poznámka

Transformácie testujte v rôznych podmienkach údajov. Ak používateľ nemá žiadne údaje v koncovom bode, má vaše transformácie za následok prázdnu /airlines tabuľku so správnou schémou? Alebo sa počas hodnotenia vyskytla chyba? Pozrite si časť TripPin 7: Rozšírená schéma s typmi M, na základe diskusie o testovaní jednotky.

Dynamické transformácie

Zložitejšia logika je niekedy potrebná na konverziu odpovedí rozhrania API na stabilné a konzistentné formuláre vhodné pre dátové modely služby Power BI.

Nekonzistentné odpovede rozhrania API

Základný postup riadenia jazyka M (ak príkazy, kódy stavu protokolu HTTP, vyskúšajte... bloky chytať atď.) sú zvyčajne dostatočné na spracovanie situácií, kde existuje niekoľko spôsobov, na ktoré rozhranie API reaguje.

Určovanie schémy za minútu

Niektoré rozhrania API sú navrhnuté tak, aby sa skombinovali viaceré časti informácií, aby sa získal správny tabuľkový formát. Zvážte odpoveď koncového bodu služby Smartsheet /sheets [], ktorá obsahuje pole názvov stĺpcov a pole údajových riadkov. Konektor Smartsheet dokáže analyzovať túto odpoveď nasledujúcim 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)
  1. Prvé riešenie s informáciami o hlavičke stĺpca. Záznam každého stĺpca môžete nahrať do zoznamu. So stĺpcom, o ktorý viete, bude vždy uvedené ako title RowNumber tento prvý stĺpec.
  2. Ďalej môžete definovať funkciu, ktorá umožňuje analyzovať riadok do zoznamu value buniek. Znova môžete vytvoriť predotvorené rowNumber informácie.
  3. Použite funkciu RowAsList() na každé z row vrátených funkcií v odpovedi rozhrania API.
  4. Konvertujte zoznam na tabuľku, zadajte hlavičky stĺpcov.