Bagikan melalui


OFFSET

Berlaku untuk:Hitung kolomTerhitung Tabelterhitung Mengukurperhitungan Visual

Mengembalikan satu baris yang diposisikan baik sebelum atau sesudah baris saat ini dalam tabel yang sama, dengan offset tertentu. Jika baris saat ini tidak dapat disimpulkan ke satu baris, beberapa baris dapat dikembalikan.

Sintaks

OFFSET ( <delta>[, <relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Parameter

Term Definisi
delta Jumlah baris sebelum (nilai negatif) atau setelah (nilai positif) baris saat ini untuk mendapatkan data. Ini bisa berupa ekspresi DAX apa pun yang mengembalikan nilai skalar.
relation (Opsional) Ekspresi tabel tempat baris output dikembalikan.
Jika ditentukan, semua kolom di <partitionBy> harus berasal dari kolom atau tabel terkait.
Jika dihilangkan:
- <orderBy> harus ditentukan secara eksplisit.
- Semua <ekspresi orderBy> dan <partitionBy> harus sepenuhnya memenuhi syarat nama kolom dan berasal dari satu tabel.
- Default ke ALLSELECTED() dari semua kolom dalam <orderBy> dan <partitionBy>.
Axis (Opsional) Sumbu dalam bentuk visual. Hanya tersedia dalam perhitungan visual, dan menggantikan <relasi>.
orderBy (Opsional) Klausa ORDERBY() yang berisi ekspresi yang menentukan bagaimana setiap partisi diurutkan.
Jika dihilangkan:
- <relasi> harus ditentukan secara eksplisit.
- Default untuk mengurutkan oleh setiap kolom dalam <hubungan> yang belum ditentukan dalam <partitionBy>.
Kosong (Opsional) Enumerasi yang menentukan cara menangani nilai kosong saat mengurutkan.
Parameter ini dicadangkan untuk digunakan di masa mendatang.
Saat ini, satu-satunya nilai yang didukung adalah DEFAULT, di mana perilaku untuk nilai numerik adalah nilai kosong diurutkan antara nilai nol dan negatif. Perilaku untuk string adalah nilai kosong diurutkan sebelum semua string, termasuk string kosong.
partitionBy (Opsional) Klausa PARTITIONBY() yang berisi kolom yang menentukan bagaimana <hubungan> dipartisi.
Jika dihilangkan, <relasi> diperlakukan sebagai partisi tunggal.
matchBy (Opsional) Klausa MATCHBY() yang berisi kolom yang menentukan cara mencocokkan data dan mengidentifikasi baris saat ini.
mengatur ulang (Opsional) Hanya tersedia dalam perhitungan visual. Menunjukkan apakah perhitungan diatur ulang, dan pada tingkat hierarki kolom bentuk visual mana. Nilai yang diterima adalah: NONE, LOWESTPARENT, HIGHESTPARENT, atau bilangan bulat. Perilaku tergantung pada tanda bilangan bulat:
- Jika nol atau dihilangkan, perhitungan tidak direset. Setara dengan NONE.
- Jika positif, bilangan bulat mengidentifikasi kolom mulai dari yang tertinggi, terlepas dari biji-bijian. HIGHESTPARENT setara dengan 1.
- Jika negatif, bilangan bulat mengidentifikasi kolom mulai dari terendah, relatif terhadap butir saat ini. LOWESTPARENT setara dengan -1.

Nilai hasil

Satu atau beberapa baris dari <relasi>.

Keterangan

Kecuali untuk kolom yang ditambahkan oleh fungsi tabel DAX, setiap kolom dalam <hubungannya>, ketika <matchBy> tidak ada, atau setiap kolom di <matchBy> dan <partitionBy>, ketika <matchBy> ada, harus memiliki nilai luar yang sesuai untuk membantu menentukan baris saat ini yang akan dioperasikan, dengan perilaku berikut:

  • Jika ada tepat satu kolom luar yang sesuai, nilainya akan digunakan.
  • Jika tidak ada kolom luar yang sesuai, maka:
    • OFFSET pertama-tama akan menentukan semua kolom yang tidak memiliki kolom luar yang sesuai.
    • Untuk setiap kombinasi nilai yang ada untuk kolom ini dalam konteks induk OFFSET, OFFSET dievaluasi dan baris dikembalikan.
    • Output akhir OFFSET adalah persatuan baris ini.
  • Jika ada lebih dari satu kolom luar yang sesuai, kesalahan akan ditampilkan.

Jika semua <kolom relasi> ditambahkan oleh fungsi tabel DAX, kesalahan akan ditampilkan.

Jika <ada matchBy> , OFFSET akan mencoba menggunakan <kolom matchBy> dan <partitionBy> untuk mengidentifikasi baris.
Jika <matchBy> tidak ada dan kolom yang ditentukan dalam <orderBy> dan <partitionBy> tidak dapat mengidentifikasi setiap baris secara unik dalam <hubungannya>, maka:

  • OFFSET akan mencoba menemukan jumlah kolom tambahan paling sedikit yang diperlukan untuk mengidentifikasi setiap baris secara unik.
  • Jika kolom tersebut dapat ditemukan, OFFSET akan secara otomatis menambahkan kolom baru ini ke <orderBy>, dan setiap partisi diurutkan menggunakan kumpulan kolom OrderBy baru ini.
  • Jika kolom tersebut tidak dapat ditemukan, kesalahan akan ditampilkan.

Tabel kosong dikembalikan jika:

  • Nilai luar yang sesuai dari kolom OrderBy atau PartitionBy tidak ada dalam <relasi>.
  • Nilai <delta> menyebabkan pergeseran ke baris yang tidak ada dalam partisi.

Jika OFFSET digunakan dalam kolom terhitung yang ditentukan pada tabel yang sama dengan <relasi>, dan <orderBy> dihilangkan, kesalahan akan ditampilkan.

<reset> hanya dapat digunakan dalam perhitungan visual, dan tidak dapat digunakan dalam kombinasi dengan <orderBy> atau <partitionBy>. Jika <reset> ada, <sumbu> dapat ditentukan tetapi <relasi> tidak dapat.

Contoh 1 - kolom terhitung

Kueri DAX berikut:

DEFINE
VAR vRelation = SUMMARIZECOLUMNS ( 
                    DimProductCategory[EnglishProductCategoryName], 
                    DimDate[CalendarYear], 
                    "CurrentYearSales", SUM(FactInternetSales[SalesAmount]) 
                  )
EVALUATE
ADDCOLUMNS (
    vRelation, 
    "PreviousYearSales", 
    SELECTCOLUMNS(
        OFFSET ( 
                -1, 
                vRelation, 
                ORDERBY([CalendarYear]), 
                PARTITIONBY([EnglishProductCategoryName])
        ),
        [CurrentYearSales]
    )
)

Mengembalikan tabel yang meringkas total penjualan untuk setiap kategori produk dan tahun kalender, serta total penjualan untuk kategori tersebut pada tahun sebelumnya.

Contoh 2 - pengukuran

Kueri DAX berikut:

DEFINE
MEASURE DimProduct[CurrentYearSales] = SUM(FactInternetSales[SalesAmount])
MEASURE DimProduct[PreviousYearSales] = CALCULATE(SUM(FactInternetSales[SalesAmount]), OFFSET(-1, , ORDERBY(DimDate[CalendarYear])))
EVALUATE
SUMMARIZECOLUMNS (
    DimDate[CalendarYear],
    "CurrentYearSales", DimProduct[CurrentYearSales],
    "PreviousYearSales", DimProduct[PreviousYearSales]
)

Menggunakan OFFSET() dalam ukuran untuk mengembalikan tabel yang meringkas total penjualan untuk setiap tahun kalender dan total penjualan untuk tahun sebelumnya.

Contoh 3 - kolom terhitung

Kueri DAX berikut:

EVALUATE
ADDCOLUMNS (
    FactInternetSales,
    "Previous Sales Amount",
        SELECTCOLUMNS (
            OFFSET (
                -1,
                FactInternetSales,
                ORDERBY ( FactInternetSales[SalesAmount], DESC ),
                PARTITIONBY ( FactInternetSales[ProductKey] ),
                MATCHBY( FactInternetSales[SalesOrderNumber], FactInternetSales[SalesOrderLineNumber] )
            ),
            FactInternetSales[SalesAmount]
        )
)

Mengembalikan tabel FactInternetSales dengan menambahkan kolom, yang menunjukkan, untuk setiap penjualan, jumlah penjualan sebelumnya, dari produk yang sama, dalam urutan menurun dari jumlah penjualan, dengan penjualan saat ini diidentifikasi oleh SalesOrderNumber dan SalesOrderLineNumber. Tanpa MATCHBY, kueri akan mengembalikan kesalahan karena tidak ada kolom kunci dalam tabel FactInternetSales.

Contoh 4 - perhitungan visual

Kueri DAX penghitungan visual berikut:

SalesRelativeToPreviousMonth = [SalesAmount] - CALCULATE(SUM([SalesAmount]), OFFSET(-1, ROWS, HIGHESTPARENT))

Mengembalikan selisih total penjualan antara setiap bulan dan yang sebelumnya dalam tahun yang sama.

Cuplikan layar di bawah ini memperlihatkan matriks visual dan ekspresi perhitungan visual:

Perhitungan visual DAX

INDEX
ORDERBY
PARTITIONBY
MATCHBY
WINDOW
RANK
ROWNUMBER