0

目标:删除指定用户访问级别以上的所有级别。

示例:我在 where 子句中有一个用户可以访问 3717 区。在那个区下,有几个部门(图中涂黑)。我正在尝试进行查询,列出 3717 区、3717 区下列出的部门,以及该地区的同级区(区 3701 至 3718)。

我现在所拥有的:我有一个查询,列出了 3717 区、3717 区下列出的部门,以及该地区的兄弟姐妹仅适用于该地区(3701 至 3718 区)。此外,它还列出了该区域(区域 3)、区域 3 及其兄弟区域(区域 3、4、5)、公司、已删除、无效和全部的父区域、所有区域。

我正在尝试修改查询的聚合部分,但没有得到任何结果。

屏幕截图中突出显示的是我唯一感兴趣的内容。如果用户可以访问 Region 35,我希望结果集有 Region 30 到 39,Districts only 在 Region 35 下,所有 Districts 下的部门只在 Region 35 下. 请参考图片。请帮忙

WITH
MEMBER [Measures].[ParameterValue] AS
    [Organization].[Organization Hierarchy].CurrentMember.UniqueName
MEMBER [Measures].[ParameterCaption] AS
    iif([Organization].[Organization Hierarchy].CurrentMember.Level.Ordinal =1,"",[Organization].[Organization Hierarchy].CurrentMember.Properties( "Organization Id" ) + " - ") +
    [Organization].[Organization Hierarchy].CurrentMember.Name  
MEMBER [Measures].[ParameterLevel] AS
        [Organization].[Organization Hierarchy].CurrentMember.Level.Ordinal
MEMBER [Measures].[User Count] AS
    [Measures].[User Organization Count]
    -
    Aggregate(
        {[Organization].[Organization Hierarchy].parent
        ,DESCENDANTS([Organization].[Organization Hierarchy])}
        ,[Measures].[User Organization Count]
    )
SELECT 
{
    [Measures].[ParameterValue]
    ,[Measures].[ParameterCaption]
    ,[Measures].[ParameterLevel]
}
ON COLUMNS,
FILTER
(
    DESCENDANTS([Organization].[Organization Hierarchy],5, SELF_AND_BEFORE)
    ,[Measures].[User Count]
)
ON ROWS
FROM [Cube]
WHERE
(
[Users].[User Name].&       [User_with_access_to_district_level__this_user_is_assgined_to_district_3718],
[Organization].[Organization Hierarchy Name].&[typeofhierarchy]
)

请参考这张图片。

4

1 回答 1

2

我相信您需要使用 UNION 构建您想要的集合。

UNION
(
    //This bit gets you the children (districts)
    DESCENDANTS([Organization].[Organization Hierarchy].&[35],1, AFTER),
    //This bit gets you the siblings, including self
    [Organization].[Organization Hierarchy].&[35].SIBLINGS
)
ON ROWS
于 2012-10-08T13:46:07.167 回答