Reporting services 按维度筛选度量值会导致与计算成员中的IgnoreUnrelatedDimensions=True类似的行为

Reporting services 按维度筛选度量值会导致与计算成员中的IgnoreUnrelatedDimensions=True类似的行为,reporting-services,ssrs-2008,ssas,mdx,ssas-2008,Reporting Services,Ssrs 2008,Ssas,Mdx,Ssas 2008,我试图使用SSAS定义SSRS中的计算成员,SSAS是对维度值进行过滤的度量值的总和。这可以很好地工作,除非我在浏览器中按过滤后的标注查看计算成员。与我期望的null值不同,总计在行上重复,类似于在度量值组上将IgnoreUnrelatedDimensions设置为True时发生的情况 我怎样才能解决这个问题 SSRS中“计算”选项卡上定义的计算成员示例: AGGREGATE({[Cow].[Hoof Location].[Front]}, [Measures].[Count]) 当对照除[C

我试图使用SSAS定义SSRS中的计算成员,SSAS是对维度值进行过滤的度量值的总和。这可以很好地工作,除非我在浏览器中按过滤后的标注查看计算成员。与我期望的
null
值不同,总计在行上重复,类似于在度量值组上将
IgnoreUnrelatedDimensions
设置为
True
时发生的情况

我怎样才能解决这个问题

SSRS中“计算”选项卡上定义的计算成员示例:

AGGREGATE({[Cow].[Hoof Location].[Front]}, [Measures].[Count])
当对照除
[Cow].[Hoof Location]
以外的任何对象查看时,此选项都可以正常工作。但按此维度查看时,计数会跨行重复。

您可以尝试

IIf([Cow].[Hoof Location].CurrentMember IS [Cow].[Hoof Location].[All],
    AGGREGATE({[Cow].[Hoof Location].[Front]}, [Measures].[Count]),
    NULL
   )

可能您必须使
All
成员的名称与多维数据集中的名称相适应。

下面是一个MDX计算的度量,它使用了您想要的技巧:

我使用了我的基础,因此请用您自己的集合替换
[创建日期].[创建日期].[年].&[2014]
,并用维度级别替换
[创建日期].[创建日期].[月]
。这是一个标准的“年-月-日”维度

CREATE MEMBER CURRENTCUBE.[Measures].[TestAgg]
 AS
    IIF(
        Intersect(
            [Create Date].[Create Date].CurrentMember
            ,Exists(
                Descendants(
                    [Create Date].[Create Date].[Year].&[2014]
                    ,[Create Date].[Create Date].[Month]
                    ,SELF_BEFORE_AFTER
                )
            )
        ).Count > 0
        ,[Measures].[Count]
        ,IIF(
            [Create Date].[Create Date].CurrentMember is [Create Date].[Create Date].[All]
            ,AGGREGATE(
                {[Create Date].[Create Date].[Year].&[2014]}
                ,[Measures].[Count])
            ,null
        )
    ),
VISIBLE = 1;
以下是一些解释:

  • 我使用
    子体
    来组织必要的成员集
  • Intersect
    用于了解维度的当前成员是否处于此筛选条件下
  • 然后,第一个
    IIF
    用于显示其他年份的空白
  • 最后一个
    IIF
    用于总计
  • 以及该措施行为的一些图片:

    如果您希望在2014年的每个级别及其子级别上使用相同的值(但其他级别为空白),请使用

    SUM
    。但是我想对于这个成员和孩子来说,就像你之前说的那样,它看起来像
    IgnoreUnrelatedDimensions=True

    还有一个提示:如果在另一个级别上有筛选,您可以使用
    子体
    级别和标志参数(
    之后
    之前
    自身和之后
    等)
    本文有助于理解此技术:

    希望这将有助于解决问题

    更新 对于最低级别,最好像这样使用上升点:

    CREATE MEMBER CURRENTCUBE.[Measures].[TestAgg2]
     AS
        IIF(
        Intersect(
            [Create Date].[Create Date].CurrentMember,
            Exists(
                Ascendants([Create Date].[Create Date].[Day].&[20140214])
            )
        ).Count > 0,
        (
            [Create Date].[Create Date].[Day].&[20140214],
            [Measures].[Count]
        ),
        IIF(
            [Create Date].[Create Date].CurrentMember is [Create Date].[Create Date].[All],
            AGGREGATE(
                {[Create Date].[Create Date].[Day].&[20140214]},
                [Measures].[Count]
            ),
            null
        )
    ),
    VISIBLE = 1;
    
    CREATE MEMBER CURRENTCUBE.[Measures].[TestAgg2]
     AS
        IIF(
        Intersect(
            [Create Date].[Create Date].CurrentMember,
            Exists(
                Ascendants([Create Date].[Create Date].[Day].&[20140214])
            )
        ).Count > 0,
        (
            [Create Date].[Create Date].[Day].&[20140214],
            [Measures].[Count]
        ),
        IIF(
            [Create Date].[Create Date].CurrentMember is [Create Date].[Create Date].[All],
            AGGREGATE(
                {[Create Date].[Create Date].[Day].&[20140214]},
                [Measures].[Count]
            ),
            null
        )
    ),
    VISIBLE = 1;