【问题标题】:Many to many dimension - MDX help needed多对多维度 - 需要 MDX 帮助
【发布时间】:2009-09-23 07:12:03
【问题描述】:

我对多对多维度还很陌生,但我有一个场景要解决,这提出了几个我自己无法解决的问题……所以非常感谢您的帮助!

场景是:

  1. 有一个父子类别维度,它具有递归类别层次结构和 NonLeafDataVisible 集
  2. 有一个常规的 Products 维度,用于对事实表进行切片
  3. 有一个桥接多对多 ProductCategory 表,它定义了两者之间的关系。需要注意的重要一点是,产品可以属于类别层次结构的任何级别,即特定类别可以同时具有直接分配的产品和子类别。
  4. 有一个事实事务表,其中包含已售产品的 FK 以及其类别的 FK。需要 FK,因为

我在 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 语句,因为它们保持完全相同)导致问题,但我不知道是什么。有什么想法吗?

干杯, 亚历克斯

【问题讨论】:

    标签: ssas mdx many-to-many


    【解决方案1】:

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

    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] 作为产品列的来源,目前看来效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-10
      相关资源
      最近更新 更多