在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
有一个层次结构:
由于单个实体可以是多个组的成员,因此我首先要根据单个类型的组进行度量,然后根据其中的第二类组进行度量。这就像交叉加入[所有类型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无法实现这一目标,我会非常乐意听到任何建议。
谢谢!