Κοινοποίηση μέσω


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. Η εβδομάδα μπορεί να χρησιμοποιηθεί μόνο με το ημερολόγιο.
endbehavior Ισχύει μόνο όταν παρέχεται αναφορά ημερολογίου. Προαιρετικό. Ελέγχει τον τρόπο στοίχισης της ημερομηνίας λήξης όταν το διάστημα προορισμού είναι μεγαλύτερο από το εύρος προέλευσης. Οι έγκυρες τιμές είναι: ΑΚΡΙΒΕΙΑ (προεπιλογή) και 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 με βάση τη νέα ημερομηνία λήξης.