DATESINPERIOD

Ισχύει για:Υπολογιζόμενη στήληΥπολογιζόμενος πίνακαςΜέτρηση υπολογισμού απεικόνισης

Σημείωση

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

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

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

Αυτή η συνάρτηση είναι κατάλληλη για μεταβίβαση ως φίλτρου στη συνάρτηση 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 στήλη. Επομένως, για παράδειγμα, εάν η στήλη ξεκινά από την dates 1η Ιουλίου 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 με βάση τη νέα ημερομηνία λήξης.