Bagikan melalui


DATEADD

Berlaku untuk: kolom terhitungTabel terhitungUkurPerhitungan visual

Nota

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

Jika input adalah kolom tanggal, mengembalikan tabel yang berisi kolom tanggal, digeser maju atau mundur tepat waktu dengan jumlah interval yang ditentukan dari tanggal dalam konteks saat ini.
Jika input adalah kalender, fungsi mengembalikan tanggal yang digeser ke depan atau mundur dalam waktu dengan jumlah interval yang ditentukan, berdasarkan konteks saat ini. Output mencakup kolom utama yang ditandai serta kolom terkait waktu.

Sintaksis

DATEADD(<dates> or <calendar>, <number_of_intervals>, <interval>[,<Extension>],[,<Truncation>])

Parameter

Istilah Definisi
dates or calendar Kolom yang berisi tanggal atau referensi kalender.
number_of_intervals Bilangan bulat yang menentukan jumlah interval untuk ditambahkan atau dikurangi dari tanggal.
interval Interval untuk menggeser tanggal. Nilai untuk interval dapat berupa salah satu hal berikut: year, , quarter, monthweek, day. Enum minggu hanya berlaku ketika referensi kalender disediakan.
extension Hanya berlaku saat referensi kalender disediakan. Tentukan perilaku ketika periode waktu asli memiliki lebih sedikit tanggal daripada periode waktu yang dihasilkan. Nilai yang valid adalah: EXTENDING (Default), PRECISE, ENDALIGNED.
truncation Hanya berlaku saat referensi kalender disediakan. Tentukan perilaku ketika periode waktu asli memiliki lebih banyak tanggal daripada periode waktu yang dihasilkan. Nilai yang valid adalah: BLANKS (Default), ANCHORED.

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 kolom terkait waktu untuk periode yang digeser, dalam konteks saat ini.

Komentar

Argumen dates dapat berupa salah satu hal berikut:

  • Referensi ke kolom tanggal/waktu,

  • Ekspresi tabel yang mengembalikan satu kolom nilai tanggal/waktu,

  • Ekspresi Boolean yang menentukan tabel kolom tunggal dari nilai tanggal/waktu.

    Nota

    Batasan pada ekspresi Boolean dijelaskan dalam topik, CALCULATE fungsi.

  • Jika angka yang ditentukan untuk number_of_intervals positif, tanggal dalam dates dipindahkan tepat waktu; jika angka negatif, tanggal dalam dates digeser kembali ke waktu.

  • Parameter interval adalah enumerasi, bukan sekumpulan string; oleh karena itu, nilai tidak boleh diapit dalam tanda kutip. Selain itu, nilai: year, quarter, month, day harus dieja secara penuh saat menggunakannya.

  • Tabel hasil hanya menyertakan tanggal yang ada di kolom dates.

  • Jika sintaks kolom tanggal digunakan dan tanggal dalam konteks saat ini tidak membentuk interval yang berdampingan, fungsi mengembalikan kesalahan.

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

Contoh - Menggeser sekumpulan tanggal

Rumus berikut menghitung tanggal yang satu tahun sebelum tanggal dalam konteks saat ini.

= DATEADD ( DateTime[DateKey], -1, YEAR )

Contoh untuk kecerdasan waktu berbasis kalender

Rumus berikut mengembalikan tabel tanggal yang digeser satu tahun ke belakang dari tanggal dalam konteks saat ini.

DATEADD ( FiscalCalendar, -1, YEAR )

Perilaku khusus saat input adalah kolom tanggal

Ketika pilihan mencakup dua hari terakhir dalam sebulan, DATEADD akan menggunakan semantik "ekstensi" dan akan menyertakan hari-hari hingga akhir bulan. Misalnya, ketika 27 dan 28 Feb 2013 disertakan dalam pilihan dan sebulan ditambahkan, DATEADD akan mengembalikan 27 hingga 31 Maret.

Perilaku ini hanya terjadi ketika dua hari terakhir dalam bulan disertakan dalam pilihan. Jika hanya 27 Feb yang dipilih, itu akan masuk ke 27 Maret.

= DATEADD(DateTime[DateKey], 1, month)

Kecerdasan waktu berbasis kalender memberikan kontrol lebih melalui dua parameter opsional: "Ekstensi" dan "Pemotongan". Silakan lihat deskripsi parameter di atas untuk detailnya.

Perilaku untuk DateAdd berbasis kalender saat pilihan berada pada butir yang lebih halus daripada tingkat shift

Saat referensi kalender digunakan dan pilihan berada pada butir yang lebih halus daripada tingkat pergeseran, pendekatan berbasis indeks diambil. Untuk mengilustrasikan perilaku ini, mari kita pertimbangkan skenario di mana pilihan berada pada tingkat tanggal dan DATEADD() bergeser berdasarkan bulan. Berikut adalah apa yang akan dilakukan DateAdd:

  • Tentukan posisi pilihan saat ini dalam sebulan.
    Misalnya, jika pilihan saat ini mencakup 3–10 Maret, posisinya adalah dari hari ke-3 hingga ke-10 dalam sebulan.

  • Geser bulan Terapkan pergeseran bulan — misalnya, pergeseran +1 berubah Maret ke April.

  • Mengembalikan posisi relatif yang sama pada bulan yang digeser Ambil yang ke-3 ke 10 bulan baru (misalnya, 3–10 April).

Parameter untuk DateAdd berbasis kalender saat pilihan berada pada butir yang lebih halus daripada tingkat shift

Ketika granularitas pemilihan lebih halus daripada unit shift (misalnya, memilih tanggal individual saat bergeser menurut bulan), perilaku berbasis indeks dapat menyebabkan ambiguitas, terutama di seluruh bulan dengan panjang yang bervariasi. Untuk menangani kasus tepi ini, dua parameter diperkenalkan:

Parameter ekstensi (untuk pergeseran periode besar → kecil):

Mengontrol bagaimana fungsi berperilaku ketika periode tujuan lebih panjang dari yang saat ini. Gunakan bergerak maju satu bulan sebagai contoh:

  • Precise: Menjaga rentang tanggal asli dengan ketat.
    Feb 25–28 → →March 25–28

  • Extending: Memungkinkan jendela untuk memperluas ke akhir periode jika diperlukan.
    Feb 25–28 → →March 25–31

  • EndAligned: Menyelaraskan tanggal akhir dengan akhir periode tujuan saat pilihan mencapai akhir periodenya; jika tidak, pertahankan posisi relatif.
    Feb 28 → → March 31, saat Feb 27March 27

Parameter Pemotongan (untuk pergeseran periode kecil → besar)

Mengontrol bagaimana fungsi berkinerja ketika bulan tujuan lebih pendek dari yang saat ini. Gunakan bergerak mundur satu bulan sebagai contoh:

  • Anchored: Jangkar hasil ke tanggal valid terakhir dari periode yang lebih kecil.
    March 31 → →Feb 28

  • Blanks: Mengembalikan kosong saat tanggal yang digeser tidak ada.
    March 31 → → (kosong) (sejak Februari tidak memiliki tanggal 31)

Perbedaan perilaku antara kecerdasan waktu klasik dan kalender

Beberapa skenario mungkin menghasilkan hasil yang berbeda saat membandingkan kecerdasan waktu klasik dan kalender. Misalnya, pada tahun bulan, SamePeriodLastYear akan menghasilkan hasil yang berbeda pada granularitas tanggal. 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. Solusinya adalah menggunakan DATEADD(Kalender, -<jumlah tahun>, bulan). 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.