Sdílet prostřednictvím


TripPin část 8 – Přidání diagnostiky

Poznámka:

Tento obsah aktuálně odkazuje na obsah ze starší implementace diagnostiky v sadě Visual Studio. Obsah se bude v blízké budoucnosti aktualizovat tak, aby zahrnoval novou sadu Power Query SDK v editoru Visual Studio Code.

Tento vícedílný kurz popisuje vytvoření nového rozšíření zdroje dat pro Power Query. Tento kurz se má provést postupně – každá lekce vychází z konektoru vytvořeného v předchozích lekcích a postupně přidává do konektoru nové funkce.

V této lekci:

  • Další informace o funkci Diagnostics.Trace
  • Použití pomocných funkcí diagnostiky k přidání informací o trasování, které vám pomůžou ladit váš konektor

Povolení diagnostiky

Uživatelé Power Query mohou povolit protokolování trasování zaškrtnutím políčka v části Možnosti | Diagnostika.

Povolení trasování v Power Query

Po povolení všechny následné dotazy způsobí, že modul M vygeneruje trasovací informace do souborů protokolu umístěných v pevném uživatelském adresáři.

Při spouštění dotazů M ze sady Power Query SDK je trasování povolené na úrovni projektu. Na stránce vlastností projektu existují tři nastavení související s trasováním:

  • Vymazat protokol – když je tato možnost nastavená true, protokol se při spouštění dotazů resetuje nebo vymaže. Doporučujeme ponechat tuto možnost nastavenou na truehodnotu .
  • Zobrazit trasování modulu – toto nastavení řídí výstup integrovaných trasování z modulu M. Tyto trasování jsou užitečné jenom pro členy týmu Power Query, takže obvykle budete chtít tuto sadu falseponechat .
  • Zobrazit trasování uživatelů – toto nastavení řídí výstup informací o trasování konektorem. Toto nastavení budete chtít nastavit na truehodnotu .

Vlastnosti projektu

Po povolení se v okně Výstup dotazu M na kartě Protokol začnou zobrazovat položky protokolu.

Diagnostics.Trace

Funkce Diagnostics.Trace slouží k zápisu zpráv do protokolu trasování modulu 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 opožděným vyhodnocením. Při použití Diagnostics.Tracemějte na paměti, že funkce bude volána pouze v případě, že výraz, který je součástí, je skutečně vyhodnocen. Příklady najdete dále v tomto kurzu.

Parametr traceLevel může být jedna z následujících hodnot (v sestupném pořadí):

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

Když je trasování povolené, uživatel může vybrat maximální úroveň zpráv, které by chtěli zobrazit. Všechny zprávy trasování této úrovně a pod budou výstupem protokolu. Pokud například uživatel vybere úroveň Upozornění, zprávy TraceLevel.WarningTraceLevel.Errortrasování , a TraceLevel.Critical zobrazí se v protokolech.

Parametr message je skutečný text, který bude výstupem do trasovacího souboru. Text nebude obsahovat value parametr, pokud ho explicitně nezahrnete do textu.

Parametr value je to, co funkce vrátí. delayed Pokud je parametr nastaven na true, value bude nulová funkce parametru, která vrátí skutečnou hodnotu, kterou vyhodnocujete. Pokud delayed je nastavená hodnota false, value bude skutečná hodnota. Příklad toho, jak to funguje, najdete níže.

Pomocí diagnostiky. Trasování v konektoru TripPin

V praktickém příkladu použití Diagnostics.Trace a dopadu delayed parametru aktualizujte funkci konektoru GetSchemaForEntity TripPin tak, aby zabalil error výjimku:

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 vynutit při vyhodnocování (pro účely testu!) předáním neplatného názvu entity do GetEntity funkce. Tady změníte withData řádek ve TripPinNavTable funkci a nahradíte [Name] ho ."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;

Povolte trasování projektu a spusťte testovací dotazy. Errors Na kartě by se měl zobrazit text chyby, kterou jste vyvolali:

Chybová zpráva.

Na Log kartě by se také měla zobrazit stejná zpráva. Pokud pro parametry message value použijete jiné hodnoty, budou se lišit.

Protokol chyb.

Všimněte si také, že Action pole zprávy protokolu obsahuje název (druh zdroje dat) vašeho rozšíření (v tomto případě Engine/Extension/TripPin). To usnadňuje vyhledání zpráv souvisejících s vaším rozšířením, když je povolené více dotazů nebo trasování systému (mashupového modulu).

Zpožděné vyhodnocení

Jako příklad fungování parametru delayed provedete určité úpravy a znovu spustíte dotazy.

Nejprve nastavte delayed hodnotu na false, ale ponechte value parametr tak, jak je:

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

Když spustíte dotaz, zobrazí se chyba" Nemůžeme převést hodnotu typu Funkce na typ, a ne skutečnou chybu, kterou jste vyvolali. Důvodem je to, že volání nyní vrací function hodnotu, nikoli samotnou hodnotu.

Dále odeberte funkci z parametru value :

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

Při spuštění dotazu se zobrazí správná chyba, ale pokud zkontrolujete kartu Protokol , nebudou k dispozici žádné zprávy. Důvodem je to, že error se nakonec vyvolá nebo vyhodnotí během volání Diagnostics.Trace, takže zpráva není ve skutečnosti výstupem.

Teď, když rozumíte dopadu parametru delayed , nezapomeňte před pokračováním resetovat konektor zpět do funkčního stavu.

Diagnostické pomocné funkce v Diagnostics.pqm

Soubor Diagnostics.pqm zahrnutý v tomto projektu obsahuje mnoho pomocných funkcí, které usnadňují trasování. Jak je znázorněno v předchozím kurzu, můžete tento soubor zahrnout do projektu (nezapomeňte nastavit akci sestavení na kompilaci) a pak ho načíst do souboru konektoru. Dolní část souboru konektoru by teď měla vypadat přibližně jako fragment kódu níže. Nebojte se prozkoumat různé funkce, které tento modul poskytuje, ale v této ukázce budete používat Diagnostics.LogValue pouze funkce a Diagnostics.LogFailure funkce.

// 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

Funkce Diagnostics.LogValue je hodně podobná Diagnostics.Tracea dá se použít k výstupu hodnoty, kterou vyhodnocujete.

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

Parametr prefix je před zprávou protokolu. To byste použili k zjištění výstupu volání zprávy. Parametr value je to, co funkce vrátí, a zapíše se také do trasování jako textové vyjádření hodnoty M. Pokud value se například rovná table sloupci A a B, bude protokol obsahovat ekvivalentní #table reprezentaci: #table({"A", "B"}, {{"row1 A", "row1 B"}, {"row2 A", row2 B"}})

Poznámka:

Serializace hodnot M na text může být náročná operace. Mějte na paměti potenciální velikost hodnot, které do trasování vypíšete.

Poznámka:

Většina prostředí Power Query zkrátí trasovací zprávy na maximální délku.

Například aktualizujete TripPin.Feed funkci tak, aby trasování url argumentů a schema argumentů předaných do funkce.

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;

Musíte použít nové _url a _schema hodnoty ve volání GetAllPagesByNextLink. Pokud jste použili původní parametry funkce, volání by se nikdy ve skutečnosti nevyhodnotila, což by vedlo k tomu, Diagnostics.LogValue že do trasování nebyly zapsány žádné zprávy. Funkční programování je zábavné!

Při spouštění dotazů by se teď v protokolu měly zobrazit nové zprávy.

Přístup k adrese URL:

Přístup ke zprávě adresy URL

Typ schématu:

Zpráva typu schématu

Zobrazí se serializovaná verze parametru schema type, a ne to, co byste získali, když provedete jednoduchou Text.FromValue hodnotu typu (což má za následek "typ").

Diagnostics.LogFailure

Funkci Diagnostics.LogFailure lze použít k zalamování volání funkce a zapíše se do trasování pouze v případě, že volání funkce selže (to znamená, že vrátí errorhodnotu ).

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

Interně Diagnostics.LogFailure přidá try operátor do function volání. Pokud volání selže, text hodnota se před vrácením původní errorhodnoty zapíše do trasování . function Pokud volání proběhne úspěšně, vrátí se výsledek bez napsání čehokoli do trasování. Vzhledem k tomu, že chyby M neobsahují úplné trasování zásobníku (to znamená, že se obvykle zobrazí pouze zpráva o chybě), může to být užitečné, když chcete určit, kde byla chyba vyvolána.

Jako příklad (špatný) upravte withData řádek TripPinNavTable funkce tak, aby vynutil chybu znovu:

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

V trasování najdete výslednou chybovou zprávu obsahující vaši texta původní informace o chybě.

Zpráva LogFailure

Než budete pokračovat v dalším kurzu, nezapomeňte funkci obnovit do funkčního stavu.

Závěr

Tato stručná (ale důležitá!) lekce vám ukázala, jak pomocí diagnostických pomocných funkcí protokolovat do trasovacích souborů Power Query. Při správném použití jsou tyto funkce užitečné při ladění problémů v rámci konektoru.

Poznámka:

Jako vývojář konektoru je vaší zodpovědností zajistit, abyste jako součást protokolování diagnostiky nezaregistrovávejte citlivé nebo identifikovatelné osobní údaje. Musíte být také opatrní, abyste nevykreslili příliš mnoho informací trasování, protože to může mít negativní dopad na výkon.

Další kroky

TripPin Part 9 - Test Připojení ion