Χρήση μεταβλητών για τη βελτίωση των τύπων σας DAX

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

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

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

Ας ξεκινήσουμε με τον παρακάτω ορισμό μέτρησης.

Sales YoY Growth % =
DIVIDE(
    ([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)

Η μέτρηση παράγει το σωστό αποτέλεσμα, όμως ας δούμε τώρα πώς μπορεί να βελτιωθεί.

Βελτίωση απόδοσης

Παρατηρήστε ότι ο τύπος επαναλαμβάνει την παράσταση που υπολογίζει την "ίδια περίοδο το προηγούμενο έτος". Αυτός ο τύπος είναι αναποτελεσματικός, καθώς απαιτεί από το Power BI να αξιολογήσει την ίδια παράσταση δύο φορές. Ο ορισμός μέτρησης μπορεί να καταστεί πιο αποτελεσματικός χρησιμοποιώντας μια μεταβλητή, τη VAR.

Ο παρακάτω ορισμός μέτρησης αντιπροσωπεύει μια βελτίωση. Χρησιμοποιεί μια παράσταση για να αναθέσει το αποτέλεσμα "ίδια περίοδος το προηγούμενο έτος" σε μια μεταβλητή με την ονομασία SalesPriorYear. Η μεταβλητή τότε χρησιμοποιείται δύο φορές στην παράσταση RETURN.

Sales YoY Growth % =
VAR SalesPriorYear =
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
    DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)

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

Βελτίωση αναγνωσιμότητας

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

Απλοποίηση εντοπισμού σφαλμάτων

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

Ο παρακάτω ορισμός μέτρησης επιστρέφει μόνο τη μεταβλητή SalesPriorYear . Παρατηρήστε πώς απενεργοποιεί την προβλεπόμενη παράσταση RETURN. Αυτή η τεχνική σάς επιτρέπει να την επαναφέρετε όταν ολοκληρωθεί ο εντοπισμός σφαλμάτων.

Sales YoY Growth % =
VAR SalesPriorYear =
    CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
    --DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
    SalesPriorYear

Μείωση πολυπλοκότητας

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

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

Εξετάστε τον παρακάτω ορισμό υπολογιζόμενης στήλης που προστέθηκε στον πίνακα Υποκατηγορία . Αξιολογεί μια κατάταξη για κάθε υποκατηγορία προϊόντος με βάση τις τιμές στήλης Πωλήσεις υποκατηγορίας.

Subcategory Sales Rank =
COUNTROWS(
    FILTER(
        Subcategory,
        EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
    )
) + 1

Η συνάρτηση EARLIER χρησιμοποιείται για να αναφερθεί στην τιμή στήλης Πωλήσεις υποκατηγορίας στο τρέχον περιβάλλον γραμμής.

Ο ορισμός υπολογιζόμενης στήλης μπορεί να βελτιωθεί χρησιμοποιώντας μια μεταβλητή αντί για τη συνάρτηση EARLIER. Η μεταβλητή CurrentSubcategorySales αποθηκεύει την τιμή στήλης Πωλήσεις υποκατηγορίαςστο τρέχον περιβάλλον γραμμής και η παράσταση RETURN την χρησιμοποιεί εντός ενός τροποποιημένου περιβάλλοντος φίλτρου.

Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
    COUNTROWS(
        FILTER(
            Subcategory,
            CurrentSubcategorySales < Subcategory[Subcategory Sales]
        )
    ) + 1