【发布时间】:2009-09-23 07:12:03
【问题描述】:
我对多对多维度还很陌生,但我有一个场景要解决,这提出了几个我自己无法解决的问题……所以非常感谢您的帮助!
场景是:
- 有一个父子类别维度,它具有递归类别层次结构和 NonLeafDataVisible 集
- 有一个常规的 Products 维度,用于对事实表进行切片
- 有一个桥接多对多 ProductCategory 表,它定义了两者之间的关系。需要注意的重要一点是,产品可以属于类别层次结构的任何级别,即特定类别可以同时具有直接分配的产品和子类别。
- 有一个事实事务表,其中包含已售产品的 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