Εφαρμογή σχέσεων πολλά προς πολλά στο Power BI Desktop

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

Screenshot of a many-to-many relationship in the Edit relationship pane.

Τι λύνει μια σχέση με πληθικότητα πολλά προς πολλά

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

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

Χρήση σχέσεων με πληθικότητα πολλά προς πολλά

Όταν ορίζετε μια σχέση μεταξύ δύο πινάκων στο Power BI, πρέπει να ορίσετε την πληθικότητα της σχέσης. Για παράδειγμα, η σχέση μεταξύ των ProductSales και Product, χρησιμοποιώντας τις στήλες ProductSales[ProductCode] και Product[ProductCode], θα ορισθεί ως Πολλά προς 1. Ορίζουμε τη σχέση με αυτόν τον τρόπο, επειδή κάθε προϊόν έχει πολλές πωλήσεις και η στήλη στον πίνακα Product (ProductCode) είναι μοναδική. Όταν ορίζετε μια σχέση πληθικότητας ως πολλά προς 1, 1 προς πολλά ή 1-1, το Power BI την επικυρώνει, ώστε η πληθικότητα που επιλέγετε να συμφωνεί με τα πραγματικά δεδομένα.

Για παράδειγμα, ρίξτε μια ματιά στο απλό μοντέλο σε αυτή την εικόνα:

Screenshot of ProductSales and Product table in Relationship view.

Τώρα, φανταστείτε ότι ο πίνακας Product εμφανίζει μόνο δύο γραμμές, όπως φαίνεται:

Screenshot of a Product table visual with two rows.

Φανταστείτε επίσης ότι ο πίνακας Sales έχει μόνο τέσσερις γραμμές, συμπεριλαμβανομένης μιας γραμμής για ένα προϊόν C. Εξαιτίας ενός σφάλματος ακεραιότητας αναφορών, η γραμμή προϊόντος C δεν υπάρχει στον πίνακα Προϊόν .

Screenshot of a Sales table visual with four rows.

Οι τιμές ProductName και Price (από τον πίνακα Product ), μαζί με το σύνολο Qty για κάθε προϊόν (από τον πίνακα ProductSales), θα εμφανίζονταν όπως φαίνεται παρακάτω:

Screenshot of a Visual displaying the product name, price, and quantity.

Όπως μπορείτε να δείτε στην προηγούμενη εικόνα, μια κενή γραμμή ProductName σχετίζεται με τις πωλήσεις για το προϊόν C. Αυτή η κενή γραμμή ευθύνεται για τα παρακάτω ζητήματα:

  • Οποιεσδήποτε γραμμές στον πίνακα ProductSales για τις οποίες δεν υπάρχει αντίστοιχη γραμμή στον πίνακα Product . Υπάρχει ένα ζήτημα ακεραιότητας αναφορών, όπως φαίνεται για το προϊόν C σε αυτό το παράδειγμα.

  • Οποιεσδήποτε γραμμές στον πίνακα ProductSales για τις οποίες η στήλη εξωτερικού κλειδιού είναι null.

Για αυτούς τους λόγους, η κενή γραμμή ευθύνεται και στις δύο περιπτώσεις για τις πωλήσεις όπου τα ProductName και Price είναι άγνωστα.

Ορισμένες φορές, οι πίνακες ενώνονται με δύο στήλες, αλλά καμία στήλη δεν είναι μοναδική. Για παράδειγμα, εξετάστε αυτούς τους δύο πίνακες:

  • Ο πίνακας Sales εμφανίζει δεδομένα πωλήσεων κατά State και κάθε γραμμή περιέχει το ποσό πωλήσεων για τον τύπο πώλησης σε αυτήν την πολιτεία. Στις πολιτείες περιλαμβάνονται οι πολιτείες CA, WA και TX.

    Screenshot of a Sales table displaying sales by state.

  • Ο πίνακας CityData εμφανίζει δεδομένα για πόλεις, συμπεριλαμβανομένου του πληθυσμού και της πολιτείας (όπως ca, WA και New York).

    Screenshot of a Sales table displaying city, state, and population.

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

Η προηγούμενη λύση

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

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

    • Ένας υπολογιζόμενος πίνακας (ορίζεται με χρήση παραστάσεων ανάλυσης δεδομένων [DAX]).
    • Ένας πίνακας που βασίζεται σε ένα ερώτημα που ορίζεται σε πρόγραμμα επεξεργασίας Power Query, ο οποίος θα μπορούσε να εμφανίσει τα μοναδικά αναγνωριστικά από έναν από τους πίνακες.
    • Το συνδυασμένο πλήρες σύνολο.
  • Στη συνέχεια, συσχετίστε τους δύο αρχικούς πίνακες με αυτόν τον νέο πίνακα χρησιμοποιώντας κοινές σχέσεις Πολλά προς 1 .

Θα μπορούσατε να αφήσετε ορατό τον πίνακα λύσης. Εναλλακτικά, μπορείτε να κρύψετε τον πίνακα ενδέχεται να μην εμφανίζεται στη λίστα Πεδία . Εάν αποκρύψετε τον πίνακα, οι σχέσεις Πολλά προς 1 συνήθως ορίζονται για φιλτράρισμα και στις δύο κατευθύνσεις και μπορείτε να χρησιμοποιήσετε το πεδίο Πολιτεία από οποιονδήποτε πίνακα. Το δεύτερο διασταυρούμενο φιλτράρισμα θα μεταβιβαστεί στον άλλο πίνακα. Αυτή η προσέγγιση φαίνεται στην παρακάτω εικόνα:

Screenshot of a hidden State table in Relationship view.

Μια απεικόνιση που εμφανίζει το State (από τον πίνακα CityData), μαζί με τον συνολικό Population και τις συνολικές Sales, θα έμοιαζε ως εξής:

Screenshot showing a table with State, Population, and Sales data.

Σημείωμα

Επειδή χρησιμοποιείται η πολιτεία από τον πίνακα CityData σε αυτήν τη λύση, παρατίθενται μόνο οι πολιτείες σε αυτόν τον πίνακα, επομένως, αποκλείεται το TX. Επίσης, σε αντίθεση με τις σχέσεις Πολλά προς 1 , ενώ η γραμμή συνόλων περιλαμβάνει όλες τις Sales (συμπεριλαμβανομένου του TX), τα στοιχεία δεν περιλαμβάνουν μια κενή γραμμή που να καλύπτει αυτές τις γραμμές που δεν αντιστοιχούν. Παρομοίως, καμία κενή γραμμή δεν θα καλύπτει τις Sales για τις οποίες υπάρχει μια τιμή null για τη State.

Ας υποθέσουμε ότι προσθέτετε επίσης το City σε αυτή την απεικόνιση. Παρόλο που ο πληθυσμός ανά πόλη είναι γνωστός, οι Sales που εμφανίζονται για τη στήλη City απλώς επαναλαμβάνουν τις Sales για την αντίστοιχη State. Αυτό το σενάριο συνήθως παρουσιάζεται όταν η ομαδοποίηση στηλών δεν σχετίζεται με κάποια συγκεντρωτική μέτρηση, όπως φαίνεται εδώ:

Screenshot of a table showing State and city population and sales.

Ας υποθέσουμε ότι ορίζετε τον νέο πίνακα Sales ως τον συνδυασμό όλων των Πολιτειών εδώ και ότι τον καθιερίζουμε στη λίστα Πεδία . Η ίδια απεικόνιση θα εμφανίζει το State (στον νέο πίνακα), τον συνολικό Population και τις συνολικές Sales:

Screenshot of a visual showing State, population, and sales visual.

Όπως μπορείτε να δείτε, θα συμπεριληφθεί το TX, με δεδομένα πωλήσεων αλλά άγνωστα δεδομένα Population και τη Νέα Υόρκη, με γνωστά δεδομένα Population αλλά χωρίς δεδομένα Sales. Αυτή η λύση δεν είναι η βέλτιστη και έχει πολλά προβλήματα. Για σχέσεις με πληθικότητα πολλά προς πολλά, αυτά τα προβλήματα αντιμετωπίζονται, όπως περιγράφεται στην επόμενη ενότητα.

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

Χρήση μιας σχέσης με πληθικότητα πολλά προς πολλά αντί για τη λύση

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

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

Για παράδειγμα, όταν δημιουργείτε μια απευθείας σχέση μεταξύ των CityData και Sales, όπου τα φίλτρα θα πρέπει να ρέουν από το CityData προς τις Πωλήσεις, το Power BI Desktop εμφανίζει το παράθυρο διαλόγου Επεξεργασία σχέσης :

Screenshot of the Edit relationship dialog box with Cardinality and Cross filter direction highlighted.

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

Screenshot of a State, Population, and Sales table.

Οι κύριες διαφορές μεταξύ των σχέσεων με πληθικότητα πολλά προς πολλά και των πιο συνηθισμένων σχέσεων πολλά προς 1 είναι οι εξής:

  • Οι τιμές που εμφανίζονται δεν περιλαμβάνουν μια κενή γραμμή που ευθύνεται για τις γραμμές που δεν συμφωνούν στον άλλο πίνακα. Επίσης, οι τιμές δεν αντιστοιχούν σε γραμμές όπου η στήλη που χρησιμοποιείται στη σχέση στον άλλο πίνακα είναι null.

  • Δεν μπορείτε να χρησιμοποιήσετε τη RELATED() συνάρτηση, επειδή μπορεί να σχετίζονται περισσότερες από μία γραμμές.

  • Η χρήση της ALL() συνάρτησης σε έναν πίνακα δεν καταργεί τα φίλτρα που εφαρμόζονται σε άλλους, σχετικούς πίνακες από μια σχέση πολλά-προς-πολλά. Στο προηγούμενο παράδειγμα, μια μέτρηση που έχει οριστεί όπως φαίνεται εδώ δεν θα καταργήσει τα φίλτρα στις στήλες του σχετικού πίνακα CityData:

    Screenshot of a script example. The example is, Sales total = Calculate(Sum('Sales'[Sales]), All('Sales')).

    Μια απεικόνιση που εμφανίζει τα δεδομένα State, Sales και Sales total θα είχε ως αποτέλεσμα αυτό το γραφικό:

    Screenshot of a table visual showing State, Sales, and Sales total resulting from the formula.

Με τις προηγούμενες διαφορές υπόψη, βεβαιωθείτε ότι οι υπολογισμοί που χρησιμοποιούν ALL(<Table>), όπως % του συνολικού αθροίσματος, επιστρέφουν τα αναμενόμενα αποτελέσματα.

Ζητήματα προς εξέταση και περιορισμοί

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

Οι παρακάτω προελεύσεις δυναμικών Σύνδεση (πολυδιάστατες) δεν μπορούν να χρησιμοποιηθούν με σύνθετα μοντέλα:

  • SAP HANA
  • SAP Business Warehouse
  • Υπηρεσίες ανάλυσης του SQL Server
  • Σημασιολογικά μοντέλα Power BI
  • Υπηρεσίες Ανάλυσης του Azure

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

Οι υπάρχοντες περιορισμοί στη χρήση του DirectQuery εξακολουθούν να ισχύουν κατά τη χρήση σχέσεων με πληθικότητα πολλά προς πολλά. Πολλοί από τους περιορισμούς υπάρχουν πλέον ανά πίνακα, ανάλογα με τη λειτουργία αποθήκευσης του πίνακα. Για παράδειγμα, μια υπολογιζόμενη στήλη σε έναν πίνακα που έχει εισαχθεί μπορεί να αναφέρεται σε άλλους πίνακες, αλλά μια υπολογιζόμενη στήλη σε έναν πίνακα DirectQuery εξακολουθεί να πρέπει να αναφέρεται μόνο σε στήλες στον ίδιο πίνακα. Άλλοι περιορισμοί ισχύουν για ολόκληρο το μοντέλο εάν οποιοιδήποτε πίνακες εντός του μοντέλου είναι DirectQuery. Για παράδειγμα, οι δυνατότητες Γρήγορη Πληροφορίες και Ε&Α δεν είναι διαθέσιμες σε ένα μοντέλο εάν οποιοσδήποτε πίνακας εντός του διαθέτει λειτουργία αποθήκευσης DirectQuery.

Για περισσότερες πληροφορίες σχετικά με τα σύνθετα μοντέλα και το DirectQuery, ανατρέξτε στα παρακάτω άρθρα: