Megosztás a következőn keresztül:


TripPin 8. rész – Diagnosztikák hozzáadása

Feljegyzés

Ez a tartalom jelenleg a Visual Studióban történő diagnosztikához használt örökölt implementációból származó tartalmakra hivatkozik. A tartalom a közeljövőben frissülni fog, hogy lefedje a Visual Studio Code új Power Query SDK-ját.

Ez a többrészes oktatóanyag a Power Query új adatforrásbővítményének létrehozását ismerteti. Az oktatóanyagot egymás után kell elvégezni – minden lecke az előző leckékben létrehozott összekötőre épül, és növekményesen új képességeket ad hozzá az összekötőhöz.

Ebben a leckében a következőt fogja:

  • Tudnivalók a Diagnostics.Trace függvényről
  • A Diagnosztikai segédfüggvények használatával nyomkövetési információkat adhat hozzá az összekötő hibakereséséhez

Diagnosztika engedélyezése

A Power Query felhasználói engedélyezhetik a nyomkövetési naplózást a Beállítások | Diagnosztika.

Nyomkövetés engedélyezése a Power Queryben.

Ha engedélyezve van, a későbbi lekérdezések hatására az M motor nyomkövetési információkat bocsát ki a rögzített felhasználói címtárban található naplófájlok számára.

Ha M-lekérdezéseket futtat a Power Query SDK-ból, a nyomkövetés a projekt szintjén engedélyezve van. A projekttulajdonságok lapon három beállítás van a nyomkövetéshez:

  • Napló törlése – ha ez a beállítás be van állítva true, a rendszer visszaállítja/törli a naplót a lekérdezések futtatásakor. Javasoljuk, hogy ezt a beállítást tartsa a következőre true: .
  • Motorkövetések megjelenítése – ez a beállítás szabályozza az M motor beépített nyomkövetéseinek kimenetét. Ezek a nyomkövetések csak a Power Query-csapat tagjai számára hasznosak, ezért általában ezt a beállítást falseérdemes megtartani.
  • Felhasználói nyomkövetések megjelenítése – ez a beállítás szabályozza az összekötő nyomkövetési információinak kimenetét. Ezt a beállítást a következőre szeretné beállítani true: .

Projekttulajdonságok.

Ha engedélyezve van, a naplóbejegyzések az M Lekérdezés kimenete ablakban, a Napló lap alatt jelennek meg.

Diagnostics.Trace

A Diagnostics.Trace függvény üzenetek írására szolgál az M motor nyomkövetési naplójába.

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

Fontos

Az M egy funkcionális nyelv lusta kiértékeléssel. A használat során Diagnostics.Tracene feledje, hogy a függvény csak akkor lesz meghívva, ha a kifejezés, amelynek a része, ténylegesen kiértékelve lesz. Erre az oktatóanyag későbbi részében talál példákat.

A traceLevel paraméter a következő értékek egyike lehet (csökkenő sorrendben):

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

Ha a nyomkövetés engedélyezve van, a felhasználó kiválaszthatja a megtekinteni kívánt üzenetek maximális szintjét. Az ilyen szintű és alatti nyomkövetési üzenetek a naplóba kerülnek. Ha például a felhasználó a "Figyelmeztetés" szintet választja, a naplókban megjelennek a nyomkövetési TraceLevel.WarningTraceLevel.ErrorTraceLevel.Critical üzenetek.

A message paraméter az a tényleges szöveg, amely a nyomkövetési fájl kimenete lesz. A szöveg csak akkor tartalmazza a value paramétert, ha kifejezetten belefoglalja a szövegbe.

A value függvény a paramétert adja vissza. delayed A paraméter beállításakor truevalue egy nulla paraméterfüggvény lesz, amely a kiértékelendő tényleges értéket adja vissza. Ha delayed be van állítva false, value akkor a tényleges érték lesz. Az alábbiakban talál egy példát a működésre.

A diagnosztika használata. Nyomkövetés a TripPin-összekötőben

A Diagnostics.Trace használatának gyakorlati példájához és a delayed paraméter hatásához frissítse a TripPin-összekötő függvényét GetSchemaForEntity a error kivétel körbefuttatásához:

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);

A kiértékelés során (tesztelési célokra!) egy érvénytelen entitásnevet adhat át a GetEntity függvénynek. Itt módosíthatja a withData függvény sorát, és lecserélheti [Name] a TripPinNavTable következőre"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;

Engedélyezze a projekt nyomkövetését , és futtassa a teszt lekérdezéseit. Errors A lapon a felmerült hiba szövegének kell megjelennie:

Hibaüzenet.

Emellett a Log lapon ugyanazt az üzenetet kell látnia. Ha különböző értékeket használ a paraméterekhez és value a message paraméterekhez, ezek eltérőek lesznek.

Hibanapló.

Vegye figyelembe, hogy a Action naplóüzenet mezője tartalmazza a bővítmény nevét (ebben az esetben Engine/Extension/TripPin). Így könnyebben megtalálhatja a bővítményhez kapcsolódó üzeneteket, ha több lekérdezés is van, és/vagy a rendszer (összefésülési motor) nyomkövetése engedélyezve van.

Késleltetett kiértékelés

Példa a delayed paraméter működésére, néhány módosítást végrehajt, és újra futtatja a lekérdezéseket.

Először állítsa be az delayed értéket a következő értékre false, de hagyja meg a value paramétert a következőképpen:

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

A lekérdezés futtatásakor a következő hibaüzenet jelenik meg: "Nem tudunk típus típusú függvényt átalakítani" hibaüzenet jelenik meg, és nem a tényleges, ön által felvetett hiba. Ennek az az oka, hogy a hívás most egy function értéket ad vissza, nem magát az értéket.

Ezután távolítsa el a függvényt a value paraméterből:

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

A lekérdezés futtatásakor a megfelelő hibaüzenet jelenik meg, de ha bejelöli a Napló lapot, nem lesznek üzenetek. Ennek az az oka, hogy a rendszer végül a error hívás Diagnostics.Tracesorán emeli/értékeli ki, így az üzenet valójában soha nem lesz kimenet.

Most, hogy megismerte a delayed paraméter hatását, mindenképpen állítsa vissza az összekötőt működő állapotba a folytatás előtt.

Diagnosztikai segédfüggvények a Diagnostics.pqm-ben

A projektben található Diagnostics.pqm fájl számos segédfüggvényt tartalmaz, amelyek megkönnyítik a nyomkövetést. Ahogy az előző oktatóanyagban is látható, ezt a fájlt belefoglalhatja a projektbe (ne felejtse el lefordítani a buildelési műveletet), majd betöltheti az összekötőfájlba. Az összekötőfájl aljának most az alábbi kódrészlethez hasonlóan kell kinéznie. Nyugodtan fedezze fel a modul által biztosított különböző függvényeket, de ebben a mintában csak a Diagnostics.LogValue függvényeket fogja Diagnostics.LogFailure használni.

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

A Diagnostics.LogValue függvény nagyon hasonló Diagnostics.Trace, és a kiértékelendő érték kimenetére használható.

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

A prefix paraméter elő van állítva a naplóüzenetre. Ezzel állapíthatja meg, hogy melyik hívás kimenete legyen az üzenet. A value függvény a paramétert adja vissza, és az M érték szöveges ábrázolásaként is meg lesz írva a nyomkövetésre. Ha például value az A és b oszlopokkal egyenlő table , a napló az egyenértékű #table ábrázolásokat fogja tartalmazni: #table({"A", "B"}, {{"row1 A", "row1 B"}, {"row2 A", row2 B"}})

Feljegyzés

Az M értékek szöveggé való szerializálása költséges művelet lehet. Ügyeljen arra, hogy a nyomkövetéshez kivezetett értékek mérete mekkora lehet.

Feljegyzés

A Legtöbb Power Query-környezet a nyomkövetési üzeneteket a maximális hosszra csonkítja.

Példaként frissítenie kell a függvényt, TripPin.Feed hogy nyomon kövesse a url függvénybe átadott argumentumokat és schema argumentumokat.

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;

A hívásban szereplő új _url és _schema értékeket kell használnia GetAllPagesByNextLink. Ha az eredeti függvényparamétereket használta, a Diagnostics.LogValue hívások soha nem lesznek kiértékelve, így nem lesznek a nyomkövetésre írt üzenetek. A funkcionális programozás szórakoztató!

A lekérdezések futtatásakor mostantól új üzeneteknek kell megjelennie a naplóban.

Url-cím elérése:

Url-üzenet elérése.

Séma típusa:

Sématípus üzenete.

A paraméter typeszerializált verzióját látja ahelyettschema, hogy azt kapná, amit egy egyszerű Text.FromValue típusérték esetén kap (ami "típust" eredményez).

Diagnostics.LogFailure

A Diagnostics.LogFailure függvény függvényhívások burkolására használható, és csak akkor ír a nyomkövetésre, ha a függvényhívás meghiúsul (vagyis egy függvényt errorad vissza).

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

Belsőleg Diagnostics.LogFailure hozzáad egy operátort try a function híváshoz. Ha a hívás sikertelen, az text érték a nyomkövetésbe lesz írva, mielőtt visszaadja az eredetit error. Ha a function hívás sikeres, az eredmény anélkül lesz visszaadva, hogy bármit is írna a nyomkövetéshez. Mivel az M-hibák nem tartalmaznak teljes veremkövetést (azaz általában csak a hiba üzenetét látja), ez akkor lehet hasznos, ha meg szeretné határozni, hogy hol történt a hiba.

Gyenge példaként módosítsa a withData függvény sorát TripPinNavTable , hogy ismét hibát kényszerítsen ki:

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

A nyomkövetésben megtalálhatja az ön és az eredeti hibainformációt tartalmazó texthibaüzenetet.

LogFailure üzenet.

A következő oktatóanyag elvégzése előtt mindenképpen állítsa vissza a függvényt működő állapotba.

Összegzés

Ez a rövid (de fontos!) lecke bemutatta, hogyan használhatja a diagnosztikai segédfüggvényeket a Power Query nyomkövetési fájljaiba való bejelentkezéshez. A megfelelő használat esetén ezek a függvények hasznosak az összekötőn belüli hibakeresési problémák esetén.

Feljegyzés

Összekötő-fejlesztőként az Ön felelőssége annak biztosítása, hogy a diagnosztikai naplózás részeként ne naplózza a bizalmas vagy személyazonosításra alkalmas adatokat (PII). Ügyeljen arra is, hogy ne adjon ki túl sok nyomkövetési információt, mivel az negatív hatással lehet a teljesítményre.

Következő lépések

TripPin 9. rész - Teszt Csatlakozás ion