Aracılığıyla paylaş


DATESINPERIOD

Şunlar için geçerlidir:Hesaplanan sütunHesaplanan tabloÖlçüGörsel hesaplama

Not

Bu işlev, anlamsız sonuçlar döndürdüğü için görsel hesaplamalarında kullanılması önerilmez.

Tarih sütunu girişi için, belirtilen başlangıç tarihiyle başlayan ve belirtilen tarih aralığı sayısı ve türü için devam eden tarih sütununu içeren bir tablo döndürür.

Takvim girişi için, belirtilen başlangıç tarihiyle başlayan ve belirtilen tarih aralıklarının sayısı ve türü için devam eden bir tablo döndürür. Tablo, tüm birincil etiketli sütunları ve tüm zaman ile ilgili sütunları içerir.

Bu işlev, CALCULATE işlevine filtre olarak geçirmek için uygundur. Bir ifadeyi gün, ay, üç aylık dönem veya yıl gibi standart tarih aralıklarına göre filtrelemek için kullanın.

Sözdizimi

DATESINPERIOD(<dates> or <calendar>, <start_date>, <number_of_intervals>, <interval>[, <endbehavior>])

Parametre

Terim Tanım
dates or calendar Tarihler veya takvim başvurusu içeren bir sütun
start_date Tarih ifadesi. Takvim söz dizimi kullanılıyorsa, lütfen Gün kategorisine etiketlenmiş birincil sütunla aynı veri türünü kullanın.
number_of_intervals Tarihlere eklenecek veya çıkaracak aralık sayısını belirten bir tamsayı.
interval Tarihlerin kaydırıldığı aralık. Aralık değeri aşağıdakilerden biri olabilir: DAY, WEEK, MONTH, QUARTERve YEAR. Hafta yalnızca takvimle kullanılabilir.
endbehavior Yalnızca takvim başvurusu sağlandığında geçerlidir. Optional. Hedef aralık kaynak aralıktan uzun olduğunda bitiş tarihinin nasıl hizalı olduğunu denetler. Geçerli değerler şunlardır: DUYARLI (varsayılan) ve ENDALIGNED.

Dönüş değeri

Tarih sütunu girişi için, tek bir tarih değerleri sütunu içeren bir tablo.
Takvim girişi için, tüm birincil etiketli sütunları ve tüm zaman ile ilgili sütunları içeren bir tablo.

Açıklamalar

  • En yaygın kullanım örneğinde, dates işaretli bir tarih tablosunun tarih sütununa başvurudur.

  • number_of_intervals için belirtilen sayı pozitifse tarihler zamanda ileri taşınır; sayı negatifse tarihler zamanda geriye kaydırılır.

  • interval parametresi bir numaralandırmadır. Geçerli değerler : DAY, WEEK, MONTH, QUARTERve YEAR. Bu bir numaralandırma olduğundan, değerler dize olarak geçirilmiyor. Bu nedenle bunları tırnak içine alma.

  • Sağlandığında endbehavior (yalnızca takvim akıllı zaman gösterimi), DATESINPERIOD değeri parametresine DATEADDExtension iletir. Ayrıntılı örnekler için bkz. Endbehavior'ı anlama .

  • Tarih sütunu girişi için, döndürülen tablo yalnızca sütunda dates depolanan tarihleri içerebilir. Örneğin, dates sütunu 1 Temmuz 2017'den başlıyorsa ve start_date değeri 1 Temmuz 2016 ise, döndürülen tablo 1 Temmuz 2017'den itibaren başlar.

  • Takvim girişi için, giriş tarihi etiketli gün sütununda bulunmazsa sonuç tanımlanmamış olur. Lütfen geçerli tarih girişi sağlayın.

  • Takvim girişi için, başlangıç tarihi için etiketli gün sütunuyla aynı veri türünü ve biçimini kullanın. Örneğin, sütun YYYY-Sn-Qn-Mnn-Wnn-Dnn (örneğin, "2014-S2-Q4-M11-W45-D03") biçimini kullanıyorsa, başlangıç tarihi aynı biçimde olmalıdır (örneğin, "2015-S2-Q4-M11-W45-D03"). Aksi takdirde, davranış tanımlanmamıştır.

  • Bu işlev, hesaplanan sütunlarda veya satır düzeyi güvenlik (RLS) kurallarında kullanıldığında DirectQuery modunda kullanılmak üzere desteklenmez.

Örnek

Aşağıdaki Sales tablo ölçüsü tanımı, önceki yılın (PY) gelirini hesaplamak için DATESINPERIOD işlevini kullanır.

Formülde MAX işlevinin kullanıldığına dikkat edin. Bu işlev, filtre bağlamındaki en son tarihi döndürür. Bu nedenle, DATESINPERIOD işlevi son yılın en son tarihinden başlayarak bir tarih tablosu döndürür.

Bu makaledeki örnekler örnek Adventure Works DW 2020 Power BI Desktop modeliyle kullanılabilir. Modeli almak için bkz.örnek modeli .

Revenue PY =
CALCULATE (
    SUM ( Sales[Sales Amount] ),
    DATESINPERIOD ( 'Date'[Date], MAX ( 'Date'[Date] ), -1, YEAR )
)

Raporun Haziran 2020 ayına göre filtrelendiğini düşünün. MAX işlevi 30 Haziran 2020'yi döndürür. DATESINPERIOD işlevi daha sonra 1 Temmuz 2019 ile 30 Haziran 2020 arasında bir tarih aralığı döndürür. Bu, geçen yıl için 30 Haziran 2020'den itibaren başlayan bir tarih yılıdır.

Takvim tabanlı akıllı zaman gösterimi örneği

Aşağıdaki Sales tablo ölçüsü tanımı, önceki yılın (PY) gelirini hesaplamak için DATESINPERIOD işlevini kullanır.

Formülde MAX işlevinin kullanıldığına dikkat edin. Bu işlev, filtre bağlamındaki en son tarihi döndürür. Bu nedenle işlev, DATESINPERIOD son yılın en son tarihinden başlayarak birincil sütunları döndürür. DateKey, "Gün" kategorisinin tarih türünde olmayan bir sütunla etiketlenebilir olduğunu göstermek için örnek olarak kullanılır.

Bu makaledeki örnekler örnek Adventure Works DW 2020 Power BI Desktop modeliyle kullanılabilir. Modeli almak için bkz.örnek modeli .

Revenue PY =
CALCULATE (
    SUM ( Sales[Sales Amount] ),
    DATESINPERIOD ( FiscalCalendar, MAX ( 'Date'[DateKey] ), -1, YEAR )
)

Raporun Haziran 2020 ayına göre filtrelendiğini düşünün. MAX işlevi 30 Haziran 2020'yi döndürür. İşlev DATESINPERIOD daha sonra 1 Temmuz 2019 ile 30 Haziran 2020 arasında bir aralık döndürür. Geçen yıl için 30 Haziran 2020'den itibaren bir yıl başlar.

Takvim akıllı zaman gösterimi için endbehavior parametresini anlama

dahili olarak, DATESINPERIOD aynı aralıkla, aralık sayısıyla ve DATEADD içine endbehaviorgeçirilen çağrıyı DATESINPERIOD yaparak bitiş sınırını hesaplar. Negatif olduğunda number_of_intervals (bir pencereyi geriye doğru kaydırırken yaygın olarak görülür), işlevi aralığını (endDate, startDate]döndürür; burada endDate kullanılarak DATEADDsona erecek startDate<number_of_intervals><interval> takvim bağlamını kaydırdıktan sonra tarafından <endbehavior> döndürülen tarihtir. Pozitif değerler için döndürülen aralık şeklindedir [startDate, endDate).

  • PRECISE tarafından DATEADDdöndürülen tam değeri tutar.
  • ENDALIGNED DATEADD EndAligned semantiği izler ve sınırı kaynak seçimi kendi sonuna ulaştığında hedef dönemin sonuna taşır. Filtre bağlamı bir dönemin son gününde zaten sona erdiğinde ve geriye dönük bir pencerenin (örneğin altı ay) kaydırılan dönemin son gününü sınır olarak kullanmasını istediğinizde bu yararlı olur.

EndAligned ile örnek

EndAlignedTest =
    CALCULATE (
        COUNTROWS ( SUMMARIZE ( Sales, 'Date'[MonthName] ) ),
        DATESINPERIOD ( 'Gregorian Calendar', MAX ( 'Date'[Date] ), -6, MONTH, EndAligned )
    )

Bu ölçü, geçerli bağlama göre son altı aydaki ayrı ay adlarını sayar. ileEndAligned, bağlam zaten bir ay sınırında sona erdiğinde pencere, kaydırılan ayın sonunda sınırı korur ve içerebilecek ek sondaki tarihleri Precise engeller (örneğin, Feb 28 başka bir şekilde içine doğru Aug 28 kaydırılır ve yayılma alanını yedi aya Aug 29–31kadar etkili bir şekilde genişletir). Ayar, EndAligned bu senaryoda sayıyı altıda tutar.

Aşağıdaki karşılaştırmada geçerli filtre bağlamı 28 Şubat 2023'te sona erer ve ifadesi çağrılır DATESINPERIOD(..., -6, MONTH, <endbehavior>). İşlev aralığı olur, (endDate, startDate]bu nedenle endDate tarafından DATEADD döndürülen değeri dahil edilirken startDate dışlanır.

endbehavior DATEADD Bitiştarihi DATESINPERIOD aralık Ölçü tarafından döndürülen ay adları
Precise 2022-08-28 (2022-08-28, 2023-02-28] → 29 Ağustos 2022 – 28 Şubat 2023 Ağustos, Eylül, Ekim, Kas, Aralık, Ocak, Şubat (7)
EndAligned 2022-08-31 (2022-08-31, 2023-02-28] → Eylül 1 2022 – 28 Şubat 2023 Eylül, Sekiz, Kas, Aralık, Ocak, Şubat (6)

Klasik ve takvim akıllı zaman gösterimi arasındaki davranış farklılıkları

Dahili olarak, DATESINPERIOD başlangıç tarihinden bitiş tarihini belirlemek için ile aynı mantığı DATEADD kullanır ve aralığı hesaplar. Bazı senaryolar klasik ve takvim akıllı zaman gösterimini karşılaştırırken farklı sonuçlar verebilir. Örneğin, bir ay yılında, DATEADD tarih ayrıntı düzeyinde farklı sonuçlar üretir, dolayısıyla sonucu DATESINPERIOD da farklılık gösterir. Takvim tabanlı akıllı zaman gösteriminde, 29 Şubat 2008'in bir yıl geriye kaydırılması, yılın 60. günü olarak ele alındığından 1 Mart 2007'de sonuçlanır. Klasik akıllı zaman gösteriminde aynı vardiya 28 Şubat 2007'yi döndürür. Bitiş tarihi farklı olduğundan çıkışı DATESINPERIOD da farklılık gösterir. Geçici çözüm, bitiş tarihini hesaplamak için (Takvim, -DATEADDyıl< sayısı, ay) kullanmaktır>. Örneğin, bir yılın takvimde 13 ayı varsa kullanın DATEADD(Takvim, -13, ay). Bu yaklaşım aya göre değiştirileceği için 2008 Şubat 2007'ye geçecektir. Ardından, yeni bitiş tarihine göre özel bir datesInPeriod yazın.