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


Εισαγωγή

Επισκόπηση

Το Microsoft Power Query παρέχει μια ισχυρή εμπειρία "λήψης δεδομένων" που περιλαμβάνει πολλές δυνατότητες. Μια βασική δυνατότητα του Power Query είναι το φιλτράρισμα και ο συνδυασμός, δηλαδή, ο συνδυασμός δεδομένων από μία ή περισσότερες πλούσιες συλλογές υποστηριζόμενων προελεύσεων δεδομένων. Κάθε τέτοιος συνδυασμός δεδομένων εκφράζεται χρησιμοποιώντας τη γλώσσα τύπων Power Query (ανεπίσημα γνωστή ως "M"). Το Power Query ενσωματώνει έγγραφα M σε μια μεγάλη ποικιλία προϊόντων της Microsoft, όπως τα Excel, Power BI, Υπηρεσίες ανάλυσης και Dataverse, για να επιτρέπει επαναλαμβανόμενο συνδυασμό δεδομένων.

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

  1. Η λεκτική δομή ορίζει το σύνολο των κειμένων που είναι λεκτικά έγκυρα.

  2. Οι τιμές, οι παραστάσεις, τα περιβάλλοντα και οι μεταβλητές, τα αναγνωριστικά και το μοντέλο αξιολόγησης αποτελούν τις βασικές έννοιες της γλώσσας.

  3. Η λεπτομερής προδιαγραφή των τιμών, τόσο στοιχειώδεις όσο και δομημένες, ορίζει τον τομέα προορισμού της γλώσσας.

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

  5. Το σύνολο τελεστών στην M ορίζει τα είδη των παραστάσεων που μπορούν να δημιουργηθούν.

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

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

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

  9. Οι παραστάσεις If υποστηρίζουν την αξιολόγηση υπό όρους.

  10. Οι ενότητες παρέχουν έναν απλό μηχανισμό αρθρωτής δομής. (Οι ενότητες δεν αξιοποιούνται ακόμα από το Power Query.)

  11. Τέλος, μια ενοποιημένη γραμματική συλλέγει τα τμήματα γραμματικής από όλες τις άλλες ενότητες αυτού του εγγράφου σε έναν ενιαίο πλήρη ορισμό.

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

Παραστάσεις και τιμές

Η κεντρική κατασκευή στην M είναι η παράσταση. Μια παράσταση μπορεί να αξιολογηθεί (υπολογιστεί), αποδίδοντας μια μοναδική τιμή.

Παρόλο που πολλές τιμές μπορούν να εγγραφούν κυριολεκτικά ως παράσταση, μια τιμή δεν είναι παράσταση. Για παράδειγμα, η παράσταση 1 αποδίδει την τιμή 1. Οι παραστάσεις 1+1 αξιολογούνται στην τιμή 2. Αυτή η διάκριση είναι λεπτή, αλλά σημαντική. Οι παραστάσεις είναι συνταγές για αξιολόγηση. οι τιμές είναι τα αποτελέσματα της αξιολόγησης.

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

  • Μια τιμή primitive είναι μια μονομερής τιμή, όπως ένας αριθμός, λογική, κείμενο ή null. Μια τιμή null μπορεί να χρησιμοποιηθεί για να υποδείξει την απουσία οποιωνδήποτε δεδομένων.

    123                  // A number
    true                 // A logical
    "abc"                // A text
    null                 // null value
    
  • Μια τιμή λίστας είναι μια ταξινομημένη ακολουθία τιμών. Η M υποστηρίζει λίστες άπειρου μήκους, αλλά εάν έχουν συνταχθεί ως λεκτικές σταθερές, οι λίστες έχουν σταθερό μήκος. Οι χαρακτήρες { αγκίστρι και } δηλώνουν την αρχή και το τέλος μιας λίστας.

    {123, true, "A"}     // list containing a number, a logical, and 
                          //     a text 
    {1, 2, 3}            // list of three numbers 
    
  • Μια εγγραφή είναι ένα σύνολο πεδίων. Ένα πεδίο είναι ένα ζεύγος ονόματος/τιμής, όπου το όνομα είναι μια τιμή κειμένου που είναι μοναδική μέσα στην εγγραφή του πεδίου. Η σύνταξη λεκτικής σταθεράς για τις τιμές εγγραφών επιτρέπει στα ονόματα να γράφονται χωρίς εισαγωγικά, μια φόρμα που αναφέρεται επίσης ως αναγνωριστικά. Τα παρακάτω δείχνουν μια εγγραφή που περιέχει τρία πεδία με την ονομασία "A", "B" και "C", τα οποία έχουν τιμές 1, 2και 3.

    [ 
          A = 1,  
          B = 2,  
          C = 3 
    ]
    
  • Ένας πίνακας είναι ένα σύνολο τιμών οργανωμένων σε στήλες (οι οποίες αναγνωρίζονται με βάση το όνομα) και γραμμές. Δεν υπάρχει σύνταξη λεκτικής σταθεράς για τη δημιουργία ενός πίνακα, αλλά υπάρχουν πολλές τυπικές συναρτήσεις που μπορούν να χρησιμοποιηθούν για τη δημιουργία πινάκων από λίστες ή εγγραφές.

    Για παράδειγμα:

    #table( {"A", "B"}, { {1, 2}, {3, 4} } ) 
    

    Αυτό δημιουργεί έναν πίνακα με το ακόλουθο σχήμα:

    Image of an example table in the M formula language.

  • Μια συνάρτηση είναι μια τιμή η οποία, όταν καλείται με ορίσματα, παράγει μια νέα τιμή. Μια συνάρτηση συντάσσεται παραθέτοντας τις παραμέτρους της συνάρτησης μέσα σε παρένθεση, ακολουθούμενη από το σύμβολο =>μετάβασης , ακολουθούμενο από την παράσταση που ορίζει τη συνάρτηση. Αυτή η παράσταση συνήθως αναφέρεται στις παραμέτρους (ονομαστικά).

    (x, y) => (x + y) / 2`
    

Αξιολόγηση

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

Εάν έχετε γράψει τύπους σε ένα υπολογιστικό φύλλο όπως το Excel, ενδέχεται να αναγνωρίσετε τους τύπους στο αριστερό αποτέλεσμα των τιμών στα δεξιά κατά τον υπολογισμό τους:

Image of the formulas on the right resulting in the values on the left.

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

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

[  
    A1 = A2 * 2,  
    A2 = A3 + 1,  
    A3 = 1  
]

Η παραπάνω παράσταση ισοδυναμεί με την παρακάτω (στο ότι και οι δύο έχουν ως αποτέλεσμα ίσες τιμές):

[  
    A1 = 4,  
    A2 = 2,  
    A3 = 1  
]

Οι εγγραφές μπορούν να περιέχονται, ή να είναι ένθετες, μέσα σε άλλες εγγραφές. Μπορείτε να χρησιμοποιήσετε τον τελεστή αναζήτησης ([]) για να αποκτήσετε πρόσβαση στα πεδία μιας εγγραφής βάσει ονόματος. Για παράδειγμα, η ακόλουθη εγγραφή έχει ένα πεδίο με την ονομασία Sales που περιέχει μια εγγραφή και ένα πεδίο με την ονομασία Total που αποκτά πρόσβαση στα FirstHalf πεδία και SecondHalf της εγγραφής Sales :

[  
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ], 
    Total = Sales[FirstHalf] + Sales[SecondHalf] 
]

Η παραπάνω παράσταση ισοδυναμεί με την παρακάτω κατά την αξιολόγησή της:

[  
    Sales = [ FirstHalf = 1000, SecondHalf = 1100 ], 
    Total = 2100 
]

Οι εγγραφές μπορούν επίσης να περιέχονται σε λίστες. Μπορείτε να χρησιμοποιήσετε τον τελεστή δείκτη θέσης ({}) για να αποκτήσετε πρόσβαση σε ένα στοιχείο σε μια λίστα βάσει του αριθμητικού δείκτη του. Οι τιμές μέσα σε μια λίστα αναφέρονται στη χρήση δείκτη με βάση το μηδέν από την αρχή της λίστας. Για παράδειγμα, τα ευρετήρια 0 και 1 χρησιμοποιούνται για αναφορά στο πρώτο και το δεύτερο στοιχείο στην παρακάτω λίστα:

[ 
    Sales =  
        {  
            [  
                Year = 2007,  
                FirstHalf = 1000,  
                SecondHalf = 1100, 
                Total = FirstHalf + SecondHalf // 2100 
            ], 
            [  
                Year = 2008,  
                FirstHalf = 1200,  
                SecondHalf = 1300, 
                Total = FirstHalf + SecondHalf // 2500 
            ]  
        }, 
    TotalSales = Sales{0}[Total] + Sales{1}[Total] // 4600 
]

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

Συναρτήσεις

Στην M, μια συνάρτηση είναι μια αντιστοίχιση από ένα σύνολο τιμών εισόδου σε μία μόνο τιμή εξόδου. Μια συνάρτηση συντάσσεται πρώτα ονομάζοντας το απαιτούμενο σύνολο τιμών εισόδου (τις παραμέτρους στη συνάρτηση) και, στη συνέχεια, παρέχοντας μια παράσταση που υπολογίζει το αποτέλεσμα της συνάρτησης χρησιμοποιώντας αυτές τις τιμές εισόδου (το σώμα της συνάρτησης) ακολουθώντας το σύμβολο goes-to (=>). Για παράδειγμα:

(x) => x + 1                    // function that adds one to a value 
(x, y) =>  x + y                // function that adds two values

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

[ 
    Add = (x, y) => x + y,
    OnePlusOne = Add(1, 1),     // 2 
    OnePlusTwo = Add(1, 2)      // 3
]

Βιβλιοθήκη

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

Number.E                        // Euler's number e (2.7182...) 
Text.PositionOf("Hello", "ll")  // 2

Τελεστές

Η M περιλαμβάνει ένα σύνολο τελεστών που μπορούν να χρησιμοποιηθούν σε παραστάσεις. Οι τελεστές εφαρμόζονται στους τελεστέους για να διαμορφώσουν συμβολικές παραστάσεις. Για παράδειγμα, στην παράσταση 1 + 2 οι αριθμοί 1 και 2 είναι τελεστέοι και ο τελεστής είναι ο τελεστής πρόσθεσης (+).

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

1 + 2                   // numeric addition: 3 
#time(12,23,0) + #duration(0,0,2,0) 
                        // time arithmetic: #time(12,25,0)

Ένα άλλο παράδειγμα ενός τελεστή με σημασία που εξαρτάται από τον τελεστέο είναι ο τελεστής συνδυασμού (&):

"A" & "BC"              // text concatenation: "ABC" 
{1} & {2, 3}            // list concatenation: {1, 2, 3} 
[ a = 1 ] & [ b = 2 ]   // record merge: [ a = 1, b = 2 ]

Σημειώστε ότι ορισμένοι τελεστές δεν υποστηρίζουν όλους τους συνδυασμούς τιμών. Για παράδειγμα:

1 + "2"  // error: adding number and text isn't supported

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

Μετα-δεδομένα

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

Κάθε τιμή έχει μια εγγραφή μετα-δεδομένων. Εάν η τιμή της εγγραφής μετα-δεδομένων δεν έχει καθοριστεί, τότε η εγγραφή μετα-δεδομένων είναι κενή (δεν έχει πεδία).

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

Μια τιμή y εγγραφής μετα-δεδομένων συσχετίζεται με μια υπάρχουσα τιμή x με χρήση της σύνταξης x meta y. Για παράδειγμα, ο ακόλουθος κώδικας συσχετίζει μια εγγραφή μετα-δεδομένων με Rating τα πεδία και Tags με την τιμή "Mozart"κειμένου :

"Mozart" meta [ Rating = 5, Tags = {"Classical"} ]

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

("Mozart" meta [ Rating = 5 ]) meta [ Tags = {"Classical"} ] 
"Mozart" meta ([ Rating = 5 ] & [ Tags = {"Classical"} ])

Είναι δυνατή η πρόσβαση σε μια εγγραφή μετα-δεδομένων για μια δεδομένη τιμή χρησιμοποιώντας τη συνάρτηση Value.Metadata . Στο παρακάτω παράδειγμα, η παράσταση στο ComposerRating πεδίο αποκτά πρόσβαση στην εγγραφή μετα-δεδομένων της τιμής στο Composer πεδίο και, στη συνέχεια, αποκτά πρόσβαση στο Rating πεδίο της εγγραφής μετα-δεδομένων.

[ 
    Composer = "Mozart" meta [ Rating = 5, Tags = {"Classical"} ], 
    ComposerRating = Value.Metadata(Composer)[Rating] // 5
]

Παράσταση Let

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

let 
    Sales2007 =  
        [  
            Year = 2007,  
            FirstHalf = 1000,  
            SecondHalf = 1100, 
            Total = FirstHalf + SecondHalf // 2100 
        ], 
    Sales2008 =  
        [  
            Year = 2008,  
            FirstHalf = 1200,  
            SecondHalf = 1300, 
            Total = FirstHalf + SecondHalf // 2500 
        ] 
  in Sales2007[Total] + Sales2008[Total] // 4600

Το αποτέλεσμα της παραπάνω παράστασης είναι μια αριθμητική τιμή (4600) που υπολογίζεται από τις τιμές που είναι συνδεδεμένες με τα ονόματα Sales2007 και Sales2008.

Παράσταση If

Η if παράσταση επιλέγει μεταξύ δύο παραστάσεων που βασίζονται σε μια λογική συνθήκη. Για παράδειγμα:

if 2 > 1 then
    2 + 2
else  
    1 + 1

Η πρώτη παράσταση (2 + 2) επιλέγεται εάν η λογική παράσταση (2 > 1) είναι true και η δεύτερη παράσταση (1 + 1) επιλέγεται εάν είναι false. Η επιλεγμένη παράσταση (σε αυτή την περίπτωση 2 + 2) αξιολογείται και μετατρέπεται στο αποτέλεσμα της if παράστασης (4).

Σφάλματα

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

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

let Sales = 
    [ 
        Revenue = 2000, 
        Units = 1000, 
        UnitPrice = if Units = 0 then error "No Units"
                    else Revenue / Units 
    ], 
    UnitPrice = try Number.ToText(Sales[UnitPrice])
in "Unit Price: " & 
    (if UnitPrice[HasError] then UnitPrice[Error][Message]
    else UnitPrice[Value])

Το παραπάνω παράδειγμα αποκτά πρόσβαση στο Sales[UnitPrice] πεδίο και μορφοποιεί την τιμή που παράγει το αποτέλεσμα:

"Unit Price: 2"

Εάν το Units πεδίο ήταν μηδέν, τότε το UnitPrice πεδίο θα είχε προκαλέσει ένα σφάλμα, το οποίο θα είχε αντιμετωπιστεί από την try. Η τιμή που προκύπτει τότε θα ήταν:

"No Units"

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

try error "negative unit count"

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

[ 
    HasError = true, 
    Error = 
        [ 
            Reason = "Expression.Error", 
            Message = "negative unit count", 
            Detail = null 
        ] 
]

Μια συνηθισμένη περίπτωση είναι η αντικατάσταση σφαλμάτων με προεπιλεγμένες τιμές. Η try παράσταση μπορεί να χρησιμοποιηθεί με έναν προαιρετικό otherwise όρο για να επιτύχει ακριβώς αυτό σε μια συμπαγή μορφή:

try error "negative unit count" otherwise 42 
// 42