1

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

场景是:

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

干杯,亚历克斯

4

1 回答 1

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] 作为产品列的来源,到目前为止似乎工作正常。

于 2009-09-23T13:53:05.633 回答