Πρόσθετοι υπολογισμοί χρονικής ευφυΐας
Υπάρχουν άλλες συναρτήσεις χρονικής ευφυΐας DAX που αφορούν την επιστροφή μιας μοναδικής ημερομηνίας. Θα μάθετε σχετικά με αυτές τις συναρτήσεις εφαρμόζοντάς τις σε δύο διαφορετικά σενάρια.
LASTDATE
Οι FIRSTDATE
συναρτήσεις DAX επιστρέφουν την πρώτη και την τελευταία ημερομηνία στο τρέχον περιβάλλον φίλτρου για την καθορισμένη στήλη ημερομηνιών.
Υπολογισμός νέων εμφανίσεων
Μια άλλη χρήση των συναρτήσεων χρονικής ευφυΐας είναι η μέτρηση νέων εμφανίσεων. Το παρακάτω παράδειγμα εμφανίζει τον τρόπο με τον οποίο μπορείτε να υπολογίσετε τον αριθμό νέων πελατών για μια χρονική περίοδο. Ένας νέος πελάτης συνυπολογίζεται στη χρονική περίοδο στην οποία πραγματοποίησε την πρώτη του αγορά.
Η πρώτη εργασία σας είναι να προσθέσετε την παρακάτω μέτρηση στον πίνακα Sales που μετρά τον αριθμό διακριτών πελατών από τη δημιουργία (LTD). Ο όρος από τη δημιουργία σημαίνει από την αρχή μέχρι την τελευταία ημερομηνία σε περιβάλλον φίλτρου. Μορφοποιήστε τη μέτρηση ως ακέραιο αριθμό χρησιμοποιώντας το διαχωριστικό χιλιάδων.
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
Προσθέστε τη μέτρηση Πελάτες LTD στην απεικόνιση πίνακα. Παρατηρήστε ότι παράγει ένα αποτέλεσμα διακριτών πελατών LTD μέχρι το τέλος κάθε μήνα.
Η DATESBETWEEN
συνάρτηση επιστρέφει έναν πίνακα που περιέχει μια στήλη ημερομηνιών που ξεκινά με μια δεδομένη ημερομηνία έναρξης και συνεχίζει μέχρι μια δεδομένη ημερομηνία λήξης. Όταν η ημερομηνία έναρξης είναι ΚΕΝΗ, θα χρησιμοποιήσει την πρώτη ημερομηνία στη στήλη ημερομηνίας. (Αντίστροφα, όταν η ημερομηνία λήξης είναι ΚΕΝΗ, θα χρησιμοποιήσει την τελευταία ημερομηνία στη στήλη ημερομηνίας.) Σε αυτήν την περίπτωση, η ημερομηνία λήξης προσδιορίζεται από τη συνάρτηση MAX, η οποία επιστρέφει την τελευταία ημερομηνία σε περιβάλλον φίλτρου. Επομένως, εάν σε περιβάλλον φίλτρου έχει την τιμή "Αύγουστος 2017", τότε η συνάρτηση MAX θα επιστρέψει τιμή "31 Αυγούστου 2017" και η DATESBETWEEN
συνάρτηση θα επιστρέψει όλες τις ημερομηνίες έως τις 31 Αυγούστου 2017.
Έπειτα, θα τροποποιήσετε τη μέτρηση μετονομάζοντάς τη σε Νέοι πελάτες και προσθέτοντας μια δεύτερη μεταβλητή για την αποθήκευση του πλήθους διακριτών πελατών πριν από τη χρονική περίοδο σε περιβάλλον φίλτρου. Ο RETURN
όρος αφαιρεί τώρα αυτή την τιμή από πελάτες LTD για να παράγει ένα αποτέλεσμα, το οποίο είναι ο αριθμός νέων πελατών στη χρονική περίοδο.
New Customers =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
VAR CustomersPrior =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MIN('Date'[Date]) - 1
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD - CustomersPrior
Για τη μεταβλητή CustomersPrior , παρατηρήστε ότι η DATESBETWEEN
συνάρτηση περιλαμβάνει ημερομηνίες μέχρι την πρώτη ημερομηνία σε περιβάλλον φίλτρου μείον μία. Καθώς το Microsoft Power BI αποθηκεύει εσωτερικά ημερομηνίες ως αριθμούς, μπορείτε να προσθέσετε ή αφαιρέσετε αριθμούς για να μετατοπίσετε μια ημερομηνία.
Υπολογισμοί στιγμιότυπου αναφοράς
Περιστασιακά, τα δεδομένα αποθηκεύονται ως στιγμιότυπα αναφοράς στον χρόνο. Συνήθη παραδείγματα περιλαμβάνουν επίπεδα αποθέματος ή υπόλοιπα λογαριασμών. Ένα στιγμιότυπο αναφοράς τιμών φορτώνεται στον πίνακα κατά περιόδους.
Όταν συνοψίζετε τιμές στιγμιότυπου αναφοράς (όπως επίπεδα αποθέματος), μπορείτε να συνοψίσετε τιμές σε οποιαδήποτε διάσταση εκτός από ημερομηνία. Η προσθήκη μετρήσεων επιπέδου αποθέματος σε κατηγορίες προϊόντων παράγει μια ουσιαστική σύνοψη, όμως η προσθήκη μετρήσεων επιπέδου αποθέματος σε ημερομηνίες δεν το κάνει. Η προσθήκη του χθεσινού επιπέδου αποθέματος στο σημερινό επίπεδο αποθέματος δεν είναι μια χρήσιμη λειτουργία για να εκτελέσετε (εκτός εάν θέλετε να υπολογίσετε τον μέσο όρο του αποτελέσματος).
Όταν συνοψίζετε πίνακες στιγμιοτύπων αναφοράς, οι τύποι μέτρησης μπορούν να βασίζονται σε συναρτήσεις χρονικής ευφυΐας DAX για την επιβολή ενός μοναδικού φίλτρου ημερομηνίας.
Στο παρακάτω παράδειγμα, θα εξερευνήσετε ένα σενάριο για την εταιρεία Adventure Works. Αλλάξτε σε προβολή μοντέλου και επιλέξτε το διάγραμμα μοντέλου Απόθεμα.
Παρατηρήστε ότι το διάγραμμα εμφανίζει τρεις πίνακες: Προϊόν, Ημερομηνία και Απόθεμα. Ο πίνακας Απόθεμα αποθηκεύει στιγμιότυπα αναφοράς υπολοίπων μονάδων για κάθε ημερομηνία και προϊόν. Ουσιαστικά, από τον πίνακα δεν απουσιάζουν ημερομηνίες και δεν υπάρχουν διπλότυπες καταχωρήσεις για οποιοδήποτε προϊόν στην ίδια ημερομηνία. Επίσης, η τελευταία εγγραφή στιγμιότυπου αναφοράς αποθηκεύεται για τις 15 Ιουνίου 2020.
Τώρα, αλλάξτε σε προβολή αναφοράς και επιλέξτε τη Σελίδα 2 της αναφοράς. Προσθέστε τη στήλη UnitsBalance του πίνακα Απόθεμα στην απεικόνιση πίνακα. Η προεπιλεγμένη σύνοψή της ορίζεται σε τιμές αθροίσματος.
Αυτή η διαμόρφωση απεικόνισης αποτελεί ένα παράδειγμα για το πως δεν πρέπει να συνοψίζετε μια τιμή στιγμιότυπου αναφοράς. Η προσθήκη καθημερινών υπολοίπων στιγμιότυπου αναφοράς δεν παράγει ένα ουσιαστικό αποτέλεσμα. Επομένως, αφαιρέστε το πεδίο UnitsBalance από την απεικόνιση πίνακα.
Τώρα, θα προσθέσετε μια μέτρηση στον πίνακα Απόθεμα που αθροίζει την τιμή UnitsBalanceγια μια μοναδική ημερομηνία. Η ημερομηνία θα είναι η τελευταία ημερομηνία κάθε χρονικής περιόδου. Επιτυγχάνεται με τη χρήση της συνάρτησης LASTDATE
. Μορφοποιήστε τη μέτρηση ως έναν ακέραιο αριθμό με το διαχωριστικό χιλιάδων.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
Σημείωση
Παρατηρήστε ότι ο τύπος μέτρησης χρησιμοποιεί τη SUM
συνάρτηση . Πρέπει να χρησιμοποιηθεί μια συνάρτηση συγκεντρωτικών αποτελεσμάτων (οι μετρήσεις δεν επιτρέπουν άμεσες αναφορές σε στήλες), όμως δεδομένου ότι υπάρχει μόνο μία γραμμή για κάθε προϊόν για κάθε ημερομηνία, η SUM
συνάρτηση θα λειτουργεί μόνο σε μία γραμμή.
Προσθέστε τη μέτρηση Διαθέσιμο απόθεμα στην απεικόνιση πίνακα. Η τιμή κάθε προϊόντος βασίζεται τώρα στο τελευταίο καταγεγραμμένο υπόλοιπο μονάδων για κάθε μήνα.
Η μέτρηση επιστρέφει ΚΕΝΑ για Ιούνιο 2020, καθώς δεν υπάρχει καμία εγγραφή για την τελευταία ημερομηνία τον Ιούνιο. Σύμφωνα με τα δεδομένα, δεν έχει συμβεί ακόμα.
Το φιλτράρισμα κατά την τελευταία ημερομηνία στο περιβάλλον φίλτρου παρουσιάζει εγγενή προβλήματα: Μια καταγεγραμμένη ημερομηνία δεν μπορεί να υπάρχει καθώς δεν έχει συμβεί ακόμα ή ίσως γιατί τα υπόλοιπα αποθεμάτων δεν έχουν καταγραφεί τα Σαββατοκύριακα.
Το επόμενο βήμα σας είναι να προσαρμόσετε τον τύπο μέτρησης για να προσδιορίσετε την τελευταία ημερομηνία που έχει ένα μη ΚΕΝΟ αποτέλεσμα και έπειτα να φιλτράρετε κατά αυτήν την ημερομηνία. Μπορείτε να επιτύχετε αυτήν την εργασία χρησιμοποιώντας τη LASTNONBLANK
συνάρτηση DAX.
Χρησιμοποιήστε τον παρακάτω ορισμό μέτρησης για να τροποποιήσετε τη μέτρηση Διαθέσιμο απόθεμα.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
Στην απεικόνιση πίνακας, παρατηρήστε τις τιμές για τον Ιούνιο 2020 και το σύνολο (που αντιπροσωπεύει ολόκληρο το έτος).
Η LASTNONBLANK
συνάρτηση είναι μια συνάρτηση επαναλήπτη. Επιστρέφει την τελευταία ημερομηνία που παράγει ένα μη ΚΕΝΟ αποτέλεσμα. Επιτυγχάνει αυτό το αποτέλεσμα με επανάληψη όλων των ημερομηνιών σε περιβάλλον φίλτρου σε φθίνουσα χρονολογική σειρά. (Αντίστροφα, η FIRSTNONBLANK
επαναλαμβάνεται σε αύξουσα χρονολογική σειρά.) Για κάθε ημερομηνία, αξιολογεί την παράσταση που μεταβιβάστηκε. Όταν αντιμετωπίζει ένα μη ΚΕΝΟ αποτέλεσμα, η συνάρτηση επιστρέφει την ημερομηνία. Αυτή η ημερομηνία τότε χρησιμοποιείται για το φιλτράρισμα της συνάρτησης CALCULATE
.
Σημείωση
Η LASTNONBLANK
συνάρτηση αξιολογεί την παράσταση σε περιβάλλον γραμμής. Η CALCULATE
συνάρτηση πρέπει να χρησιμοποιηθεί για τη μετάβαση του περιβάλλοντος γραμμής σε περιβάλλον φίλτρου για να αξιολογηθεί σωστά η παράσταση.
Θα πρέπει τώρα να κρύψετε στον πίνακα Απόθεμα τη στήλη UnitsBalance. Θα εμποδίσει τους συντάκτες αναφοράς από το να συνοψίζουν λανθασμένα στιγμιότυπα αναφορών υπόλοιπων μονάδων.