MDX: menghasilkan tingkat hierarki dalam laporan RDL

Katakanlah, kita memiliki sebuah kubus dengan dimensi 'Toko Kelontong', yang memiliki 2 tingkat hierarki:

  • Fruits & Vegetables Dep.
    • Fruits
    • Sayuran
    • Tomat
    • Mentimun
  • Departemen Roti
  • Departemen Susu.

Pertanyaannya adalah - bagaimana saya bisa menambahkan tingkat hierarki dalam kueri mdx dari laporan RDL, sehingga anggota 'Tomat' dan 'Mentimun' akan pindah ke tingkat ke-3 yang baru di bawah 'Sayuran' tingkat ke-2 asli. Saya perlu melakukan itu tanpa perubahan apa pun pada Cube, semuanya hanya melalui mdx murni.

Ketika saya mencoba membuat kumpulan terhitung untuk tingkat ke-3 yang diinginkan dan menggunakannya bersama dengan bagian hierarki awal lainnya seperti ini:

 WITH SET [Level 3] AS 
    case 
    when [Grocery store].[Hierarchy].[Level 2].CURRENTMEMBER = [Grocery store].[Hierarchy].&[Tomatoes] OR
         [Grocery store].[Hierarchy].[Level 2].CURRENTMEMBER = [Grocery store].[Hierarchy].&[Cucumbers]
    then [Grocery store].[Hierarchy].[Level 2].CURRENTMEMBER
    else null end

SELECT {[Measures].[Sales]} ON COLUMNS,

CrossJoin(Hierarchize( {[Grocery store].[Hierarchy].[Level 2]}
                      -{[Grocery store].[Hierarchy].&[Tomatoes],
                        [Grocery store].[Hierarchy].&[Cucumbers]}),
          [Level 3]) ON ROWS 

FROM [CUBE]

Saya menghadapi kesalahan saat mengatakan, bahwa fungsi crossjoin tidak dapat mengambil satu dimensi 'Toko Kelontong' yang sama dua kali.


person Globe    schedule 01.06.2015    source sumber
comment
apakah tujuanmu untuk menggabungkan dua anggota Tom & Cuc dengan anggota Level2? Jika ini yang ingin Anda capai maka Anda dapat membuat anggota khusus dalam dimensi berbeda yang setara dengan Tom & Cuc dan kemudian bergabung secara silang dengan anggota khusus baru ini dengan Level2 .... tetapi jika Anda ingin membuat level baru di skrip MDX maka itu tidak mungkin.   -  person whytheq    schedule 01.06.2015


Jawaban (1)


Membuat level baru dengan cepat tidak mungkin dilakukan.

Tidak bagus, tetapi salah satu cara untuk menyiasatinya adalah dengan membuat beberapa anggota terhitung baru dalam beberapa dimensi yang tidak terkait dan kemudian bergabung secara silang ke level dua.

WITH 
  MEMBER [Geography].[Tomatoes] AS ([Geography].[All],[Grocery store].[Hierarchy].&[Tomatoes])
  MEMBER [Geography].[Cucumbers] AS ([Geography].[All],[Grocery store].[Hierarchy].&[Cucumbers])
  SET [Level 3] AS 
    {
      [Geography].[Tomatoes],
      [Geography].[Cucumbers]
    }    
SELECT 
  {[Measures].[Sales]} ON COLUMNS,
  CrossJoin(
     Hierarchize( 
       {[Grocery store].[Hierarchy].[Level 2]}
       {[Grocery store].[Hierarchy].&[Tomatoes],
        [Grocery store].[Hierarchy].&[Cucumbers]}
      )
     ,[Level 3]
   ) ON ROWS 
FROM [CUBE]
person whytheq    schedule 01.06.2015
comment
Itu ide yang menarik. Saya mencoba kode Anda. Anggota terhitung Tom & Cuc dalam dimensi yang tidak terkait berhasil dibuat, seperti halnya kumpulan terhitung [Level 3], tetapi gabungan silang terakhir dari hierarki [Level 3] ini dengan kubus [Level 2] mengembalikan nol baris. Saya merasa proposal Anda benar-benar sesuai dengan yang saya cari dan saya sudah sangat dekat dengan solusinya sekarang. Saya akan terus menggali kodenya dan memposting di sini hasilnya, jika ada - person Globe; 03.06.2015
comment
setelah beberapa kali mencoba mengisi sel kosong dengan data - saya menyerah dan meninggalkan hierarki asli di laporan saya, baru saja membuat bobot font tebal untuk Buah dan Sayuran - di kisi rdl. Saya tetap menganggap @whytheq memberi saya arah yang tepat untuk upaya selanjutnya - person Globe; 22.06.2015
comment
Saya terus mempelajari anggota yang dihitung dalam set di utas terkait MDX: menghasilkan 2 anggota 'klien lama' & 'klien baru' dan menampilkan statistik penjualan untuk mereka (stackoverflow .com/questions/31436277/). @whytheq, alangkah baiknya jika Anda melihatnya - person Globe; 15.07.2015