Manipulasi Data MDX - Memahami Urutan Pass dan Urutan Pemecahan Masalah
Berlaku untuk: SQL Server Analysis Services Azure Analysis Services
Fabric/Power BI Premium
Ketika kubus dihitung sebagai hasil dari skrip MDX, kubus dapat melalui banyak tahap komputasi tergantung pada penggunaan berbagai fitur terkait perhitungan. Masing-masing tahap ini disebut sebagai lulus perhitungan.
Lulus perhitungan dapat disebut dengan posisi ordinal, yang disebut nomor lulus perhitungan. Jumlah pass perhitungan yang diperlukan untuk sepenuhnya menghitung semua sel kubus disebut sebagai perhitungan melewati kedalaman kubus.
Tabel fakta dan data tulis balik hanya berdampak pada pass 0. Skrip mengisi data setelah lulus 0; setiap penugasan dan menghitung pernyataan dalam skrip membuat pass baru. Di luar skrip MDX, referensi ke pass absolut 0 mengacu pada pass terakhir yang dibuat oleh skrip untuk kubus.
Anggota terhitung dibuat sama sekali, tetapi ekspresi diterapkan pada pass saat ini. Pass sebelumnya berisi pengukuran terhitung, tetapi dengan nilai null.
Selesaikan Urutan
Urutan pemecahan menentukan prioritas perhitungan jika terjadi ekspresi yang bersaing. Dalam satu pass, urutan pemecahan menentukan dua hal:
Urutan di mana Microsoft SQL Server SQL Server Analysis Services mengevaluasi dimensi, anggota, anggota terhitung, rollup kustom, dan sel terhitung.
Urutan di mana SQL Server Analysis Services menghitung anggota kustom, anggota terhitung, rollup kustom, dan sel terhitung.
Anggota dengan urutan pemecahan tertinggi lebih diutamakan.
Catatan
Pengecualian untuk prioritas ini adalah fungsi Agregat. Anggota terhitung dengan fungsi Agregat memiliki urutan pemecahan yang lebih rendah daripada pengukuran terhitung berpotingan.
Selesaikan Nilai Pesanan dan Prioritas
Nilai urutan pemecahan dapat berkisar dari -8181 hingga 65535. Dalam rentang ini, beberapa nilai urutan pemecahan sesuai dengan jenis perhitungan tertentu, seperti yang diperlihatkan dalam tabel berikut.
Penghitungan | Selesaikan Urutan |
---|---|
Rumus anggota kustom | -5119 |
Operator Tunggal | -5119 |
Perhitungan total visual | -4096 |
Semua perhitungan lainnya (jika tidak ditentukan lain) | 0 |
Sangat disarankan agar Anda hanya menggunakan bilangan bulat positif saat mengatur nilai urutan pemecahan masalah. Jika Anda menetapkan nilai yang lebih rendah dari nilai urutan pemecahan masalah yang diperlihatkan dalam tabel sebelumnya, pass penghitungan bisa menjadi tidak dapat diprediksi. Misalnya, perhitungan untuk anggota terhitung menerima nilai urutan penyelesaian yang lebih rendah dari nilai rumus rollup kustom default -5119. Nilai urutan pemecahan yang rendah seperti itu menyebabkan anggota terhitung dihitung sebelum rumus rollup kustom, dan dapat menghasilkan hasil yang salah.
Membuat dan Mengubah Urutan Pemecahan Masalah
Di Kubus Designer, pada Panel Perhitungan, Anda bisa mengubah urutan pemecahan untuk anggota terhitung dan sel terhitung dengan mengubah urutan perhitungan.
Di MDX, Anda dapat menggunakan kata kunci SOLVE_ORDER untuk membuat atau mengubah anggota terhitung dan sel terhitung.
Contoh Urutan Pemecahan Masalah
Untuk mengilustrasikan potensi kompleksitas urutan pemecahan masalah, rangkaian kueri MDX berikut dimulai dengan dua kueri yang masing-masing secara individual tidak memiliki masalah urutan penyelesaian. Kedua kueri ini kemudian digabungkan ke dalam kueri yang memerlukan urutan pemecahan masalah.
Kueri 1-Perbedaan Pendapatan dan Pengeluaran
Untuk kueri MDX pertama, hitung perbedaan penjualan dan biaya untuk setiap tahun dengan membuat kueri MDX sederhana yang mirip dengan contoh berikut:
WITH
MEMBER
[Date].[Calendar].[Year Difference] AS ([Date].[Calendar].[Calendar Year].&[2008] - [Date].[Calendar].[Calendar Year].&[2007] )
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Internet Total Product Cost] }
ON COLUMNS ,
{ [Date].[Calendar].[Calendar Year].&[2007], [Date].[Calendar].[Calendar Year].&[2008], [Date].[Year Difference] }
ON ROWS
FROM [Adventure Works]
Dalam kueri ini, hanya ada satu anggota yang dihitung, Year Difference
. Karena hanya ada satu anggota yang dihitung, urutan penyelesaian bukan masalah, selama kubus tidak menggunakan anggota terhitung.
Kueri MDX ini menghasilkan tataan hasil yang mirip dengan tabel berikut.
Jumlah Penjualan Internet | Total Biaya Produk Internet | |
---|---|---|
CY 2007 | $9.791.060,30 | $5.718.327,17 |
CY 2008 | $9.770.899,74 | $5.721.205,24 |
Perbedaan Tahun | ($20.160,56) | $2.878,06 |
Kueri 2 Persentase Pendapatan setelah Pengeluaran
Untuk kueri kedua, hitung persentase pendapatan setelah pengeluaran untuk setiap tahun menggunakan kueri MDX berikut:
WITH
MEMBER
[Measures].[Profit Margin] AS
([Measures].[Internet Sales Amount] - [Measures].[Internet Total Product Cost] ) / [Measures].[Internet Sales Amount] ,
FORMAT_STRING="Percent"
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Internet Total Product Cost], [Measures].[Profit Margin] }
ON COLUMNS ,
{ [Date].[Calendar].[Calendar Year].&[2007], [Date].[Calendar].[Calendar Year].&[2008] }
ON ROWS
FROM [Adventure Works]
Kueri MDX ini, seperti yang sebelumnya, hanya memiliki satu anggota terhitung, Profit Margin
, dan karenanya tidak memiliki komplikasi urutan pemecahan.
Kueri MDX ini menghasilkan tataan hasil yang sedikit berbeda, mirip dengan tabel berikut.
Jumlah Penjualan Internet | Total Biaya Produk Internet | Margin Keuntungan | |
---|---|---|---|
CY 2007 | $9.791.060,30 | $5.718.327,17 | 41.60% |
CY 2008 | $9.770.899,74 | $5.721.205,24 | 41.45% |
Perbedaan tataan hasil antara kueri pertama dan kueri kedua berasal dari perbedaan penempatan anggota terhitung. Dalam kueri pertama, anggota terhitung adalah bagian dari sumbu BARIS, bukan sumbu KOLOM yang diperlihatkan dalam kueri kedua. Perbedaan penempatan ini menjadi penting dalam kueri berikutnya, yang menggabungkan dua anggota terhitung dalam satu kueri MDX.
Selisih Kueri 3 Tahun Gabungan dan Perhitungan Pendapatan Bersih
Dalam kueri akhir ini menggabungkan kedua contoh sebelumnya ke dalam satu kueri MDX, urutan pemecahan menjadi penting karena perhitungan pada kolom dan baris. Untuk memastikan bahwa perhitungan terjadi dalam urutan yang benar, tentukan urutan di mana perhitungan terjadi dengan menggunakan kata kunci SOLVE_ORDER .
Kata kunci SOLVE_ORDER menentukan urutan penyelesaian anggota terhitung dalam kueri MDX atau perintah CREATE MEMBER . Nilai bilangan bulat yang digunakan dengan kata kunci SOLVE_ORDER relatif, tidak perlu dimulai dari nol, dan tidak perlu berturut-turut. Nilai hanya memberi tahu MDX untuk menghitung anggota berdasarkan nilai yang berasal dari menghitung anggota dengan nilai yang lebih tinggi. Jika anggota terhitung ditentukan tanpa kata kunci SOLVE_ORDER , nilai default anggota terhitung tersebut adalah nol.
Misalnya, jika Anda menggabungkan perhitungan yang digunakan dalam dua contoh kueri pertama, dua anggota terhitung, Year Difference
dan Profit Margin
, bersinggungan pada satu sel dalam himpunan data hasil contoh kueri MDX. Satu-satunya cara untuk menentukan bagaimana SQL Server Analysis Services akan mengevaluasi sel ini adalah dengan urutan pemecahan. Rumus yang digunakan untuk membuat sel ini akan menghasilkan hasil yang berbeda tergantung pada urutan pemecahan dari dua anggota yang dihitung.
Pertama, coba gabungkan perhitungan yang digunakan dalam dua kueri pertama dalam kueri MDX berikut:
WITH
MEMBER
[Date].[Calendar].[Year Difference] AS ([Date].[Calendar].[Calendar Year].&[2008] - [Date].[Calendar].[Calendar Year].&[2007] ) ,
SOLVE_ORDER = 1
MEMBER
[Measures].[Profit Margin] AS
( [Measures].[Internet Sales Amount] - [Measures].[Internet Total Product Cost] ) / [Measures].[Internet Sales Amount] ,
FORMAT_STRING="Percent" ,
SOLVE_ORDER = 2
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Internet Total Product Cost], [Measures].[Profit Margin] }
ON COLUMNS ,
{ [Date].[Calendar].[Calendar Year].&[2007], [Date].[Calendar].[Calendar Year].&[2008], [Date].[Year Difference] }
ON ROWS
FROM [Adventure Works]
Dalam contoh kueri MDX gabungan ini, Profit Margin
memiliki urutan pemecahan tertinggi, sehingga lebih diutamakan saat kedua ekspresi berinteraksi. SQL Server Analysis Services mengevaluasi sel yang dimaksud dengan menggunakan Profit Margin
rumus . Hasil perhitungan berlapis ini, seperti yang diperlihatkan dalam tabel berikut ini.
Jumlah Penjualan Internet | Total Biaya Produk Internet | Margin Keuntungan | |
---|---|---|---|
CY 2007 | $9.791.060,30 | $5.718.327,17 | 41.60% |
CY 2008 | $9.770.899,74 | $5.721.205,24 | 41.45% |
Perbedaan Tahun | ($20.160,56) | $2.878,06 | 114.28% |
Hasil dalam sel bersama didasarkan pada rumus untuk Profit Margin
. Artinya, SQL Server Analysis Services menghitung hasil dalam sel bersama dengan Year Difference
data, menghasilkan rumus berikut (hasilnya dibulatkan untuk kejelasan):
((9,770,899.74 - 9,791,060.30) - (5,721,205.24 - 5,718,327.17)) / (9,770,899.74 - 9,791,060.30) = 1.14275744
atau
(23,038.63) / (20,160.56) = 114.28%
Ini jelas salah. Namun, SQL Server Analysis Services menghitung hasil dalam sel bersama secara berbeda jika Anda mengalihkan pesanan pemecahan untuk anggota terhitung dalam kueri MDX. Kueri MDX gabungan berikut membalikkan urutan pemecahan masalah untuk anggota terhitung:
WITH
MEMBER
[Date].[Calendar].[Year Difference] AS ([Date].[Calendar].[Calendar Year].&[2008] - [Date].[Calendar].[Calendar Year].&[2007] ) ,
SOLVE_ORDER = 2
MEMBER
[Measures].[Profit Margin] AS
( [Measures].[Internet Sales Amount] - [Measures].[Internet Total Product Cost] ) / [Measures].[Internet Sales Amount] ,
FORMAT_STRING="Percent" ,
SOLVE_ORDER = 1
SELECT
{[Measures].[Internet Sales Amount], [Measures].[Internet Total Product Cost], [Measures].[Profit Margin] }
ON COLUMNS ,
{ [Date].[Calendar].[Calendar Year].&[2007], [Date].[Calendar].[Calendar Year].&[2008], [Date].[Year Difference] }
ON ROWS
FROM [Adventure Works]
Saat urutan anggota terhitung telah dialihkan, SQL Server Analysis Services menggunakan Year Difference
rumus untuk mengevaluasi sel, seperti yang diperlihatkan dalam tabel berikut ini.
Jumlah Penjualan Internet | Total Biaya Produk Internet | Margin Keuntungan | |
---|---|---|---|
CY 2007 | $9.791.060,30 | $5.718.327,17 | 41.60% |
CY 2008 | $9.770.899,74 | $5.721.205,24 | 41.45% |
Perbedaan Tahun | ($20.160,56) | $2.878,06 | (0.15%) |
Karena kueri ini menggunakan Year Difference
rumus dengan Profit Margin
data, rumus untuk sel bersama menyerupan perhitungan berikut:
(($9,770,899.74 - 5,721,205.24) / $9,770,899.74) - ((9,791,060.30 - 5,718,327.17) / 9,791,060.30) = -0.15
Atau
0.4145 - 0.4160= -0.15
Pertimbangan Tambahan
Urutan pemecahan dapat menjadi masalah yang sangat kompleks untuk ditangani, terutama dalam kubus dengan jumlah dimensi tinggi yang melibatkan anggota terhitung, rumus rollup kustom, atau sel terhitung. Saat SQL Server Analysis Services mengevaluasi kueri MDX, SQL Server Analysis Services memperhitungkan nilai urutan pemecahan untuk semua yang terlibat dalam pass tertentu, termasuk dimensi kubus yang ditentukan dalam kueri MDX.
Lihat juga
CalculationCurrentPass (MDX)
CalculationPassValue (MDX)
Pernyataan CREATE MEMBER (MDX)
Memanipulasi Data (MDX)
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk