Ssas MDX-如何为每位家长获取最近的孙子女?

Ssas MDX-如何为每位家长获取最近的孙子女?,ssas,mdx,Ssas,Mdx,我有一个问题,那就是如何在从孩子的父母那里为每个父母汇总事实金额的同时,获取最近孙子的维度信息(如果这有意义,我对SSAS和MDX非常陌生,所以请耐心听我说,我会进一步解释) 我不确定如何在维度中构造表(使用dim键或group键)或属性关系,也不确定如何高效地搜索多维数据集,以块模式而不是逐单元搜索 这里是土地的布局: 事实表有5亿多行,并对财务数据进行了调整,所以从一个日期到时间的开始求和是我目前正在处理的 7000多万行的Dimenion表有一个帐户(祖父母),可以有1:M个索赔(父母),

我有一个问题,那就是如何在从孩子的父母那里为每个父母汇总事实金额的同时,获取最近孙子的维度信息(如果这有意义,我对SSAS和MDX非常陌生,所以请耐心听我说,我会进一步解释)

我不确定如何在维度中构造表(使用dim键或group键)或属性关系,也不确定如何高效地搜索多维数据集,以块模式而不是逐单元搜索

这里是土地的布局:

事实表有5亿多行,并对财务数据进行了调整,所以从一个日期到时间的开始求和是我目前正在处理的

7000多万行的Dimenion表有一个帐户(祖父母),可以有1:M个索赔(父母),这也是类型2,具有索赔级别信息(孙辈?),记录每个索赔发生维度更改时的开始和结束日期。在孙子级别有一个Dim密钥,在声明(父)级别有一个组密钥

到目前为止,我已经尝试在Fact和Dim之间使用一个桥接表,并使用了以下MDX逻辑,该逻辑对于非常小的帐户可以正常工作,但对于较大的帐户不能很好地扩展。需要注意的一点是,较大的账户可能有大约60000个索赔


有了下面的内容,我们的思路是获得每个声明的尾部我认为您可以通过减少交叉连接的大小来优化
FilterRecBeginDate
的计算。您还可以计算一次过滤器:

with 
set [tmp] as 
    CrossJoin(
        Filter([CLAIM].[Claim Record Begin Date].Children, 
               [CLAIM].[Claim Record Begin Date].CurrentMember.Name <= '2009-08-23'
        ), 
        [CLAIM].[Claim Status Code].Children
    )
set [FilterRecBeginDate] as 
    Generate([CLAIM].[Claim Number].Children,
        Tail(
            CrossJoin({[CLAIM].[Claim Number].CurrentMember}, [tmp])
        )
    )
与
将[tmp]设置为
交叉连接(
筛选器([CLAIM].[CLAIM Record Begin Date]。子项,
[索赔].[索赔记录开始日期].CurrentMember.Name
with 
set [tmp] as 
    CrossJoin(
        Filter([CLAIM].[Claim Record Begin Date].Children, 
               [CLAIM].[Claim Record Begin Date].CurrentMember.Name <= '2009-08-23'
        ), 
        [CLAIM].[Claim Status Code].Children
    )
set [FilterRecBeginDate] as 
    Generate([CLAIM].[Claim Number].Children,
        Tail(
            CrossJoin({[CLAIM].[Claim Number].CurrentMember}, [tmp])
        )
    )