Bagikan melalui


DATESINPERIOD

Berlaku untuk: kolom terhitungTabel terhitungUkurPerhitungan visual

Nota

Fungsi ini tidak disarankan untuk digunakan dalam perhitungan visual karena kemungkinan mengembalikan hasil yang tidak berarti.

Untuk input kolom tanggal, mengembalikan tabel yang berisi kolom tanggal yang dimulai dengan tanggal mulai yang ditentukan dan melanjutkan untuk jumlah dan jenis interval tanggal yang ditentukan.

Untuk input kalender, mengembalikan tabel yang dimulai dengan tanggal mulai tertentu dan melanjutkan untuk jumlah dan jenis interval tanggal yang ditentukan. Tabel berisi semua kolom utama yang ditandai dan kolom terkait sepanjang waktu.

Fungsi ini cocok untuk diteruskan sebagai filter ke fungsi CALCULATE. Gunakan untuk memfilter ekspresi menurut interval tanggal standar seperti hari, bulan, kuartal, atau tahun.

Sintaksis

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

Parameter

Istilah Definisi
dates or calendar Kolom yang berisi tanggal atau referensi kalender
start_date Ekspresi tanggal. Jika sintaks kalender digunakan, gunakan jenis data yang sama dengan kolom utama yang ditandai ke kategori Hari.
number_of_intervals Bilangan bulat yang menentukan jumlah interval yang akan ditambahkan, atau dikurangi dari, tanggal.
interval Interval untuk menggeser tanggal. Nilai untuk interval dapat berupa salah satu hal berikut: DAY, , WEEK, MONTHQUARTER, dan YEAR. Minggu hanya dapat digunakan dengan kalender.
endbehavior Hanya berlaku saat referensi kalender disediakan. Optional. Mengontrol bagaimana tanggal akhir diratakan ketika interval tujuan lebih panjang dari rentang sumber. Nilai yang valid adalah: PRECISE (default) dan ENDALIGNED.

Mengembalikan nilai

Untuk input kolom tanggal, tabel yang berisi satu kolom nilai tanggal.
Untuk input kalender, tabel yang berisi semua kolom utama yang ditandai dan semua kolom terkait waktu.

Komentar

  • Dalam kasus penggunaan yang paling umum, dates adalah referensi ke kolom tanggal tabel tanggal yang ditandai.

  • Jika angka yang ditentukan untuk number_of_intervals positif, tanggal dipindahkan ke depannya; jika angka negatif, tanggal digeser mundur dalam waktu.

  • Parameter interval adalah enumerasi. Nilai yang valid adalah DAY, WEEK, MONTH, QUARTER, dan YEAR. Karena ini adalah enumerasi, nilai tidak diteruskan sebagai string. Jadi jangan sertakan dalam tanda kutip.

  • Jika endbehavior disediakan (hanya kecerdasan waktu kalender), DATESINPERIOD meneruskan nilai ke DATEADDparameter 's Extension . Lihat Memahami endbehavior untuk contoh terperinci.

  • Untuk input kolom tanggal, tabel yang dikembalikan hanya dapat berisi tanggal yang disimpan dalam dates kolom. Jadi, misalnya, jika kolom dates dimulai dari 1 Juli 2017, dan nilai start_date adalah 1 Juli 2016, tabel yang dikembalikan akan dimulai dari 1 Juli 2017.

  • Untuk input kalender, jika tanggal input tidak ditemukan di kolom hari yang diberi tag, hasilnya tidak akan ditentukan. Harap berikan input tanggal yang valid.

  • Untuk input kalender, gunakan jenis dan format data yang sama dengan kolom hari yang ditandai untuk tanggal mulai. Misalnya, jika kolom menggunakan format YYYY-Sn-Qn-Mnn-Wnn-Dnn (misalnya, "2014-S2-Q4-M11-W45-D03"), tanggal mulai harus mengikuti format yang sama (misalnya, "2015-S2-Q4-M11-W45-D03"). Jika tidak, perilaku tidak ditentukan.

  • Fungsi ini tidak didukung untuk digunakan dalam mode DirectQuery saat digunakan dalam kolom terhitung atau aturan keamanan tingkat baris (RLS).

Contoh

Definisi pengukuran tabel Sales berikut menggunakan fungsi DATESINPERIOD untuk menghitung pendapatan untuk tahun sebelumnya (PY).

Perhatikan rumus menggunakan fungsi MAX. Fungsi ini mengembalikan tanggal terbaru yang ada dalam konteks filter. Jadi, fungsi DATESINPERIOD mengembalikan tabel tanggal yang dimulai dari tanggal terbaru untuk tahun lalu.

Contoh dalam artikel ini dapat digunakan dengan contoh model Power BI Desktop Adventure Works DW 2020. Untuk mendapatkan model, lihat DAX contoh model.

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

Pertimbangkan bahwa laporan difilter pada bulan Juni 2020. Fungsi MAX mengembalikan 30 Juni 2020. Fungsi DATESINPERIOD kemudian mengembalikan rentang tanggal dari 1 Juli 2019 hingga 30 Juni 2020. Ini adalah nilai tanggal tahun mulai dari 30 Juni 2020 untuk tahun lalu.

Contoh untuk kecerdasan waktu berbasis kalender

Definisi pengukuran tabel Sales berikut menggunakan fungsi DATESINPERIOD untuk menghitung pendapatan untuk tahun sebelumnya (PY).

Perhatikan rumus menggunakan fungsi MAX. Fungsi ini mengembalikan tanggal terbaru yang ada dalam konteks filter. Jadi, DATESINPERIOD fungsi mengembalikan kolom utama yang dimulai dari tanggal terbaru selama setahun terakhir. DateKey digunakan sebagai contoh untuk menunjukkan bahwa kategori "Hari" dapat ditandai dengan kolom yang tidak diketik tanggal.

Contoh dalam artikel ini dapat digunakan dengan contoh model Power BI Desktop Adventure Works DW 2020. Untuk mendapatkan model, lihat DAX contoh model.

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

Pertimbangkan bahwa laporan difilter pada bulan Juni 2020. Fungsi MAX mengembalikan 30 Juni 2020. Fungsi ini DATESINPERIOD kemudian mengembalikan rentang dari 1 Juli 2019 hingga 30 Juni 2020. Ini adalah tahun mulai dari 30 Juni 2020 untuk tahun lalu.

Memahami parameter endbehavior untuk kecerdasan waktu kalender

Secara internal, DATESINPERIOD menghitung batas akhir dengan memanggil DATEADD dengan interval yang sama, jumlah interval, dan endbehavior yang diteruskan ke .DATESINPERIOD Ketika number_of_intervals negatif (umum saat menggulung jendela mundur), fungsi mengembalikan rentang (endDate, startDate], di mana endDate adalah tanggal yang dikembalikan oleh DATEADD setelah menggeser konteks kalender yang berakhir startDate dengan <number_of_intervals><interval> menggunakan <endbehavior>. Untuk nilai positif, interval yang dikembalikan adalah [startDate, endDate).

  • PRECISE mempertahankan nilai yang tepat yang dikembalikan oleh DATEADD.
  • ENDALIGNED DATEADD EndAligned mengikuti semantik, memindahkan batas ke akhir periode tujuan ketika pemilihan sumber sudah mencapai akhirnya sendiri. Ini berguna ketika konteks filter sudah berakhir pada hari terakhir periode dan Anda ingin jendela yang terlihat mundur (misalnya, enam bulan) untuk menggunakan hari terakhir periode yang digeser sebagai batasnya.

Contoh dengan EndAligned

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

Ukuran ini menghitung nama bulan yang berbeda dalam enam bulan terakhir relatif terhadap konteks saat ini. Dengan EndAligned, jendela menyimpan batas pada akhir bulan yang digeser ketika konteks sudah berakhir pada batas bulan, mencegah tanggal berikutnya tambahan yang Precise akan mencakup (misalnya, jika tidak akan Feb 28 beralih ke Aug 28, menarik Aug 29–31 dan secara efektif memperluas rentang menjadi tujuh bulan). EndAligned Pengaturan menyimpan hitungan pada enam dalam skenario tersebut.

Perbandingan berikut mengasumsikan konteks filter saat ini berakhir pada 28 Februari 2023 dan ekspresi memanggil DATESINPERIOD(..., -6, MONTH, <endbehavior>). Rentang fungsi adalah (endDate, startDate], sehingga yang endDate dikembalikan oleh DATEADD dikecualikan saat startDate disertakan.

endbehavior DATEADD endDate DATESINPERIOD lingkup Nama bulan yang dikembalikan dengan ukuran
Precise 2022-08-28 (2022-08-28, 2023-02-28] → Agu 29 2022 – 28 Feb 2023 Aug, Sep, Okt, Nov, Dec, Jan, Feb (7)
EndAligned 2022-08-31 (2022-08-31, 2023-02-28] → Sep 1 2022 – 28 Feb 2023 Sep, Okt, Nov, Dec, Jan, Feb (6)

Perbedaan perilaku antara kecerdasan waktu klasik dan kalender

Secara internal, DATESINPERIOD menggunakan logika DATEADD yang sama dengan untuk menentukan tanggal akhir dari tanggal mulai, lalu menghitung rentang. Beberapa skenario mungkin menghasilkan hasil yang berbeda saat membandingkan kecerdasan waktu klasik dan kalender. Misalnya, pada tahun bulan, DATEADD menghasilkan hasil yang berbeda pada granularitas tanggal, sehingga hasilnya DATESINPERIOD juga akan berbeda. Dalam kecerdasan waktu berbasis kalender, menggeser Feb 29 2008 kembali satu tahun menghasilkan 1 Mar 2007, karena diperlakukan sebagai hari ke-60 dalam setahun. Dalam kecerdasan waktu klasik, shift yang sama mengembalikan Feb 28 2007. Karena tanggal akhir berbeda, output DATESINPERIOD juga akan berbeda. Solusinya adalah menggunakan DATEADD(Kalender, -<jumlah tahun>, bulan) untuk menghitung tanggal akhir. Misalnya, jika setahun memiliki 13 bulan di kalender, gunakan DATEADD(Kalender, -13, bulan). Pendekatan ini akan bergeser setiap bulan sehingga Feb 2008 akan pergi ke Feb 2007. Kemudian, tulis tanggal kustomInPeriod berdasarkan tanggal akhir baru.