Εισαγωγή
Το Microsoft Power Query παρέχει μια ισχυρή εμπειρία "λήψης δεδομένων" που περιλαμβάνει πολλές δυνατότητες. Μια βασική δυνατότητα του Power Query είναι το φιλτράρισμα και ο συνδυασμός, δηλαδή, ο συνδυασμός δεδομένων από μία ή περισσότερες πλούσιες συλλογές υποστηριζόμενων προελεύσεων δεδομένων. Κάθε τέτοιος συνδυασμός δεδομένων εκφράζεται χρησιμοποιώντας τη γλώσσα τύπων Power Query (ανεπίσημα γνωστή ως "M"). Το Power Query ενσωματώνει έγγραφα M σε μια μεγάλη ποικιλία προϊόντων της Microsoft, όπως τα Excel, Power BI, Υπηρεσίες ανάλυσης και Dataverse, για να επιτρέπει επαναλαμβανόμενο συνδυασμό δεδομένων.
Αυτό το έγγραφο παρέχει την προδιαγραφή για την M. Μετά από μια σύντομη εισαγωγή που στοχεύει στη δημιουργία μιας πρώτης διαίσθησης και εξοικείωσης με τη γλώσσα, το έγγραφο καλύπτει τη γλώσσα ακριβώς σε διάφορα προοδευτικά βήματα:
Η λεκτική δομή ορίζει το σύνολο των κειμένων που είναι λεκτικά έγκυρα.
Οι τιμές, οι παραστάσεις, τα περιβάλλοντα και οι μεταβλητές, τα αναγνωριστικά και το μοντέλο αξιολόγησης σχηματίζουν τις βασικές έννοιες της γλώσσας.
Η λεπτομερής προδιαγραφή των τιμών, τόσο στοιχειώδεις όσο και δομημένες, ορίζει τον τομέα προορισμού της γλώσσας.
Οι τιμές έχουν τύπους, οι ίδιοι ένα ειδικό είδος τιμής, που χαρακτηρίζουν αμφότερα τα βασικά είδη τιμών και διαθέτουν πρόσθετα μετα-δεδομένα που αφορούν ειδικά τα σχήματα δομημένων τιμών.
Το σύνολο των τελεστών που στην M ορίζει τα είδη των παραστάσεων που μπορούν να σχηματιστούν.
Functions, ένα άλλο είδος ειδικών τιμών, παρέχουν τη βάση για μια πλούσια τυπική βιβλιοθήκη για την M και επιτρέπουν την προσθήκη νέων αφηρημένων εννοιών.
Σφάλματα μπορεί να προκύψουν κατά την εφαρμογή τελεστών ή συναρτήσεων κατά την αξιολόγηση παράστασης. Παρόλο που τα σφάλματα δεν είναι τιμές, υπάρχουν τρόποι για να να χειριστείτε σφάλματα που αντιστοιχίζει σφάλματα στις τιμές.
παράσταση Let επιτρέπουν την εισαγωγή ορισμών υιοθέτησής που χρησιμοποιούνται για τη δημιουργία σύνθετων παραστάσεων σε μικρότερα βήματα.
οι παραστάσεις If υποστηρίζουν την αξιολόγηση υπό όρους.
Ενότητες παρέχουν έναν απλό μηχανισμό αρθρωτής δομής. (Οι ενότητες δεν αξιοποιούνται ακόμα από το Power Query.)
Τέλος, μια ενοποιημένη γραμματική συλλέγει τα τμήματα γραμματικής από όλες τις άλλες ενότητες αυτού του εγγράφου σε έναν ενιαίο πλήρη ορισμό.
Για τους θεωρητικούς της γλώσσας υπολογιστή: η γλώσσα τύπων που καθορίζεται σε αυτό το έγγραφο είναι μια κυρίως καθαρή, υψηλής τάξης, δυναμικής πληκτρολόγησης, λειτουργική γλώσσα μερικής τεμπέλας.
Η κεντρική κατασκευή στην M είναι η παράσταση. Μια παράσταση μπορεί να αξιολογηθεί (υπολογιστεί), αποδίδοντας μια μοναδική τιμή .
Παρόλο που πολλές τιμές μπορούν να εγγραφούν κυριολεκτικά ως παράσταση, μια τιμή δεν είναι παράσταση. Για παράδειγμα, η παράσταση 1
αποδίδει την τιμή 1; Η 1+1
παραστάσεων αποδίδει την τιμή 2. Αυτή η διάκριση είναι λεπτή, αλλά σημαντική. Οι παραστάσεις είναι συνταγές για αξιολόγηση. οι τιμές είναι τα αποτελέσματα της αξιολόγησης.
Τα παρακάτω παραδείγματα απεικονίζουν τα διαφορετικά είδη τιμών που είναι διαθέσιμα στην M. Ως σύμβαση, μια τιμή συντάσσεται χρησιμοποιώντας τη μορφή λεκτικής σταθεράς στην οποία θα εμφανίζονταν σε μια παράσταση που αποδίδει ακριβώς αυτή την τιμή. (Σημειώστε ότι η //
υποδεικνύει την έναρξη ενός σχολίου που συνεχίζει μέχρι το τέλος της γραμμής.)
Μια στοιχειώδης τιμή είναι τιμή ενός τμήματος, όπως ένας αριθμός, λογική τιμή, κείμενο ή τιμή 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} } )
Αυτό δημιουργεί έναν πίνακα με το ακόλουθο σχήμα:
Μια συνάρτηση είναι μια τιμή η οποία, όταν καλείται με ορίσματα, παράγει μια νέα τιμή. Μια συνάρτηση συντάσσεται παραθέτοντας τις παραμέτρους της συνάρτησης σε παρενθέσεις, ακολουθούμενη από το σύμβολο
=>
, ακολουθούμενο από την παράσταση που ορίζει τη συνάρτηση. Αυτή η παράσταση συνήθως αναφέρεται στις παραμέτρους (ονομαστικά).(x, y) => (x + y) / 2`
Το μοντέλο αξιολόγησης της γλώσσας M διαμορφώνεται σύμφωνα με το μοντέλο αξιολόγησης που βρίσκεται συνήθως σε υπολογιστικά φύλλα, όπου η σειρά των υπολογισμών μπορεί να προσδιοριστεί με βάση τις εξαρτήσεις μεταξύ των τύπων στα κελιά.
Εάν έχετε γράψει τύπους σε ένα υπολογιστικό φύλλο όπως το Excel, ενδέχεται να αναγνωρίσετε τους τύπους στο αριστερό αποτέλεσμα των τιμών στα δεξιά κατά τον υπολογισμό τους:
Στην 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
Οι παραστάσεις που, κατά την αξιολόγηση τους, αντιμετωπίζουν συνθήκες μη καθορισμένου τελεστή καταλήγουν σε σφαλμάτων.
metadata είναι πληροφορίες σχετικά με μια τιμή που συσχετίζεται με μια τιμή. Τα μετα-δεδομένα αντιπροσωπεύονται ως τιμή εγγραφής, η οποία ονομάζεται εγγραφή μετα-δεδομένων . Τα πεδία μιας εγγραφής μετα-δεδομένων μπορούν να χρησιμοποιηθούν για την αποθήκευση των μετα-δεδομένων για μια τιμή.
Κάθε τιμή έχει μια εγγραφή μετα-δεδομένων. Εάν η τιμή της εγγραφής μετα-δεδομένων δεν έχει καθοριστεί, τότε η εγγραφή μετα-δεδομένων είναι κενή (δεν έχει πεδία).
Οι εγγραφές μετα-δεδομένων παρέχουν έναν τρόπο συσχέτισης πρόσθετων πληροφοριών με οποιοδήποτε είδος τιμής με διακριτικό τρόπο. Η συσχέτιση μιας εγγραφής μετα-δεδομένων με μια τιμή δεν αλλάζει την τιμή ή τη συμπεριφορά της.
Μια τιμή εγγραφής μετα-δεδομένων 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
επιτρέπει σε ένα σύνολο τιμών να υπολογιστούν, να τους εκχωρηθούν ονόματα και, στη συνέχεια, να χρησιμοποιηθούν σε μια επόμενη παράσταση που ακολουθεί το 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 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