Bagikan melalui


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)