TripPin časť 8 – Pridanie diagnostiky

Tento kurz s viacerými časťmi sa zaoberá vytvorením nového rozšírenia zdroja údajov pre Power Query. Kurz má byť vykonaný postupne pri každej lekcii vytvorenej v rámci konektora vytvoreného v predchádzajúcich lekciách a prírastkovo pridávať nové možnosti — do konektora.

V tejto lekcii:

  • Ďalšie informácie o funkcii Diagnostics.Trace
  • Pomocou pomocných funkcií diagnostiky môžete pridať informácie o stope, ktoré vám pomôžu s ladením konektora

Povolenie diagnostiky

Power Query používatelia môžu povoliť zapisovanie do denníka sledovania začiarknutím políčka v časti Možnosti | Diagnostika.

Zapnite sledovanie v Power Query.

Ak je táto možnosť povolená, všetky následné dotazy spôsobia, že nástroj M vynechá informácie o sledovaniach v súboroch denníkov umiestnených v pevnom adresári používateľa.

Pri spustení dotazov M v rámci súpravy Power Query SDK je sledovanie povolené na úrovni projektu. Na stránke vlastností projektu sú k dispozícii tri nastavenia týkajúce sa sledovania:

  • Vymazať denník — Keď je toto nastavenie nastavené true na , pri spustení dotazov sa denník obnoví alebo vymaže. Odporúča sa, aby ste toto nastavenie nastavili true na .
  • Zobraziť sledovania nástroja — Toto nastavenie ovláda výstup vstavaných trasovaní z nástroja M. Tieto sledovania sú vo všeobecnosti užitočné len pre členov tímu Power Query, takže ich zvyčajne budete chcieť nastaviť na false .
  • Zobraziť sledovania používateľa — toto nastavenie ovláda výstup informácií o trasovaní pomocou konektora. Toto nastavenie je potrebné nastaviť na true .

Project vlastnosti.

Po povolených nastaveniach sa položky denníka začnú zobraziť v okne Výstup dotazu M na karte Denník.

Diagnostics.Trace

Funkcia Diagnostics.Trace sa používa na zapisovanie správ do denníka sledovania nástroja M.

Diagnostics.Trace = (traceLevel as number, message as text, value as any, optional delayed as nullable logical as any) => ...

Dôležité

M je funkčný jazyk s lenivým vyhodnotením. Pri použití majte na pamäti, že funkcia sa vyvolá len vtedy, ak sa v skutočnosti Diagnostics.Trace vyhodnotí výraz, ktorý je súčasťou . Príklady nájdete ďalej v tomto kurze.

Parameter traceLevel môže mať jednu z nasledujúcich hodnôt (v zostupnom poradí):

  • TraceLevel.Critical
  • TraceLevel.Error
  • TraceLevel.Warning
  • TraceLevel.Information
  • TraceLevel.Verbose

Keď je sledovanie povolené, používateľ môže vybrať maximálnu úroveň správ, ktoré by si chceli zobraziť. Všetky hlásenia o sledovaniach tejto úrovne a pod budú výstupom do denníka. Ak používateľ napríklad vyberie úroveň upozornenia, v denníkoch sa zobrazia hlásenia sledovania , TraceLevel.Warning TraceLevel.Error a TraceLevel.Critical .

Parameter message je skutočný text, ktorý bude výstupom do súboru sledovania. Všimnite si, že text nebude obsahovať value parameter, ak ho výslovne nezahrnete do textu.

Parameter value je to, čo funkcia vráti. Keď je delayed parameter nastavený na hodnotu , bude funkciou true value parametra nula, ktorá vráti skutočnú hodnotu, ktorú vyhodnocujete. Keď delayed je nastavená false hodnota , bude value skutočnou hodnotou. Príklad, ako to funguje, nájdete nižšie.

Použitie funkcie Diagnostics.Trace v konektore TripPin

V praktickom príklade použitia funkcie Diagnostics.Trace a vplyvu parametra aktualizujte funkciu konektora TripPin tak, aby sa delayed GetSchemaForEntity zalomila error výnimka:

GetSchemaForEntity = (entity as text) as type =>
    try
        SchemaTable{[Entity=entity]}[Type]
    otherwise
        let
            message = Text.Format("Couldn't find entity: '#{0}'", {entity})
        in
            Diagnostics.Trace(TraceLevel.Error, message, () => error message, true);

Chybu môžete vynútiť počas vyhodnocovania (na testovacie účely!) odovzdím neplatného názvu entity do GetEntity funkcie. Tu zmeníte riadok withData vo TripPinNavTable funkcii, nahradením [Name] za "DoesNotExist" .

TripPinNavTable = (url as text) as table =>
    let
        // Use our schema table as the source of top level items in the navigation tree
        entities = Table.SelectColumns(SchemaTable, {"Entity"}),
        rename = Table.RenameColumns(entities, {{"Entity", "Name"}}),
        // Add Data as a calculated column
        withData = Table.AddColumn(rename, "Data", each GetEntity(url, "DoesNotExist"), type table),
        // Add ItemKind and ItemName as fixed text values
        withItemKind = Table.AddColumn(withData, "ItemKind", each "Table", type text),
        withItemName = Table.AddColumn(withItemKind, "ItemName", each "Table", type text),
        // Indicate that the node should not be expandable
        withIsLeaf = Table.AddColumn(withItemName, "IsLeaf", each true, type logical),
        // Generate the nav table
        navTable = Table.ToNavigationTable(withIsLeaf, {"Name"}, "Name", "Data", "ItemKind", "ItemName", "IsLeaf")
    in
        navTable;

Zapnite sledovanie pre projekt a spustite testovacie dotazy. Na karte Errors by sa mal zobraziť text chyby, ktorá sa vyskytla:

Chybové hlásenie.

Rovnaké hlásenie Log by sa malo zobraziť aj na karte. Všimnite si, že ak použijete pre parametre message a value rôzne hodnoty, budú sa líšiť.

Denník chýb.

Upozorňujeme Action tiež, že pole správy denníka obsahuje názov (typ zdroja údajov) vášho rozšírenia (v tomto prípade Engine/Extension/TripPin ). Vďaka tomu bude jednoduchšie vyhľadať správy súvisiace s vaším rozšírením, ak je povolené sledovanie viacerých dotazov alebo systémových (mashup engine).

Oneskorené vyhodnotenie

Ako príklad toho, ako delayed parameter funguje, vykonáte určité úpravy a dotazy znova spustíte.

Najprv nastavte hodnotu delayed na , ale parameter false value ponechajte tak, ako je:

Diagnostics.Trace(TraceLevel.Error, message, () => error message, false);

Pri spustení dotazu sa zobrazí chyba "Nie je možné konvertovať hodnotu typu Funkcia na typ" a nie skutočnú chybu, ktorú ste vyvolali. Je to preto, že volanie teraz function vracia hodnotu namiesto samotnej hodnoty.

Potom odstráňte funkciu z value parametra:

Diagnostics.Trace(TraceLevel.Error, message, error message, false);

Pri spustení dotazu sa zobrazí správna chyba, ale ak skontrolujete kartu Denník, nebudú sa vám žiadne hlásenia. Je to spôsobené error tým, že končí sa zvýšil/vyhodnotil počas volania , takže správa nie je nikdy Diagnostics.Trace výstup.

Teraz, keď rozumieť vplyvu parametra, nezabudnite pred pokračovaním resetovať konektor späť delayed do pracovného stavu.

Diagnostické pomocné funkcie v časti Diagnostics.pqm

Súbor Diagnostics.pqm zahrnutý v tomto projekte obsahuje niekoľko pomocných funkcií, ktoré zjednodušia sledovanie. Ako bolo znázornenév predchádzajúcom kurze , tento súbor môžete zahrnúť do projektu (nezabudnite nastaviť akciu kompilovania na kompilovanie ) a potom ho načítať do súboru konektora. Spodná časť súboru konektora by teraz mala vyzerať podobne ako výstrižok kódu uvedený nižšie. Neváhajte a preskúmajte rôzne funkcie, ktoré poskytuje tento modul, v tejto ukážke však budete používať len Diagnostics.LogValue funkcie a Diagnostics.LogFailure .

// Diagnostics module contains multiple functions. We can take the ones we need.
Diagnostics = Extension.LoadFunction("Diagnostics.pqm");
Diagnostics.LogValue = Diagnostics[LogValue];
Diagnostics.LogFailure = Diagnostics[LogFailure];

Diagnostics.LogValue

Funkcia Diagnostics.LogValue je v mnohom ako , a možno ju Diagnostics.Trace použiť na výstup hodnoty toho, čo vyhodnocujete.

Diagnostics.LogValue = (prefix as text, value as any) as any => ...

Parameter prefix je predotvorený do správy denníka. Pomocou tohto by ste zistili, ktorý výstup volania správy volá. Parameter je to, čo funkcia vráti, a bude tiež zapísaná do sledovania value ako textové vyjadrenie hodnoty M. Ak sa napríklad rovná value stĺpcom A a table B, denník bude obsahovať ekvivalentné #table vyjadrenie: #table({"A", "B"}, {{"row1 A", "row1 B"}, {"row2 A", row2 B"}})

Poznámka

Serializácia hodnôt M na text môže byť nákladná operácia. Uvedomte si potenciálnu veľkosť hodnôt, ktoré výstupom vystupuje do sledovania.

Poznámka

Väčšina Power Query prostredia skráťte správy sledovania na maximálnu dĺžku.

Ako príklad môžete funkciu aktualizovať tak, aby sledovať TripPin.Feed argumenty url a schema odovzdané do funkcie.

TripPin.Feed = (url as text, optional schema as type) as table =>
    let
        _url = Diagnostics.LogValue("Accessing url", url),
        _schema = Diagnostics.LogValue("Schema type", schema),
        //result = GetAllPagesByNextLink(url, schema)
        result = GetAllPagesByNextLink(_url, _schema)
    in
        result;

Všimnite si, že musíte použiť nové _url hodnoty _schema a v volaniach pre GetAllPagesByNextLink . Ak ste použili pôvodné parametre funkcie, volania by sa nikdy nevyhodnocovali, čo by malo za následok, že do sledovania Diagnostics.LogValue sa nezapíšu žiadne správy. Funkčné programovanie je zábavné!

Pri spustení dotazov by sa teraz mali v denníku zobraziť nové správy.

Pristupovanie k URL adrese:  Pristupuje sa k správe URL adresy.

Typ schémy:  Správa o type schémy.

Všimnite si, že sa namiesto toho, čo by ste chceli dosiahnuť, zobrazí serializovaná verzia parametra , a nie to, čo by ste v prípade hodnoty typu chceli schema type urobiť Text.FromValue (typ).

Diagnostics.LogFailure (Diagnostika.LogFailure)

Funkciu možno použiť na zalomenie volaní funkcie a do sledovania sa zapíše len v prípade, že volanie funkcie zlyhá Diagnostics.LogFailure (to znamená, že vráti hodnotu error ).

Diagnostics.LogFailure = (text as text, function as function) as any => ...

Interne Diagnostics.LogFailure pridá try k volaniam function operátor. Ak volanie zlyhá, text hodnota sa zapíše do sledovania pred vrátením pôvodnej hodnoty error . Ak je function volanie úspešné, vráti sa výsledok bez písania nič do sledovania. Keďže chyby V M neobsahujú úplné sledovanie zásobníka (t. j. zvyčajne sa zobrazí iba hlásenie o chybe), môže to byť užitočné, ak chcete určiť, kde bola chyba skutočne zvýšená.

Ako (slabý) príklad upravte riadok funkcie tak, withData TripPinNavTable aby sa opäť vynútila chyba:

withData = Table.AddColumn(rename, "Data", each Diagnostics.LogFailure("Error in GetEntity", () => GetEntity(url, "DoesNotExist")), type table),

V sledovania môžete nájsť výsledné chybové hlásenie, ktoré obsahuje vaše text , a pôvodné informácie o chybe.

Správa LogFailure (Odhlásiť sa).

Skôr než budete pokračovať s ďalším kurzom, nezabudnite funkciu resetovať na pracovný stav.

Záver

Táto krátka lekcia (ale dôležitá!) vám ukázali, ako využiť diagnostické pomocné funkcie na prihlásenie do Power Query súborov sledovania. Pri správnom použití sú tieto funkcie mimoriadne užitočné pri ladení problémov v rámci konektora.

Poznámka

Ako vývojár konektora zodpovedáte za to, že v rámci diagnostického zapisovania do denníka nezadáte citlivé alebo osobné identifikovateľné informácie (PII). Musíte byť tiež opatrní, aby ste nevy outputli príliš veľa informácií o trasení, pretože to môže mať negatívny vplyv na výkon.

Ďalšie kroky

TripPin Part 9 - TestConnection