SSAS分组层次结构

时间:2015-03-16 12:31:19

标签: reporting-services ssas mdx olap

在SSAS项目中,我有以下表格:

  • EntityGroupType定义了不同类型的群组
  • EntityGroup定义组(上述类型之一)

单个Entity可以与一个或多个组相关联。成员资格在名为EntityGroupMembership的表中定义。

我还定义了一个名为Entity Group的维度,其中包含一个层次结构:Entity Group Type -> Entity Group

对于特定的SSRS报告,我想将实体分为两个级别:第一个是类型1的组,然后是类型2的组。这样的事情:

SELECT
    [Measures].[Entity Count] ON AXIS(0),
    {(
        [Entity Group].[All Entity Groups].&[1].Children * 
        [Entity Group].[All Entity Groups].&[2].Children
    )} ON AXIS(1)
FROM [Cube1]

如果我尝试这样做,我会收到以下错误:

  

所有实体组层次结构在Crossjoin函数中多次使用

我理解这个错误的逻辑,但我怎么能实现我的目标呢?


编辑:我试图澄清这个场景以及我想要实现的目标。

EntityGroupType定义了类型组(类似于类别):

GroupTypeID GroupTypeDesc
----------- ---------------------
1           Groups based on Color
2           Groups based on Shape

EntityGroup定义实际群组

GroupID     GroupTypeID GroupName
----------- ----------- ---------
1           1           Red
2           1           Blue
3           1           Yellow
4           2           Circle
5           2           Rectangle
6           2           Triangle

EntityGroupMembership定义实体与组的零/更多关联:

EntityID    GroupID     EntityDesc
----------- ----------- ----------------
1           2           Red circle
1           4           Red circle
2           3           Yellow rectangle
2           5           Yellow rectangle
3           3           Yellow circle
3           4           Yellow circle

我的维Entity Group有一个层次结构:
Entity Group Hierarchy

由于单个实体可以是多个组的成员,因此我首先要根据单个类型的组进行度量,然后根据其中的第二类组进行度量。这就像交叉加入[所有类型1的组] * [所有类型2的组]。 输出将是这样的:

                Entity Count
--------- ------ ------------
Circle    All    3
Circle    Red    0
Circle    Blue   1
Circle    Yellow 2
Rectangle All    5
Rectangle Red    5
Rectangle Blue   0
Rectangle Yellow 0
Triangle  All    2
Triangle  Red    1
Triangle  Blue   1
Triangle  Yellow 0

请注意,属性Entity Group出现两次,这意味着我实际上尝试交换一个属性本身(这就是为什么我提到我理解错误的逻辑) 。
如果单凭MDX无法实现这一目标,我会非常乐意听到任何建议。

谢谢!

0 个答案:

没有答案