我对多对多维度还很陌生,但我有一个场景要解决,这提出了几个我自己无法解决的问题……所以非常感谢您的帮助!
场景是:
- 有一个父子类别维度,它具有递归类别层次结构,其中设置了 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 语句,因为它们保持完全相同)导致问题,但我不知道是什么。有任何想法吗?
干杯,亚历克斯