MDX: สร้างระดับลำดับชั้นภายในรายงาน RDL

สมมติว่า เรามีลูกบาศก์ที่มีมิติ 'ร้านขายของชำ' ซึ่งมีลำดับชั้น 2 ระดับ:

  • Fruits & Vegetables Dep.
    • Fruits
    • ผัก
    • มะเขือเทศ
    • แตงกวา
  • แผนกเบเกอรี่
  • แผนกนม

คำถามคือ - ฉันจะเพิ่มระดับลำดับชั้นภายในแบบสอบถาม mdx ของรายงาน RDL ได้อย่างไรเพื่อให้สมาชิก 'มะเขือเทศ' และ 'แตงกวา' ย้ายไปยังระดับที่ 3 ใหม่ภายใต้ 'ผัก' ระดับที่ 2 ดั้งเดิม ฉันต้องทำสิ่งนั้นโดยไม่มีการเปลี่ยนแปลงใด ๆ กับ Cube ทั้งหมดนี้ทำได้โดยใช้ mdx ล้วนๆ เท่านั้น

เมื่อฉันพยายามสร้างชุดจากการคำนวณสำหรับระดับที่ 3 ที่ต้องการ และใช้ร่วมกับส่วนที่เหลือของลำดับชั้นเริ่มต้นดังนี้:

 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]

ฉันพบข้อผิดพลาดที่บอกว่าฟังก์ชัน crossjoin ไม่สามารถใช้ 'ร้านขายของชำ' ขนาดเดียวกันได้สองครั้ง


person Globe    schedule 01.06.2015    source แหล่งที่มา
comment
เป้าหมายของคุณคือการเข้าร่วมสมาชิกสองคน Tom & Cuc กับสมาชิกระดับ 2 หรือไม่? หากนี่คือสิ่งที่คุณต้องการบรรลุผลสำเร็จ คุณสามารถสร้างสมาชิกแบบกำหนดเองในมิติอื่นที่เท่ากับ Tom & Cuc จากนั้นเข้าร่วมสมาชิกแบบกำหนดเองใหม่เหล่านี้ด้วย Level2 .... แต่ถ้าคุณต้องการสร้างระดับใหม่ใน สคริปต์ MDX จึงไม่สามารถทำได้   -  person whytheq    schedule 01.06.2015


คำตอบ (1)


การสร้างระดับใหม่ทันทีนั้นเป็นไปไม่ได้

ไม่สวย แต่วิธีหนึ่งในการหลีกเลี่ยงปัญหานี้คือการสร้างสมาชิกจากการคำนวณใหม่สองสามตัวในมิติที่ไม่เกี่ยวข้องกัน จากนั้นจึงข้ามการรวมไปยังระดับที่สอง

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
มันเป็นความคิดที่น่าสนใจ ฉันลองรหัสของคุณแล้ว สมาชิกที่คำนวณของ Tom & Cuc ในมิติที่ไม่เกี่ยวข้องจะถูกสร้างขึ้นสำเร็จ เช่นเดียวกับชุดที่คำนวณแล้ว [ระดับ 3] ทำ แต่การเชื่อมโยงข้ามขั้นสุดท้ายของลำดับชั้น [ระดับ 3] นี้ที่มีคิวบ์ [ระดับ 2] จะส่งคืนแถวเป็นศูนย์ ฉันรู้สึกว่าข้อเสนอของคุณคือสิ่งที่ฉันกำลังมองหาจริงๆ และตอนนี้ฉันก็ใกล้จะได้วิธีแก้ปัญหาแล้ว ฉันจะขุดโค้ดต่อไปและโพสต์ผลลัพธ์ที่นี่ถ้ามี - person Globe; 03.06.2015
comment
หลังจากพยายามหลายครั้งในการเติมข้อมูลลงในเซลล์ว่าง - ฉันยอมแพ้และทิ้งลำดับชั้นดั้งเดิมไว้ในรายงานของฉัน เพิ่งทำให้น้ำหนักตัวอักษรเป็นตัวหนาสำหรับ Fruites and ผัก - ในตาราง rdl ฉันยังถือว่า @whytheq ให้ทิศทางที่ถูกต้องแก่ฉันสำหรับความพยายามครั้งต่อไป - person Globe; 22.06.2015
comment
ฉันได้ศึกษาสมาชิกที่คำนวณภายในชุดในเธรดที่เกี่ยวข้อง MDX ต่อไป: สร้าง 'ลูกค้าเก่า' และ 'ไคลเอนต์ใหม่' สมาชิก 2 คน และแสดงสถิติการขายสำหรับพวกเขา (stackoverflow .com/questions/31436277/) @whytheq มันจะดีถ้าคุณดูมัน - person Globe; 15.07.2015