Jaa


TripPin-osa 8 – Diagnostiikan lisääminen

Muistiinpano

Tämä sisältö viittaa tällä hetkellä visual studion diagnostiikan vanhan toteutuksen sisältöön. Sisältö päivitetään lähitulevaisuudessa kattamaan uusi Power Query SDK Visual Studio Codessa.

Tässä moniosaisessa opetusohjelmassa käsitellään uuden tietolähdelaajennuksen luomista Power Querylle. Opetusohjelma on tarkoitus tehdä järjestyksessä – jokainen oppitunti perustuu aiemmilla oppitunneilla luotuun liittimeen ja lisää uusia ominaisuuksia liittimeen.

Tällä oppitunnilla:

  • Lisätietoja Diagnostics.Trace-funktiosta
  • Diagnostiikan apufunktioiden avulla voit lisätä jäljitystietoja liittimen virheenkorjauksen helpottamiseksi

Diagnostiikan käyttöönotto

Power Query -käyttäjät voivat ottaa jäljityksen kirjaamisen käyttöön valitsemalla valintaruudun kohdassa Asetukset | Diagnostiikka.

Ota jäljitys käyttöön Power Queryssa.

Kun tämä asetus on käytössä, kaikki myöhemmät kyselyt aiheuttavat sen, että M-moduuli lähettää jäljitystiedot kiinteässä käyttäjähakemistossa sijaitseviin lokitiedostoihin.

Kun M-kyselyitä suoritetaan Power Query SDK:sta, jäljitys otetaan käyttöön projektitasolla. Projektin ominaisuudet -sivulla on kolme jäljitykseen liittyvää asetusta:

  • Tyhjennä Log – kun tämän asetuksena trueon , loki nollautuu tai tyhjennetään, kun suoritat kyselyt. Suosittelemme, että pidät tämän asetuksen arvona true.
  • Näytä moduulin jäljitykset – tämä asetus määrittää M-moduulin sisältämien jäljitysten tulokset. Nämä jäljitystiedostot ovat hyödyllisiä vain Power Query -tiimin jäsenille, joten haluat yleensä pitää tämän asetuksena false.
  • Näytä käyttäjien jäljitykset – tämä asetus ohjaa liittimesi tulostamien tietojen jäljitystä. Tämän arvoksi truekannattaa asettaa .

Projektin ominaisuudet.

Kun se on käytössä, näet lokimerkinnät M-kyselyn tuloste -ikkunassa Log-välilehden alla.

Diagnostics.Trace

Diagnostics.Trace-funktiolla kirjoitetaan sanomia M-moduulin jäljityslokiin.

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

Tärkeä

M on funktionaalinen kieli, jossa arviointi on laiskuutta. Kun käytät Diagnostics.Trace-funktiota, muista, että funktiota kutsutaan vain, jos lauseke, johon se on osa, arvioidaan. Esimerkkejä tästä on jäljempänä tässä opetusohjelmassa.

traceLevel Parametri voi olla yksi seuraavista arvoista (laskevassa järjestyksessä):

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

Kun jäljitys on käytössä, käyttäjä voi valita enimmäismäärän sanomia, jotka hän haluaa nähdä. Kaikki tällä tasolla ja sen alapuolella olevat jäljitysviestit tulostetaan lokiin. Jos käyttäjä esimerkiksi valitsee varoitustason, -viestin jäljitysviestit TraceLevel.WarningTraceLevel.ErrorTraceLevel.Critical näkyvät lokeissa.

message Parametri on todellinen teksti, joka tulostetaan jäljitystiedostoon. Teksti ei sisällä parametria, value ellet nimenomaisesti sisällytä sitä tekstiin.

Funktio value palauttaa parametrin. Kun parametrin delayed arvoksi trueon määritetty , value on nollaparametrifunktio, joka palauttaa arvioitavan todellisen arvon. Kun delayed arvona falseon , value on todellinen arvo. Esimerkki tämän toiminnasta on alla.

Diagnostiikan käyttö. Jäljitys TripPin-liittimessä

Käytännöllinen esimerkki Diagnostics.Trace-kohteen käytöstä ja parametrin delayed vaikutuksesta on trippin-liittimen funktion GetSchemaForEntity päivittäminen poikkeuksen error rivittämiseksi:

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

Voit pakottaa virheen arvioinnin aikana (testitarkoituksiin!) välittämällä funktiolle virheellisen entiteetin GetEntity nimen. Tässä muutat funktion withData riviä TripPinNavTable ja korvaat [Name] arvolla "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;

Ota jäljitys käyttöön projektille ja suorita testikyselyt. Errors Välilehdessä pitäisi näkyä esiin esiin tuomasi virheen teksti:

Virhesanoma.

Välilehdessä Log pitäisi myös näkyä sama sanoma. Jos käytät - ja value -messageparametreille eri arvoja, ne ovat erilaiset.

Virheloki.

Huomaa myös, että Action lokiviestin kentässä on tunnisteen nimi (tietolähteen laji) (tässä tapauksessa Engine/Extension/TripPin). Tämä helpottaa laajennukseen liittyvien viestien löytämistä, kun mukana on useita kyselyitä ja/tai järjestelmän (koostemoduulin) jäljitys on käytössä.

Viivästynyt arviointi

Esimerkkinä parametrin delayed toiminnasta teet joitakin muutoksia ja suoritat kyselyt uudelleen.

Määritä ensin arvoksi delayed false, mutta jätä value parametri ennalle:

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

Kun suoritat kyselyn, näyttöön tulee virhesanoma "Function-tyyppistä arvoa ei voi muuntaa tyypiksi", eikä varsinaista virhettä. Tämä johtuu siitä, että kutsu palauttaa function nyt arvon itse arvon sijaan.

Poista seuraavaksi funktio parametrista value :

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

Kun suoritat kyselyn, saat oikean virheen, mutta jos tarkistat Loki-välilehden, viestejä ei ole. Tämä johtuu siitä, että error lopulta ne korotetaan tai arvioidaan kohteen Diagnostics.Tracekutsun aikana, joten viestiä ei koskaan varsinaisesti tuoda.

Nyt kun ymmärrät parametrin delayed vaikutuksen, muista palauttaa liittimesi takaisin toimintatilaan ennen jatkamista.

Diagnostiikan apufunktiot kohteessa Diagnostics.pqm

Tähän projektiin sisältyvä Diagnostics.pqm-tiedosto sisältää useita apufunktioita, jotka helpottavat jäljitystä. Kuten edellisessä opetusohjelmassa näytettiin, voit sisällyttää tämän tiedoston projektiin (muistaen määrittää muodostamistoiminnon kääntämään) ja ladata sen sitten liitintiedostoon. Liitintiedoston alaosassa pitäisi nyt olla alla olevan koodikatkelman kaltainen. Voit tutustua tämän moduulin tarjoaihin funktioihin, mutta tässä esimerkissä käytät vain - ja Diagnostics.LogFailure -Diagnostics.LogValuefunktioita.

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

Funktio Diagnostics.LogValue on samankaltainen kuin Diagnostics.Trace, ja sen avulla voidaan tulostaa arvioitavan kohteen arvo.

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

prefix Parametri on log-sanoman esiliitetty. Voit tämän avulla selvittää, mikä kutsu tulostaa viestin. Funktio value palauttaa parametrin, ja se kirjoitetaan myös jäljitykseen M-arvon tekstiesityksenä. Jos esimerkiksi value on yhtä suuri kuin table sarakkeiden A ja B kanssa, loki sisältää vastaavan #table esityksen: #table({"A", "B"}, {{"row1 A", "row1 B"}, {"row2 A", row2 B"}})

Muistiinpano

M-arvojen sarjoittaminen tekstiksi voi olla kallista. Ota huomioon niiden arvojen mahdollinen koko, jotka tulostat jäljitykseen.

Muistiinpano

Useimmat Power Query -ympäristöt katkaisevat jäljitysviestit enimmäispituuteen.

Esimerkkinä funktio päivitetään funktioon TripPin.Feed välitettyjen url ja schema välitettyjen argumenttien jäljittämiseksi.

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;

Sinun on käytettävä :n uutta _url ja _schema arvoa kutsussa GetAllPagesByNextLink. Jos käyttäisit alkuperäisiä funktioparametreja, Diagnostics.LogValue kutsuja ei koskaan arvioitu, jolloin jäljitykseen ei olisi kirjoitettu mitään sanomia. Funktionaalinen ohjelmointi on hauskaa!

Kun suoritat kyselyt, näet lokissa nyt uudet viestit.

URL-osoitteen käyttäminen:

Url-osoitetta käytettäessä.

Rakenteen tyyppi:

Rakennetyyppi-viesti.

Näet sarjoitetun version -parametrista schema typesen sijaan, mitä saisit, kun teet yksinkertaisen Text.FromValue tyyppiarvon (jonka tuloksena on "tyyppi").

Diagnostics.LogFailure

Funktiolla Diagnostics.LogFailure voidaan rivittää funktiokutsuja, ja se kirjoittaa jäljitykseen vain, jos funktiokutsu epäonnistuu (eli palauttaa arvon error).

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

Lisää sisäisesti Diagnostics.LogFailure operaattorin try kutsuun function . Jos kutsu epäonnistuu, text arvo kirjoitetaan jäljitykseen ennen alkuperäisen -kohteen errorpalauttamista. function Jos kutsu onnistuu, tulos palautetaan kirjoittamatta mitään jäljitystiedostoon. Koska M-virheet eivät sisällä täyttä pinon jäljitystä (eli näet yleensä vain virheen sanoman), tästä voi olla hyötyä, kun haluat paikantaa virheen esiintyneen paikan.

Muokkaa (huono)-esimerkissä funktion TripPinNavTable riviä siten, withData että se pakottaa virheen uudelleen:

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

Voit löytää jäljityksestä tulokseksi saatavan virhesanoman, joka sisältää - text, - ja alkuperäiset virhetiedot.

LogFailure-viesti.

Muista palauttaa funktiosi toimintatilaan ennen seuraavan opetusohjelman jatkamista.

Yhteenveto

Tämä lyhyt (mutta tärkeä!) oppitunti näytti sinulle, miten voit käyttää diagnostiikka-aputoimintofunktioita kirjautuaksesi Power Queryn jäljitystiedostoihin. Oikein käytettynä nämä funktiot ovat hyödyllisiä yhdistimen ongelmien virheenkorjauksessa.

Muistiinpano

Liittimen kehittäjänä sinun vastuullasi on varmistaa, ettet kirjaa luottamuksellisia tai henkilökohtaisesti tunnistettavia tietoja (PII) diagnostiikan kirjaamisen osana. Sinun on myös varottava tulostamasta liikaa jäljitystietoja, sillä sillä se voi vaikuttaa haitallisesti suorituskykyyn.

Seuraavat vaiheet

TripPin-osa 9 – testi Näyttöyhteys ion