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


Βελτιστοποίηση του Power Query κατά την ανάπτυξη στηλών πίνακα

Η απλότητα και η ευκολία χρήσης που επιτρέπουν στους χρήστες του Power BI να συγκεντρώνουν γρήγορα δεδομένα και να δημιουργούν ενδιαφέρουσες και ισχυρές αναφορές για τη λήψη έξυπνων επιχειρηματικών αποφάσεων, επιτρέπει επίσης στους χρήστες να δημιουργούν εύκολα ερωτήματα με κακή απόδοση. Αυτό συμβαίνει συχνά όταν υπάρχουν δύο πίνακες που σχετίζονται με τον τρόπο που ένα εξωτερικό κλειδί συσχετίζει πίνακες SQL ή λίστες του SharePoint. (Για την εγγραφή, αυτό το ζήτημα δεν αφορά συγκεκριμένα το SQL ή το SharePoint και παρουσιάζεται σε πολλά σενάρια εξαγωγής δεδομένων παρασκηνίου, ιδιαίτερα όπου το σχήμα είναι ρευστό και προσαρμόσιμο.) Δεν υπάρχει, επίσης, τίποτα εγγενώς κακό με την αποθήκευση δεδομένων σε ξεχωριστούς πίνακες που μοιράζονται ένα κοινό κλειδί. Στην πραγματικότητα, αυτό είναι ένα θεμελιώδες σύνολο της σχεδίασης και της κανονικοποίησης της βάσης δεδομένων. Ωστόσο, αυτό σημαίνει έναν καλύτερο τρόπο για να επεκτείνετε τη σχέση.

Εξετάστε το παρακάτω παράδειγμα μιας λίστας πελατών του SharePoint.

Κύρια λίστα πελατών του SharePoint.

Και στην ακόλουθη λίστα τοποθεσιών αναφέρεται.

Δευτερεύουσα λίστα πελατών του SharePoint.

Κατά την πρώτη σύνδεση στη λίστα, η θέση εμφανίζεται ως εγγραφή.

Εγγραφές κύριας θέσης.

Αυτά τα δεδομένα ανώτατου επιπέδου συλλέγονται μέσω μιας μοναδικής κλήσης HTTP στο SharePoint API (παραβλέποντας την κλήση μετα-δεδομένων), την οποία μπορείτε να δείτε σε οποιοδήποτε πρόγραμμα εντοπισμού σφαλμάτων web.

Μεμονωμένη κλήση HTTP στο πρόγραμμα εντοπισμού σφαλμάτων web.

Όταν αναπτύσσετε την εγγραφή, βλέπετε τα πεδία που συνενώνονται από τον δευτερεύοντα πίνακα.

Πεδία που ενώνονται από τον δευτερεύοντα πίνακα.

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

Μεμονωμένες κλήσεις στον δεύτερο πίνακα.

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

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

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

Όνομα εξωτερικού κλειδιού.

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

Φόρτωση δευτερεύοντος πίνακα με το εξωτερικό κλειδί αναγνωριστικού.

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

Αντιστοίχιση στηλών στην προεπισκόπηση.

Σε αυτό το παράδειγμα, μπορείτε να δείτε ότι το LocationId στην κύρια λίστα συμφωνεί με το Αναγνωριστικό στη δευτερεύουσα λίστα. Το περιβάλλον εργασίας χρήστη το μετονομάζει σε Location.Id για να κάνει το όνομα στήλης μοναδικό. Τώρα ας χρησιμοποιήσουμε αυτές τις πληροφορίες για να συγχωνεύσουμε τους πίνακες.

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

Χρησιμοποιήστε τη συγχώνευση ερωτημάτων ως νέων για να συνδυάσετε τα ερωτήματα.

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

Προεπισκόπηση συγχωνευμένων ερωτημάτων.

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

Συγχώνευση του αριστερού εξωτερικού συνδέσμου.

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

Αριστερό αποτέλεσμα εξωτερικού συνδέσμου.

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

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

Σημείωμα

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