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


Σύνταξη DAX

Αυτό το άρθρο περιγράφει τη σύνταξη και τις απαιτήσεις για τη γλώσσα παράστασης τύπου DAX.

Απαιτήσεις σύνταξης

Ένας τύπος DAX ξεκινά πάντα με το σύμβολο ίσον (=). Μετά το σύμβολο ίσον, μπορείτε να παρέχετε οποιαδήποτε παράσταση που αποδίδει μια ανυσματική τιμή ή μια παράσταση που μπορεί να μετατραπεί σε ανυσματική τιμή. Αυτές περιλαμβάνουν τα εξής:

  • Μια ανυσματική σταθερά ή παράσταση που χρησιμοποιεί έναν ανυσματική τελεστή (+,-,*,/,>=,...,&, ...)

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

  • Τελεστές, σταθερές και τιμές που παρέχονται ως μέρος μιας παράστασης.

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

    Οι περισσότερες συναρτήσεις DAX απαιτούν ένα ή περισσότερα ορίσματα, τα οποία μπορεί να περιλαμβάνουν πίνακες, στήλες, παραστάσεις και τιμές. Ωστόσο, ορισμένες συναρτήσεις, όπως η PI, δεν απαιτούν ορίσματα, αλλά απαιτούν πάντα παρενθέσεις για να υποδείξουν το όρισμα null. Για παράδειγμα, πρέπει να πληκτρολογείτε πάντα PI(), όχι PI. Μπορείτε επίσης να κάνετε ένθεση συναρτήσεων μέσα σε άλλες συναρτήσεις.

  • Εκφράσεις. Μια παράσταση μπορεί να περιέχει οποιοδήποτε ή όλα τα παρακάτω: τελεστές, σταθερές ή αναφορές σε στήλες.

Για παράδειγμα, οι ακόλουθοι τύποι είναι όλοι έγκυροι.

Τύπος Result
= 3 3
= "Sales" Πωλήσεις
= 'Πωλήσεις'[Ποσό] Εάν χρησιμοποιείτε αυτόν τον τύπο στον πίνακα Sales, θα λάβετε την τιμή της στήλης Amount στον πίνακα Sales για την τρέχουσα γραμμή.
= (0,03 *[Ποσό])

=0,03 * [Ποσό]
Τρία τοις εκατό της τιμής στη στήλη Amount του τρέχοντος πίνακα.

Παρόλο που αυτός ο τύπος μπορεί να χρησιμοποιηθεί για τον υπολογισμό ενός ποσοστού, το αποτέλεσμα δεν εμφανίζεται ως ποσοστό, εκτός εάν εφαρμόσετε μορφοποίηση στον πίνακα.
= PI() Η τιμή της σταθεράς pi.

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

Απαιτήσεις ονομασίας

Ένα μοντέλο δεδομένων συχνά περιέχει πολλούς πίνακες. Μαζί οι πίνακες και οι στήλες τους περιλαμβάνουν μια βάση δεδομένων που είναι αποθηκευμένη στη μηχανή ανάλυσης στη μνήμη (VertiPaq). Σε αυτή τη βάση δεδομένων, όλοι οι πίνακες πρέπει να έχουν μοναδικά ονόματα. Τα ονόματα των στηλών πρέπει επίσης να είναι μοναδικά σε κάθε πίνακα. Όλα τα ονόματα αντικειμένων δεν κάνουν διάκριση πεζών-κεφαλαίων, για παράδειγμα, τα ονόματα SALES και Sales θα αντιπροσωπεύουν τον ίδιο πίνακα.

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

Όταν χρησιμοποιείτε έναν πίνακα ή μια στήλη ως δεδομένα εισόδου σε μια συνάρτηση, πρέπει γενικά να προσκρούσετε το όνομα στήλης. Το πλήρως προσδιορισμένο όνομα μιας στήλης είναι το όνομα του πίνακα ακολουθούμενο από το όνομα της στήλης σε αγκύλες: για παράδειγμα, 'U.S. Sales'[Products]. Απαιτείται πάντα ένα πλήρως προσδιορισμένο όνομα όταν αναφέρεστε σε μια στήλη στα παρακάτω περιβάλλοντα:

  • Ως όρισμα στη συνάρτηση, VALUES

  • Ως όρισμα στις συναρτήσεις, ALL ή ALLEXCEPT

  • Σε ένα όρισμα φίλτρου για τις συναρτήσεις, CALCULATE ή CALCULATETABLE

  • Ως όρισμα στη συνάρτηση, RELATEDTABLE

  • Ως όρισμα σε οποιαδήποτε συνάρτηση χρονικής ευφυΐας

Ένα μη προσδιορισμένο όνομα στήλης είναι μόνο το όνομα της στήλης, μέσα σε αγκύλες: για παράδειγμα, [Sales Amount]. Για παράδειγμα, όταν αναφέρετε μια ανυσματική τιμή από την ίδια γραμμή του τρέχοντος πίνακα, μπορείτε να χρησιμοποιήσετε το μη προσδιορισμένο όνομα στήλης.

Εάν το όνομα ενός πίνακα περιέχει κενά διαστήματα, δεσμευμένες λέξεις-κλειδιά ή χαρακτήρες που δεν τίθενται, πρέπει να περικλείετε το όνομα του πίνακα σε μονά εισαγωγικά. Πρέπει επίσης να περικλείετε τα ονόματα πινάκων σε εισαγωγικά εάν το όνομα περιέχει χαρακτήρες εκτός της περιοχής αλφαριθμητικών χαρακτήρων ANSI, ανεξάρτητα από το αν οι τοπικές ρυθμίσεις σας υποστηρίζουν το σύνολο χαρακτήρων ή όχι. Για παράδειγμα, εάν ανοίξετε ένα βιβλίο εργασίας που περιέχει ονόματα πινάκων γραμμένα με κυριλλικούς χαρακτήρες, όπως "Таблица", το όνομα του πίνακα πρέπει να περικλείεται σε εισαγωγικά, παρόλο που δεν περιέχει κενά διαστήματα.

Σημείωμα

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

Πίνακες

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

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

Μετρήσεις

  • Τα ονόματα μετρήσεων πρέπει να βρίσκονται πάντα μέσα σε αγκύλες.

  • Τα ονόματα μετρήσεων μπορεί να περιέχουν κενά διαστήματα.

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

Στήλες

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

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

Δεσμευμένες λέξεις-κλειδιά

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

Σημείωμα

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

Ειδικοί χαρακτήρες

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

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

  • Χαρακτήρες στοιχείου ελέγχου

  • Οι ακόλουθοι χαρακτήρες δεν είναι έγκυροι στα ονόματα των αντικειμένων:

    .,;':/\*|? &%$!+=()[]{}<>

Παραδείγματα ονομάτων αντικειμένων

Ο παρακάτω πίνακας εμφανίζει παραδείγματα ονομάτων αντικειμένων:

Τύποι αντικειμένων Παραδείγματα Σχόλιο
Όνομα πίνακα Πωλήσεις Εάν το όνομα του πίνακα δεν περιέχει κενά διαστήματα ή άλλους ειδικούς χαρακτήρες, το όνομα δεν χρειάζεται να περικλείεται σε εισαγωγικά.
Όνομα πίνακα 'Canada Sales' Εάν το όνομα περιέχει κενά διαστήματα, στηλοθών ή άλλους ειδικούς χαρακτήρες, περικλείστε το όνομα σε μονά εισαγωγικά.
Πλήρως προσδιορισμένο όνομα στήλης Πωλήσεις[Ποσό] Το όνομα του πίνακα προηγείται του ονόματος στήλης και το όνομα της στήλης περικλείεται σε αγκύλες.
Πλήρως προσδιορισμένο όνομα μέτρησης Πωλήσεις[Κέρδος] Το όνομα του πίνακα προηγείται του ονόματος μέτρησης και το όνομα μέτρησης περικλείεται σε αγκύλες. Σε ορισμένα περιβάλλοντα, απαιτείται πάντα ένα πλήρως προσδιορισμένο όνομα.
Μη προσδιορισμένο όνομα στήλης [Ποσό] Το μη προσδιορισμένο όνομα είναι μόνο το όνομα της στήλης, σε αγκύλες. Περιβάλλοντα όπου μπορείτε να χρησιμοποιήσετε το μη προσδιορισμένο όνομα περιλαμβάνουν τύπους σε μια υπολογιζόμενη στήλη μέσα στον ίδιο πίνακα ή σε μια συνάρτηση συνάθροισης που σαρώνει τον ίδιο πίνακα.
Πλήρως προσδιορισμένη στήλη σε πίνακα με κενά διαστήματα 'Canada Sales'[Qty] Το όνομα πίνακα περιέχει κενά διαστήματα, επομένως πρέπει να περικλείεται σε μονά εισαγωγικά.

Άλλοι περιορισμοί

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

  • Οι τύποι και οι παραστάσεις DAX δεν μπορούν να τροποποιήσουν ή να εισαγάγουν μεμονωμένες τιμές σε πίνακες.

  • Δεν μπορείτε να δημιουργήσετε υπολογιζόμενες γραμμές χρησιμοποιώντας το DAX. Μπορείτε να δημιουργήσετε μόνο υπολογιζόμενες στήλες και μετρήσεις.

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

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

Τελεστές και σταθερές DAX

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

Τύπος τελεστή Σύμβολο και χρήση
Τελεστής παρένθεσης () σειρά προτεραιότητας και ομαδοποίηση ορισμάτων
Αριθμητικοί τελεστές + (πρόσθεση)

- (αφαίρεση/

σύμβολο)

* (πολλαπλασιασμός)

/ (διαίρεση)

^ (γδαρνισμός)
Τελεστές σύγκρισης = (ίσο με)

> (μεγαλύτερο από)

< (μικρότερο από)

>= (μεγαλύτερο από ή ίσο με)

<= (μικρότερο από ή ίσο με)

<> (δεν ισούται με)
Τελεστής συνένωσης κειμένου & (συνένωση)
Λογικοί τελεστές & (και)

|| (ή)

Τύποι δεδομένων

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

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

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

Σημαντικό

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

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

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

Ημερομηνία και ώρα

Το DAX αποθηκεύει τιμές ημερομηνίας και ώρας χρησιμοποιώντας τον τύπο δεδομένων ημερομηνίας/ώρας που χρησιμοποιείται από τον Microsoft SQL Server. Η μορφή ημερομηνίας/ώρας χρησιμοποιεί έναν αριθμό κινητής υποδιαστολής όπου οι τιμές ημερομηνίας αντιστοιχούν στο ακέραιο τμήμα που αντιπροσωπεύει τον αριθμό των ημερών από τις 30 Δεκεμβρίου 1899. Οι τιμές ώρας αντιστοιχούν στο δεκαδικό τμήμα μιας τιμής ημερομηνίας όπου οι Ώρες, τα λεπτά και τα δευτερόλεπτα αντιπροσωπεύονται από δεκαδικά κλάσματα της ημέρας. Οι συναρτήσεις ημερομηνίας και ώρας DAX μετατρέπουν σιωπηρά ορίσματα σε τύπο δεδομένων ημερομηνίας/ώρας.

Σημείωμα

Η ακριβής μέγιστη τιμή ημερομηνίας/ώρας που υποστηρίζεται από το DAX είναι 31 Δεκεμβρίου 9999 00:00:00.

Λεκτική σταθερά ημερομηνίας και ώρας

Ξεκινώντας από την έκδοση Αυγούστου 2021 του Power BI Desktop, οι τιμές ημερομηνίας και ημερομηνίας/ώρας DAX μπορούν να καθοριστούν ως λεκτική σταθερά στη μορφή dt"YYYY-MM-DD", dt"YYYY-MM-DDThh:mm:ss"ή dt"YYYY-MM-DD hh:mm:ss". Όταν καθορίζεται ως λεκτική σταθερά, δεν είναι απαραίτητη η χρήση των συναρτήσεων DATE, TIME, DATEVALUE, TIMEVALUE στην παράσταση.

Για παράδειγμα, η ακόλουθη παράσταση χρησιμοποιεί συναρτήσεις DATE και TIME για να φιλτράρει στο OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

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

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Σημείωμα

Η μορφή λεκτικής σταθεράς DAX και ημερομηνίας/ώρας δεν υποστηρίζεται σε όλες τις εκδόσεις των Power BI Desktop, Υπηρεσιών ανάλυσης και Power Pivot στο Excel. Οι νέες και ενημερωμένες λειτουργίες του DAX συνήθως παρουσιάζονται πρώτα στο Power BI Desktop και, στη συνέχεια, περιλαμβάνονται αργότερα στις Υπηρεσίες ανάλυσης και το Power Pivot στο Excel.