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


TripPin μέρος 4 - Διαδρομές προέλευσης δεδομένων

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

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

  • Απλοποίηση της λογικής σύνδεσης για τη σύνδεσή σας
  • Βελτίωση της εμπειρίας πίνακα περιήγησης

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

Για μια λεπτομερή επεξήγηση σχετικά με τον τρόπο αναγνώρισης των διαπιστευτηρίων, ανατρέξτε στην ενότητα Διαδρομές προέλευσης δεδομένων στο θέμα Χειρισμός ελέγχου ταυτότητας.

Διαδρομές προέλευσης δεδομένων

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

Στο προηγούμενο μάθημα μοιραστήκαμε δύο συναρτήσεις προέλευσης δεδομένων, και οι δύο με μία παράμετρο Uri.Type.

[DataSource.Kind="TripPin"]
shared TripPin.Feed = Value.ReplaceType(TripPinImpl, type function (url as Uri.Type) as any);

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents =  Value.ReplaceType(TripPinNavTable, type function (url as Uri.Type) as any);

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

Διαπιστευτήρια με διαδρομές.

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

Μπορείτε να δείτε οποιαδήποτε διαπιστευτήρια στο cache στον πίνακα Διαπιστευτήρια στο παράθυρο Έξοδος ερωτήματος M.

Καρτέλα

Ανάλογα με τον τύπο της αλλαγής, η τροποποίηση των παραμέτρων της συνάρτησης θα έχει ως πιθανό αποτέλεσμα ένα σφάλμα διαπιστευτηρίων.

Απλοποίηση της σύνδεσης

Τώρα θα απλοποιήσετε τη σύνδεσή σας καταργώντας τις παραμέτρους για τη συνάρτηση προέλευσης δεδομένων (TripPin.Contents). Θα καταργήσετε επίσης το shared προσδιοριστικό για TripPin.Feedτο και αφήστε το ως μια εσωτερική συνάρτηση μόνο.

Μία από τις φιλοσοφίες σχεδίασης του Power Query είναι να διατηρείτε το αρχικό παράθυρο διαλόγου προέλευσης δεδομένων όσο το δυνατόν απλούστερο. Εάν είναι δυνατό, θα πρέπει να παρέχετε στον χρήστη επιλογές στο επίπεδο Περιήγηση, αντί στο παράθυρο διαλόγου σύνδεσης. Εάν μια τιμή που παρέχεται από έναν χρήστη μπορεί να προσδιοριστεί μέσω προγραμματισμού, εξετάστε το ενδεχόμενο να την προσθέσετε ως το ανώτερο επίπεδο του πίνακα περιήγησης αντί για μια παράμετρο συνάρτησης.

Για παράδειγμα, κατά τη σύνδεση σε μια σχεσιακή βάση δεδομένων, ίσως χρειαστείτε ονόματα διακομιστή, βάσης δεδομένων και πίνακα. Αφού γνωρίζετε τον διακομιστή για να συνδεθείτε και έχουν δοθεί διαπιστευτήρια, μπορείτε να χρησιμοποιήσετε το API της βάσης δεδομένων για να λάβετε μια λίστα βάσεων δεδομένων και μια λίστα πινάκων που περιέχονται σε κάθε βάση δεδομένων. Σε αυτήν την περίπτωση, για να διατηρήσετε το αρχικό παράθυρο διαλόγου σύνδεσης όσο το δυνατόν απλούστερο, μόνο το όνομα διακομιστή θα πρέπει να είναι μια απαιτούμενη παράμετροςDatabase και Table θα είναι επίπεδα του πίνακα περιήγησής σας.

Δεδομένου ότι η υπηρεσία TripPin έχει ένα σταθερό τελικό σημείο διεύθυνσης URL, δεν χρειάζεται να ζητήσετε από τον χρήστη τιμές. Θα καταργήσετε την παράμετρο διεύθυνσης URL από τη συνάκρισή σας και θα ορίσετε μια μεταβλητή BaseUrl στη σύνδεσή σας.

BaseUrl = "https://services.odata.org/v4/TripPinService/";

[DataSource.Kind="TripPin", Publish="TripPin.Publish"]
shared TripPin.Contents = () => TripPinNavTable(BaseUrl) as table;

Θα διατηρήσετε τη συνάρτηση, αλλά δεν θα την TripPin.Feed κοινοποιείτε πλέον, δεν θα τη συσχετίζετε πλέον με ένα είδος προέλευσης δεδομένων και θα απλοποιείτε τη δήλωσή της. Από αυτό το σημείο και στο εξής, θα το χρησιμοποιείτε μόνο εσωτερικά μέσα σε αυτό το έγγραφο ενότητας.

TripPin.Feed = (url as text) =>
    let
        source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
        json = Json.Document(source)
    in
        json;

Εάν ενημερώσετε την TripPin.Contents() κλήση στο αρχείο σας TripPin.query.pq και την εκτελέσετε στο Visual Studio Code, θα δείτε ένα νέο μήνυμα διαπιστευτηρίων. Σημειώστε ότι υπάρχει τώρα μία μόνο τιμή Διαδρομή προέλευσης δεδομένων— TripPin.

Διαπιστευτήρια χωρίς διαδρομή.

Βελτίωση του πίνακα περιήγησης

Στην πρώτη εκμάθηση χρησιμοποιήσατε τις ενσωματωμένες OData συναρτήσεις για να συνδεθείτε στην υπηρεσία TripPin. Αυτό σας έδωσε έναν ωραίο πίνακα περιήγησης, με βάση το έγγραφο της υπηρεσίας TripPin, χωρίς άλλο κώδικα στην πλευρά σας. Η συνάρτηση OData.Feed έκανε αυτόματα τη σκληρή δουλειά για εσάς. Δεδομένου ότι το "σκληρύνετε" χρησιμοποιώντας το Web.Contents αντί για το OData.Feed, θα πρέπει να δημιουργήσετε ξανά αυτόν τον πίνακα περιήγησης μόνοι σας.

Περιήγηση OData.

Θα κάνετε τις ακόλουθες αλλαγές:

  1. Ορισμός λίστας στοιχείων για εμφάνιση στον πίνακα περιήγησης
  2. Να καταργηθεί η χρήση των συγκεκριμένων συναρτήσεων οντότητας (GetAirlineTables και GetAirportsTable)

Δημιουργία πίνακα περιήγησης από μια λίστα

Θα παραθέσετε τις οντότητες που θέλετε να εκθέσετε στον πίνακα περιήγησης και θα δημιουργήσετε την κατάλληλη διεύθυνση URL για πρόσβαση σε αυτές. Δεδομένου ότι όλες οι οντότητες βρίσκονται κάτω από την ίδια ριζική διαδρομή, θα μπορείτε να δημιουργήσετε αυτές τις διευθύνσεις URL δυναμικά.

Για να απλοποιήσετε το παράδειγμα, θα εκθέσετε μόνο τα τρία σύνολα οντοτήτων (Airlines, Airports, People), τα οποία θα εκτεθούν ως Πίνακες στην M και θα παραλείψετε το singleton (Me) που θα εκτεθεί ως Εγγραφή. Θα παραλείψετε να προσθέσετε τις συναρτήσεις μέχρι ένα μεταγενέστερο μάθημα.

RootEntities = {
    "Airlines",
    "Airports",
    "People"
};

Στη συνέχεια, ενημερώνετε τη συνάαρτησή σας TripPinNavTable για να δημιουργήσετε τον πίνακα μια στήλη κάθε φορά. Η στήλη [Δεδομένα] για κάθε οντότητα ανακτώνται με κλήση TripPin.Feed της πλήρους διεύθυνσης URL για την οντότητα.

TripPinNavTable = (url as text) as table =>
    let
        entitiesAsTable = Table.FromList(RootEntities, Splitter.SplitByNothing()),
        rename = Table.RenameColumns(entitiesAsTable, {{"Column1", "Name"}}),
        // Add Data as a calculated column
        withData = Table.AddColumn(rename, "Data", each TripPin.Feed(Uri.Combine(url, [Name])), Uri.Type),
        // 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;

Κατά τη δυναμική δημιουργία διαδρομών διεύθυνσης URL, βεβαιωθείτε ότι έχετε καθαρίσει πού βρίσκονται οι καθέτοι (/) σας! Σημειώστε ότι το Uri.Combine χρησιμοποιεί τους ακόλουθους κανόνες κατά τον συνδυασμό διαδρομών:

  • Όταν η παράμετρος relativeUri ξεκινά με /, θα αντικαταστήσει ολόκληρη τη διαδρομή της baseUri παραμέτρου
  • Εάν η παράμετρος relativeUri δεν ξεκινά με / και baseUri τελειώνει με /, η διαδρομή προσαρτάται
  • Εάν η παράμετρος relativeUri δεν ξεκινά με / και baseUri δεν τελειώνει με /, αντικαθίσταται το τελευταίο τμήμα της διαδρομής

Η παρακάτω εικόνα παρουσιάζει παραδείγματα σχετικά με αυτό:

Παράδειγμα Uri.Combine.

Κατάργηση των συναρτήσεων συγκεκριμένης οντότητας

Για να διευκολύνετε τη συντήρηση της σύνδεσής σας, θα καταργήσετε τις λειτουργίες μορφοποίησης για συγκεκριμένες οντότητες που χρησιμοποιήσατε στο προηγούμενο μάθημα,GetAirlineTables και GetAirportsTable. Αντί για αυτό, θα ενημερώσετε TripPin.Feed την για επεξεργασία της απόκρισης JSON με τρόπο που θα λειτουργεί για όλες τις οντότητές σας. Συγκεκριμένα, μπορείτε να πάρετε το value πεδίο από το ωφέλιμο φορτίο OData JSON που επιστρέφεται και να το μετατρέψετε από μια λίστα εγγραφών σε έναν πίνακα.

TripPin.Feed = (url as text) =>
    let
        source = Web.Contents(url, [ Headers = DefaultRequestHeaders ]),
        json = Json.Document(source),
        // The response is a JSON record - the data we want is a list of records in the "value" field
        value = json[value],
        asTable = Table.FromList(value, Splitter.SplitByNothing()),
        // expand all columns from the record
        fields = Record.FieldNames(Table.FirstValue(asTable, [Empty = null])),
        expandAll = Table.ExpandRecordColumn(asTable, "Column1", fields)
    in
        expandAll;

Σημείωμα

Ένα μειονέκτημα της χρήσης μιας γενικής προσέγγισης για την επεξεργασία των οντοτήτων σας είναι ότι χάνετε τις σωστές πληροφορίες μορφοποίησης και τύπου για τις οντότητές σας. Μια επόμενη ενότητα σε αυτό το πρόγραμμα εκμάθησης δείχνει πώς μπορείτε να επιβάλετε σχήμα σε κλήσεις REST API.

Συμπέρασμα

Σε αυτή την εκμάθηση, εκκαθαρίσατε και απλοποιήσατε τη σύνδεσή σας, διορθώνοντας την τιμή διαδρομής προέλευσης δεδομένων και προχωρώντας σε μια πιο ευέλικτη μορφή για τον πίνακα περιήγησης. Αφού ολοκληρώσετε αυτά τα βήματα (ή χρησιμοποιώντας το δείγμα κώδικα σε αυτόν τον κατάλογο), η TripPin.Contents συνάρτηση επιστρέφει έναν πίνακα περιήγησης στο Power BI Desktop.

Θαλασσοπόρος.

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

TripPin Part 5 - Σελιδοποίησης