多对多维度 - 需要MDX帮助

时间:2009-09-23 07:12:03

标签: ssas mdx many-to-many

我对多对多维度很新,但我有一个解决方案,这引发了一些我无法解决的问题......所以你的帮助将受到高度赞赏!

场景是:

  1. 有一个父子类别维度,其具有递归类别层次结构,其中包含NonLeafDataVisible set
  2. 有一个常规的Products维度,用于对事实表进行切片
  3. 有一个多对多的ProductCategory表桥,它定义了两者之间的关系。需要注意的重要一点是,产品可以属于类别层次结构的任何级别 - 即特定类别可以同时具有 - 直接分配的产品和子类别。
  4. 有一个事实表,它将FK保存到已售出的产品中,并将FK保存到其类别中。需要FK,因为
  5. 我在BIDS中建模了所有这些,在每个维度和事实之间设置维度用法,类别和交易表之间的多对多关系到位。换句话说,一切似乎都没问题。

    我现在需要编写一个MDX,我将用它来创建一个显示类似内容的报告:

    Lev1 Lev2 Lev3 Prod  Count
    
    -A    
       -AA               6
          -AA            2
                  P6     1
                  P5     1
          -AAA           2
                  P1     1
                  P2     1
          -AAB           2
                  P3     1
                  P4     1
       +BB   
    

    以下MDX几乎可以返回我需要的内容:

    SELECT 
    [Measures].[SALES Count] ON COLUMNS, 
    NONEMPTYCROSSJOIN(
          DESCENDANTS([Category].[PARENTCATEGORY].[Level 01].MEMBERS),
          [Product].[Prod KEY].[Prod KEY].MEMBERS,
          [Measures].[Measures].[Bridge Distinct Count],
          [Measures].[SALES Count],
          2) ON ROWS
    FROM [Sales]
    

    我遇到的问题是,对于每个非叶子类别,交叉连接返回与为其销售的每个产品+所有子类别的有效交集。因此,结果集包含太多冗余数据,而且我找不到过滤掉SSRS报告本身冗余的方法。

    有关如何重写MDX以便它只返回上面的结果集的想法吗?

    另一个问题是,如果我创建一个角色扮演类别维度,我设置为直接切片事务数据,那么我在浏览多维数据集时得到的数字完全关闭......似乎SSAS在处理过程中正在做某事(但它不是它向OLTP发出的SQL语句,因为它们仍然完全相同)导致问题,但我不知道是什么。有什么想法吗?

    干杯, 亚历

1 个答案:

答案 0 :(得分:0)

我想我找到了问题的解决方案,使用以下查询:

WITH 
  MEMBER [Measures].[Visible] AS 
    IsLeaf([DIM Eco Res Category].[PARENTCATEGORY].CurrentMember) 
  MEMBER [Measures].[CurrentProd] AS 
    IIF
    (
      [Measures].[Visible]
     ,[DIM Eco Res Product].[Prod KEY].CurrentMember.Name
     ,""
    ) 
SELECT 
  {
    [Measures].[Visible]
   ,[Measures].[CurrentProd]
   ,[Measures].[FACT PRODSALES Count]
  } ON COLUMNS
 ,NonEmptyCrossJoin
  (
    Descendants
    (
      [DIM Eco Res Product].[Prod KEY].[(All)],
     ,Leaves
    )
   ,Descendants([DIM Eco Res Category].[PARENTCATEGORY].[(All)])
   ,[Measures].[FACT PRODSALES Count]
   ,2
  )
  DIMENSION PROPERTIES 
    MEMBER_CAPTION
   ,MEMBER_UNIQUE_NAME
   ,PARENT_UNIQUE_NAME
   ,LEVEL_NUMBER
   ON ROWS
FROM [Sales];

在报告中,我使用[Measures]。[CurrentProd]作为产品列的来源,到目前为止似乎工作正常。