Κοινή χρήση μέσω


TripPin μέρος 8 - Προσθήκη διαγνωστικού ελέγχου

Σημείωμα

Αυτό το περιεχόμενο αναφέρεται επί του παρόντος σε περιεχόμενο από μια υλοποίηση παλαιού τύπου για διαγνωστικά στο Visual Studio. Το περιεχόμενο θα ενημερωθεί στο εγγύς μέλλον για να καλύψει το νέο SDK Power Query στο Visual Studio Code.

Αυτή η εκμάθηση πολλαπλών τμημάτων καλύπτει τη δημιουργία μιας νέας επέκτασης προέλευσης δεδομένων για το Power Query. Το εκπαιδευτικό βοήθημα προορίζεται να γίνει διαδοχικά. Κάθε μάθημα βασίζεται στη σύνδεση που δημιουργήθηκε σε προηγούμενα μαθήματα, προσθέτοντας σταδιακά νέες δυνατότητες στη σύνδεσή σας.

Σε αυτό το μάθημα, θα κάνετε τα εξής:

  • Μάθετε σχετικά με τη συνάρτηση Diagnostics.Trace
  • Χρησιμοποιήστε τις συναρτήσεις βοηθητικών στοιχείων διαγνωστικών για να προσθέσετε πληροφορίες ανίχνευσης για να βοηθήσετε στον εντοπισμό σφαλμάτων στη σύνδεσή σας

Ενεργοποίηση διαγνωστικού ελέγχου

Οι χρήστες του Power Query μπορούν να ενεργοποιήσουν την καταγραφή ανίχνευσης, επιλέγοντας το πλαίσιο ελέγχου στην περιοχή Επιλογές | Διαγνωστικά.

Ενεργοποιήστε την ανίχνευση στο Power Query.

Όταν ενεργοποιηθεί, οποιαδήποτε επόμενα ερωτήματα θα προκαλέσουν την ενσωμάτωση πληροφοριών ανίχνευσης στον μηχανισμό M στα αρχεία καταγραφής που βρίσκονται σε έναν σταθερό κατάλογο χρηστών.

Κατά την εκτέλεση ερωτημάτων M μέσα από το SDK του Power Query, η ανίχνευση ενεργοποιείται σε επίπεδο έργου. Στη σελίδα ιδιοτήτων έργου, υπάρχουν τρεις ρυθμίσεις που σχετίζονται με την ανίχνευση:

  • Εκκαθάριση αρχείου καταγραφής— όταν οριστεί σε true, θα γίνει επαναφορά/απαλοιφή του αρχείου καταγραφής κατά την εκτέλεση των ερωτημάτων σας. Συνιστούμε να διατηρείτε αυτή τη ρύθμιση σε true.
  • Εμφάνιση ανιχνεύσεων μηχανής— Αυτή η ρύθμιση ελέγχει την έξοδο ενσωματωμένων ανιχνεύσεων από τον μηχανισμό M. Αυτές οι ανιχνεύσεις είναι χρήσιμες μόνο για τα μέλη της ομάδας Power Query, επομένως συνήθως θα θέλετε να διατηρήσετε αυτήν τη ρύθμιση ρυθμισμένη στο false.
  • Εμφάνιση ανιχνεύσεων χρήστη — Αυτή η ρύθμιση ελέγχει την έξοδο πληροφοριών ανίχνευσης από τη σύνδεσή σας. Ορίστε αυτή την επιλογή σε true.

Ιδιότητες έργου.

Όταν ενεργοποιηθεί, θα αρχίσετε να βλέπετε καταχωρήσεις αρχείου καταγραφής στο παράθυρο Έξοδος ερωτήματος M, στην καρτέλα Αρχείο καταγραφής.

Diagnostics.Trace

Η συνάρτηση Diagnostics.Trace χρησιμοποιείται για την εγγραφή μηνυμάτων στο αρχείο καταγραφής ανίχνευσης της μηχανής M.

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

Σημαντικό

Η M είναι μια λειτουργική γλώσσα με αργή αξιολόγηση. Όταν χρησιμοποιείτε Diagnostics.Traceτο , να θυμάστε ότι η συνάρτηση θα καλείται μόνο εάν η παράσταση στην οποία ανήκει στην πραγματικότητα αξιολογείται. Μπορείτε να βρείτε παραδείγματα για αυτό παρακάτω σε αυτό το πρόγραμμα εκμάθησης.

Η traceLevel παράμετρος μπορεί να είναι μία από τις ακόλουθες τιμές (σε φθίνουσα σειρά):

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

Όταν είναι ενεργοποιημένη η ανίχνευση, ο χρήστης μπορεί να επιλέξει το μέγιστο επίπεδο μηνυμάτων που θα ήθελε να δει. Όλα τα μηνύματα ανίχνευσης αυτού του επιπέδου και κάτω θα εξαχθούν στο αρχείο καταγραφής. Για παράδειγμα, εάν ο χρήστης επιλέξει το επίπεδο "Προειδοποίηση", τα μηνύματα ανίχνευσης των TraceLevel.Warning, TraceLevel.Errorκαι TraceLevel.Critical θα εμφανίζονται στα αρχεία καταγραφής.

Η message παράμετρος είναι το πραγματικό κείμενο που θα εξάγεται στο αρχείο ανίχνευσης. Το κείμενο δεν θα περιέχει την value παράμετρο, εκτός εάν την συμπεριλάβετε ρητά στο κείμενο.

Η value παράμετρος είναι αυτή που θα επιστρέψει η συνάρτηση. Όταν η παράμετρος delayed οριστεί σε true, value θα είναι μια συνάρτηση παραμέτρου μηδέν που επιστρέφει την πραγματική τιμή που αξιολογείτε. Όταν delayed οριστεί σε false, value θα είναι η πραγματική τιμή. Μπορείτε να βρείτε ένα παράδειγμα του τρόπου λειτουργίας του παρακάτω.

Χρήση διαγνωστικών. Ανίχνευση στη σύνδεση TripPin

Για ένα πρακτικό παράδειγμα χρήσης του Diagnostics.Trace και της επίδρασης της delayed παραμέτρου, ενημερώστε τη συνάρτηση της GetSchemaForEntity σύνδεσης TripPin για να αναδιπλώσετε την error εξαίρεση:

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

Μπορείτε να εξαναγκάσετε ένα σφάλμα κατά τη διάρκεια της αξιολόγησης (για σκοπούς δοκιμής!) διαβιβάζοντας ένα μη έγκυρο όνομα οντότητας στη GetEntity συνάρτηση. Εδώ αλλάζετε τη withData γραμμή στη συνάρτηση, αντικαθιστώντας [Name] την TripPinNavTable με "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;

Ενεργοποιήστε την ανίχνευση για το έργο σας και εκτελέστε τα ερωτήματα δοκιμής. Errors Στην καρτέλα θα πρέπει να δείτε το κείμενο του σφάλματος που ενεργοποιήσατε:

Μήνυμα σφάλματος.

Επίσης, στην Log καρτέλα, θα πρέπει να δείτε το ίδιο μήνυμα. Εάν χρησιμοποιείτε διαφορετικές τιμές για τις message παραμέτρους και value , αυτές θα διαφέρουν.

Αρχείο καταγραφής σφαλμάτων.

Σημειώστε επίσης ότι το Action πεδίο του μηνύματος καταγραφής περιέχει το όνομα (Είδος προέλευσης δεδομένων) της επέκτασής σας (σε αυτή την περίπτωση, Engine/Extension/TripPin). Αυτό διευκολύνει την εύρεση των μηνυμάτων που σχετίζονται με την επέκτασή σας όταν εμπλέκονται πολλά ερωτήματα ή/και είναι ενεργοποιημένη η ανίχνευση συστήματος (μηχανή συνδυασμού δεδομένων).

Καθυστερημένη αξιολόγηση

Ως παράδειγμα του τρόπου λειτουργίας της delayed παραμέτρου, θα κάνετε ορισμένες τροποποιήσεις και θα εκτελέσετε ξανά τα ερωτήματα.

Πρώτα, ορίστε την delayed τιμή σε false, αλλά αφήστε την value παράμετρο ως έχει:

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

Όταν εκτελείτε το ερώτημα, θα λάβετε ένα μήνυμα σφάλματος ότι "Δεν είναι δυνατή η μετατροπή μιας τιμής τύπου Συνάρτηση σε τύπο τύπου" και όχι το πραγματικό σφάλμα που δημιουργήσατε. Αυτό συμβαίνει επειδή η κλήση επιστρέφει τώρα μια function τιμή, αντί για την ίδια την τιμή.

Στη συνέχεια, καταργήστε τη συνάρτηση από την value παράμετρο:

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

Όταν εκτελείτε το ερώτημα, θα λάβετε το σωστό σφάλμα, αλλά εάν ελέγξετε την καρτέλα Αρχείο καταγραφής , δεν θα υπάρχουν μηνύματα. Αυτό συμβαίνει επειδή το error αποτέλεσμα καταλήγει να ενεργοποιείται/αξιολογείται κατά τη διάρκεια της κλήσης στο Diagnostics.Trace, επομένως το μήνυμα δεν προκύπτει ποτέ στην πραγματικότητα.

Τώρα που κατανοείτε την επίδραση της delayed παραμέτρου, φροντίστε να επαναφέρετε τη σύνδεσή σας ξανά σε κατάσταση εργασίας προτού συνεχίσετε.

Λειτουργίες βοηθητικών διαγνωστικών στο Diagnostics.pqm

Το αρχείο Diagnostics.pqm που περιλαμβάνεται σε αυτό το έργο περιέχει πολλές βοηθητικές συναρτήσεις που διευκολύνουν την ανίχνευση. Όπως φαίνεται στην προηγούμενη εκμάθηση, μπορείτε να συμπεριλάβετε αυτό το αρχείο στο έργο σας (θυμηθείτε να ορίσετε την Ενέργεια δόμησης σε Μεταγλώττιση) και, στη συνέχεια, να το φορτώσετε στο αρχείο σύνδεσης. Το κάτω μέρος του αρχείου σύνδεσης θα πρέπει τώρα να μοιάζει με το παρακάτω τμήμα κώδικα. Μην διστάσετε να εξερευνήσετε τις διάφορες συναρτήσεις που παρέχει αυτή η εκπαιδευτική ενότητα, αλλά σε αυτό το δείγμα, θα χρησιμοποιείτε μόνο τις Diagnostics.LogValue συναρτήσεις και 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

Η Diagnostics.LogValue συνάρτηση μοιάζει πολύ με Diagnostics.Trace, και μπορεί να χρησιμοποιηθεί για την έξοδο της τιμής των στοιχείων που αξιολογείτε.

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

Η prefix παράμετρος προστίθεται στο μήνυμα αρχείου καταγραφής. Θα το χρησιμοποιούσατε για να διαπιστώσετε ποια κλήση εξάγει το μήνυμα. Η value παράμετρος είναι αυτή που θα επιστρέψει η συνάρτηση και θα γραφτεί επίσης στην ανίχνευση ως μια αναπαράσταση κειμένου της τιμής M. Για παράδειγμα, εάν value το ισούται με a table με τις στήλες A και B, το αρχείο καταγραφής θα περιέχει την ισοδύναμη #table αναπαράσταση: #table({"A", "B"}, {{"row1 A", "row1 B"}, {"row2 A", row2 B"}})

Σημείωμα

Η σειριοποίηση των τιμών M σε κείμενο μπορεί να είναι μια δαπανηρή λειτουργία. Να γνωρίζετε το πιθανό μέγεθος των τιμών που δημιουργείτε στην ανίχνευση.

Σημείωμα

Τα περισσότερα περιβάλλοντα Power Query θα περικόπτουν τα μηνύματα ανίχνευσης στο μέγιστο μήκος.

Για παράδειγμα, θα ενημερώσετε τη TripPin.Feed συνάρτηση για ανίχνευση των ορισμάτων url και schema που μεταβιβάζονται στη συνάρτηση.

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;

Πρέπει να χρησιμοποιήσετε τις νέες _url τιμές και _schema στην κλήση στο GetAllPagesByNextLink. Εάν χρησιμοποιήσατε τις αρχικές παραμέτρους της συνάρτησης, οι Diagnostics.LogValue κλήσεις δεν θα αξιολογηθούν ποτέ στην πραγματικότητα, με αποτέλεσμα να μην υπάρχουν μηνύματα που να έχουν γραφτεί στην ανίχνευση. Ο λειτουργικός προγραμματισμός είναι διασκεδαστικός!

Όταν εκτελείτε τα ερωτήματά σας, θα πρέπει τώρα να βλέπετε νέα μηνύματα στο αρχείο καταγραφής.

Πρόσβαση στη διεύθυνση URL:

Πρόσβαση στο μήνυμα διεύθυνσης URL.

Τύπος σχήματος:

Μήνυμα τύπου σχήματος.

Βλέπετε τη σειριοποιημένη έκδοση της schema παραμέτρου type, αντί για αυτό που θα λάβετε όταν κάνετε μια απλή Text.FromValue τιμή σε μια τιμή τύπου (η οποία έχει ως αποτέλεσμα "τύπο").

Diagnostics.LogFailure

Η Diagnostics.LogFailure συνάρτηση μπορεί να χρησιμοποιηθεί για την αναδίπλωση κλήσεων συναρτήσεων και θα κάνει εγγραφή στην ανίχνευση μόνο εάν αποτύχει η κλήση της συνάρτησης (δηλαδή, επιστρέφει ).error

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

Εσωτερικά, Diagnostics.LogFailure προσθέτει έναν try τελεστή στην function κλήση. Εάν η κλήση αποτύχει, η text τιμή εγγράφεται στην ανίχνευση πριν επιστρέψει την αρχική error. Εάν η function κλήση είναι επιτυχής, το αποτέλεσμα επιστρέφεται χωρίς την εγγραφή τίποτα στην ανίχνευση. Δεδομένου ότι τα σφάλματα M δεν περιέχουν ανίχνευση πλήρους στοίβας (δηλαδή, συνήθως βλέπετε μόνο το μήνυμα του σφάλματος), αυτό μπορεί να είναι χρήσιμο όταν θέλετε να εντοπίσετε πού προέκυψε το σφάλμα.

Ως ένα (κακό) παράδειγμα, τροποποιήστε τη withData γραμμή της TripPinNavTable συνάρτησης για να επιβάλετε ένα σφάλμα για άλλη μια φορά:

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

Στην ανίχνευση, μπορείτε να βρείτε το μήνυμα σφάλματος που προκύπτει text, το οποίο περιέχει τις αρχικές πληροφορίες σφάλματος και τις αρχικές πληροφορίες.

Μήνυμα LogFailure.

Φροντίστε να επαναφέρετε τη συνάκησή σας σε κατάσταση εργασίας προτού συνεχίσετε με την επόμενη εκμάθηση.

Συμπέρασμα

Αυτό το σύντομο (αλλά σημαντικό!) μάθημα σάς έδειξε πώς να χρησιμοποιήσετε τις λειτουργίες βοηθητικών διαγνωστικών για να συνδεθείτε στα αρχεία ανίχνευσης του Power Query. Όταν χρησιμοποιούνται σωστά, αυτές οι συναρτήσεις είναι χρήσιμες για τον εντοπισμό σφαλμάτων εντός της σύνδεσής σας.

Σημείωμα

Ως προγραμματιστής συνδέσεων, είναι δική σας ευθύνη να βεβαιωθείτε ότι δεν θα καταγράφετε ευαίσθητα ή προσωπικά στοιχεία (PII) ως μέρος της καταγραφής διαγνωστικού ελέγχου. Επίσης, πρέπει να είστε προσεκτικοί ώστε να μην παράγει πάρα πολλές πληροφορίες ανίχνευσης, καθώς μπορεί να έχουν αρνητικές επιπτώσεις στις επιδόσεις.

Επόμενα βήματα

TripPin Part 9 - Test Σύνδεση ion