Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Ισχύει για:
Υπολογιζόμενη στήλη
Υπολογιζόμενος πίνακας
Μέτρηση
υπολογισμού απεικόνισης
Σημείωση
Αυτή η συνάρτηση δεν συνιστάται να χρησιμοποιηθεί σε υπολογισμούς απεικονίσεων καθώς πιθανώς επιστρέφει ανούσια αποτελέσματα.
Για εισαγωγή στήλης ημερομηνίας, επιστρέφει έναν πίνακα που περιέχει μια στήλη ημερομηνιών που ξεκινά με μια καθορισμένη ημερομηνία έναρξης και συνεχίζει για τον καθορισμένο αριθμό και τύπο των διαστημάτων ημερομηνίας.
Για εισαγωγή ημερολογίου, επιστρέφει έναν πίνακα που ξεκινά με μια καθορισμένη ημερομηνία έναρξης και συνεχίζει για τον καθορισμένο αριθμό και τύπο των διαστημάτων ημερομηνίας. Ο πίνακας περιέχει όλες τις κύριες στήλες με ετικέτες και στήλες που σχετίζονται με όλο τον χρόνο.
Αυτή η συνάρτηση είναι κατάλληλη για μεταβίβαση ως φίλτρου στη συνάρτηση CALCULATE. Χρησιμοποιήστε την για να φιλτράρετε μια παράσταση κατά τυπικά διαστήματα ημερομηνιών, όπως ημέρες, μήνες, τρίμηνα ή έτη.
Σύνταξη
DATESINPERIOD(<dates or calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])
Παραμέτρους
| Όρος | Ορισμός |
|---|---|
dates or calendar |
Μια στήλη που περιέχει είτε ημερομηνίες είτε μια αναφορά ημερολογίου |
start_date |
Μια παράσταση ημερομηνίας. Εάν χρησιμοποιείται η σύνταξη ημερολογίου, χρησιμοποιήστε τον ίδιο τύπο δεδομένων με την κύρια στήλη που έχει επισημανθεί στην κατηγορία Day. |
number_of_intervals |
Ένας ακέραιος που καθορίζει τον αριθμό των διαστημάτων που θα προστίθενται ή θα αφαιρούνται από τις ημερομηνίες. |
interval |
Το διάστημα κατά το οποίο θα γίνει μετατόπιση των ημερομηνιών. Η τιμή για το διάστημα μπορεί να είναι μία από τις ακόλουθες: DAY, WEEK, MONTH, QUARTER, και YEAR. Μπορείτε να χρησιμοποιήσετε WEEK μόνο με μια αναφορά ημερολογίου. |
endbehavior |
Ισχύει μόνο όταν παρέχετε μια αναφορά ημερολογίου. Προαιρετικό. Ελέγχει τον τρόπο με τον οποίο στοιχίζεται η ημερομηνία λήξης όταν το διάστημα προορισμού είναι μεγαλύτερο από το εύρος προέλευσης. Οι έγκυρες τιμές είναι: PRECISE (προεπιλογή) και ENDALIGNED. |
Τιμή επιστροφής
Για εισαγωγή στήλης ημερομηνίας, ένας πίνακας που περιέχει μία μόνο στήλη τιμών ημερομηνίας.
Για την εισαγωγή ημερολογίου, έναν πίνακα που περιέχει όλες τις κύριες στήλες με ετικέτες και όλες τις σχετικές στήλες χρόνου.
Παρατηρήσεις
Στην πιο συνηθισμένη περίπτωση χρήσης,
datesείναι μια αναφορά στη στήλη ημερομηνιών ενός επισημαστηρίου πίνακα ημερομηνιών.Εάν ο αριθμός που καθορίστηκε για
number_of_intervalsείναι θετικός, οι ημερομηνίες μετακινούνται στο μέλλον. Εάν ο αριθμός είναι αρνητικός, οι ημερομηνίες μετακινούνται στο παρελθόν.Η παράμετρος
intervalείναι μια απαρίθμηση. Οι έγκυρες τιμές είναιDAY,WEEK,MONTH, ,QUARTERκαιYEAR. Επειδή πρόκειται για απαρίθμηση, οι τιμές δεν μεταβιβάζονται ως συμβολοσειρές. Επομένως, μην τις περικλείετε σε εισαγωγικά.Όταν
endbehaviorπαρέχεται (μόνο χρονική ευφυΐα ημερολογίου), DATESINPERIOD προωθεί την τιμή στην DATEADDπαράμετρο 'Extension. Ανατρέξτε στο θέμα Κατανόηση του endbehavior για λεπτομερή παραδείγματα.Για την εισαγωγή στήλης ημερομηνίας, ο πίνακας που επιστρέφεται μπορεί να περιέχει μόνο ημερομηνίες που είναι αποθηκευμένες στη
datesστήλη. Επομένως, για παράδειγμα, εάν η στήλη ξεκινά από τηνdates1η Ιουλίου 2017 και ηstart_dateτιμή είναι 1η Ιουλίου 2016, ο πίνακας που επιστράφηκε ξεκινά από την 1η Ιουλίου 2017.Για εισαγωγή ημερολογίου, εάν η ημερομηνία εισόδου δεν βρεθεί στη στήλη ημέρα με ετικέτα, το αποτέλεσμα δεν έχει οριστεί.
Για την εισαγωγή ημερολογίου, χρησιμοποιήστε τον ίδιο τύπο δεδομένων και μορφή με τη στήλη ημέρας με ετικέτα για την ημερομηνία έναρξης. Για παράδειγμα, εάν η στήλη χρησιμοποιεί τη μορφή YYYY-Sn-Qn-Mnn-Wnn-Dnn (π.χ. "2014-S2-Q4-M11-W45-D03"), η ημερομηνία έναρξης πρέπει να ακολουθεί την ίδια μορφή (π.χ., "2015-S2-Q4-M11-W45-D03"). Διαφορετικά, η συμπεριφορά δεν έχει οριστεί.
-
Αυτή η συνάρτηση δεν υποστηρίζεται για χρήση σε λειτουργία DirectQuery όταν χρησιμοποιείται σε υπολογιζόμενες στήλες ή σε κανόνες ασφάλειας σε επίπεδο γραμμών (RLS).
Παράδειγμα
Ο ακόλουθος ορισμός πίνακα Πωλήσεις χρησιμοποιεί τη συνάρτηση DATESINPERIOD για τον υπολογισμό των εσόδων του προηγούμενου έτους (PY).
Ο τύπος χρησιμοποιεί τη MAX συνάρτηση. Αυτή η συνάρτηση επιστρέφει την τελευταία ημερομηνία που βρίσκεται στο περιβάλλον φίλτρου. Επομένως, η συνάρτηση DATESINPERIOD επιστρέφει έναν πίνακα ημερομηνιών που ξεκινούν από την τελευταία ημερομηνία του τελευταίου έτους.
Παραδείγματα σε αυτό το άρθρο μπορούν να χρησιμοποιηθούν με το δείγμα μοντέλου Adventure Works DW 2020 Power BI Desktop. Για να λάβετε το μοντέλο, ανατρέξτε DAX δείγμαμοντέλου .
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)
Η αναφορά φιλτράρεται με βάση τον μήνα Ιούνιο του 2020. Η συνάρτηση MAX επιστρέφει 30 Ιουνίου 2020. Στη συνέχεια, η συνάρτηση DATESINPERIOD επιστρέφει μια περιοχή ημερομηνιών από την 1η Ιουλίου 2019 έως τις 30 Ιουνίου 2020. Είναι ένα έτος τιμών ημερομηνίας που ξεκινούν από τις 30 Ιουνίου 2020 για το τελευταίο έτος.
Παράδειγμα χρονικής ευφυΐας βάσει ημερολογίου
Ο ακόλουθος ορισμός πίνακα Πωλήσεις χρησιμοποιεί τη συνάρτηση DATESINPERIOD για τον υπολογισμό των εσόδων του προηγούμενου έτους (PY).
Ο τύπος χρησιμοποιεί τη MAX συνάρτηση. Αυτή η συνάρτηση επιστρέφει την τελευταία ημερομηνία που βρίσκεται στο περιβάλλον φίλτρου. Επομένως, η DATESINPERIOD συνάρτηση επιστρέφει κύριες στήλες ξεκινώντας από την τελευταία ημερομηνία του τελευταίου έτους. Χρησιμοποιούμε το DateKey ως παράδειγμα για να δείξουμε ότι η κατηγορία "Ημέρα" μπορεί να επισημανθεί με μια στήλη που δεν έχει πληκτρολογηθεί ημερομηνία.
Παραδείγματα σε αυτό το άρθρο μπορούν να χρησιμοποιηθούν με το δείγμα μοντέλου Adventure Works DW 2020 Power BI Desktop. Για να λάβετε το μοντέλο, ανατρέξτε DAX δείγμαμοντέλου .
Revenue PY =
CALCULATE (
SUM ( Sales[Sales Amount] ),
DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)
Η αναφορά φιλτράρεται με βάση τον μήνα Ιούνιο του 2020. Η συνάρτηση MAX επιστρέφει 30 Ιουνίου 2020. Στη συνέχεια, η DATESINPERIOD συνάρτηση επιστρέφει μια περιοχή από 1 Ιουλίου 2019 έως 30 Ιουνίου 2020. Είναι ένας χρόνος που ξεκινά από τις 30 Ιουνίου 2020 για το τελευταίο έτος.
Κατανόηση της παραμέτρου endbehavior για τη χρονική ευφυΐα ημερολογίου
Εσωτερικά, DATESINPERIOD υπολογίζει το όριο λήξης με κλήση DATEADD του ίδιου διαστήματος, αριθμού διαστημάτων και endbehavior που μεταβιβάστηκαν στο DATESINPERIOD. Όταν number_of_intervals το είναι αρνητικό (σύνηθες κατά την κύλιση ενός παραθύρου προς τα πίσω), η συνάρτηση επιστρέφει την περιοχή (endDate, startDate], όπου endDate είναι η ημερομηνία που DATEADD επιστρέφεται αφού μετατοπίσει το περιβάλλον ημερολογίου που τελειώνει μεstartDate<number_of_intervals><interval>χρήση <endbehavior>του . Για τις θετικές τιμές, το διάστημα που επιστρέφεται είναι [startDate, endDate).
-
PRECISEΤο διατηρεί την ακριβή τιμή που επιστρέφεται από το DATEADD. -
ENDALIGNEDΑκολουθεί τη DATEADDEndAlignedσημασιολογία, μετακινώντας το όριο στο τέλος της περιόδου προορισμού, όταν η επιλογή προέλευσης έφτασε ήδη στο δικό της τέλος. Αυτό είναι χρήσιμο όταν το περιβάλλον φίλτρου τελειώνει ήδη την τελευταία ημέρα μιας περιόδου και θέλετε ένα παράθυρο που δείχνει προς τα πίσω (για παράδειγμα, έξι μήνες) να χρησιμοποιεί την τελευταία ημέρα της μετατοπισμένης περιόδου ως το όριο.
Παράδειγμα με EndAligned
EndAlignedTest =
CALCULATE (
COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
)
Αυτή η μέτρηση μετρά τα διακριτά ονόματα μηνών στους τελευταίους έξι μήνες σε σχέση με το τρέχον περιβάλλον. Με EndAlignedτο , το παράθυρο διατηρεί το όριο στο τέλος του μετατοπισμένου μήνα, όταν το περιβάλλον τελειώνει ήδη σε ένα όριο μήνα, αποτρέποντας τις πρόσθετες τελικές ημερομηνίες που Precise θα περιλαμβάνουν (για παράδειγμα, διαφορετικά θα Feb 28 μετατοπιζόταν Aug 28στο , αντλώντας και επεκτείνοντας ουσιαστικά το διάστημα σε Aug 29–31 επτά μήνες). Η EndAligned ρύθμιση διατηρεί το πλήθος στις έξι σε αυτό το σενάριο.
Η παρακάτω σύγκριση προϋποθέτει ότι το τρέχον περιβάλλον φίλτρου λήγει στις 28 Φεβρουαρίου 2023 και η παράσταση καλεί DATESINPERIOD(..., -6, MONTH, <endbehavior>)την . Η λειτουργική περιοχή είναι (endDate, startDate], επομένως, η endDate τιμή που επιστρέφεται από DATEADD αποκλείεται ενώ startDate περιλαμβάνεται.
| endbehavior |
DATEADD ημερομηνία λήξης |
DATESINPERIOD έκταση | Ονόματα μήνα που επιστρέφονται από τη μέτρηση |
|---|---|---|---|
Precise |
2022-08-28 |
(2022-08-28, 2023-02-28] → 29 Αυγ 2022 – 28 Φεβ 2023 |
Αυγ, Σεπ, Οκτ, Νοε, Δεκ., Ιαν, Φεβ (7) |
EndAligned |
2022-08-31 |
(2022-08-31, 2023-02-28] → 1 Σεπ 2022 – 28 Φεβ 2023 |
Σεπ, Οκτ, Νοε, Δεκ., Ιαν, Φεβ (6) |
Διαφορές στη συμπεριφορά μεταξύ της κλασικής και της ημερολογιακής χρονικής ευφυΐας
Εσωτερικά, DATESINPERIOD χρησιμοποιεί την ίδια λογική όπως DATEADD για τον προσδιορισμό της ημερομηνίας λήξης από την ημερομηνία έναρξης και, στη συνέχεια, υπολογίζει την περιοχή. Ορισμένα σενάρια μπορούν να αποδώσουν διαφορετικά αποτελέσματα κατά τη σύγκριση κλασικής και ημερολογιακής χρονικής ευφυΐας. Για παράδειγμα, σε ένα σεληνιακό έτος, DATEADD παράγει διαφορετικά αποτελέσματα σε υποδιαίρεση ημερομηνίας, επομένως το αποτέλεσμα διαφέρει DATESINPERIOD επίσης. Στη χρονική ευφυΐα βάσει ημερολογίου, η μετατόπιση στις 29 Φεβρουαρίου 2008 ένα έτος έχει ως αποτέλεσμα την 1η Μαρ 2007, επειδή αντιμετωπίζεται ως η 60ή ημέρα του έτους. Στην κλασική χρονική ευφυΐα, η ίδια μετατόπιση επιστρέφει 28 Φεβρουαρίου 2007. Επειδή η ημερομηνία λήξης διαφέρει, το αποτέλεσμα διαφέρει DATESINPERIOD επίσης. Η λύση είναι να χρησιμοποιήσετε DATEADDτο (Ημερολόγιο, -<αριθμός ενός έτους>, μήνα) για να υπολογίσετε την ημερομηνία λήξης. Για παράδειγμα, εάν ένα έτος έχει 13 μήνες στο ημερολόγιο, χρησιμοποιήστε DATEADDτο (Ημερολόγιο, -13, μήνας). Αυτή η προσέγγιση αλλάζει κατά μήνα, οπότε ο Φεβρουάριος 2008 πηγαίνει στον Φεβρουάριο του 2007. Στη συνέχεια, γράψτε μια προσαρμοσμένη ημερομηνίαInPeriod με βάση τη νέα ημερομηνία λήξης.