MDX - 如何获得每个父母的最新孙子?

时间:2012-09-14 14:00:31

标签: ssas mdx

关于我如何获得最近孙子的维度信息,同时从孩子的父母那里汇总事实数量,对于每个父母,我都有问题(如果这是有道理的,我对SSAS和MDX很新,所以请忍受和我一起,我会进一步解释)。

我不确定如何构建我的表(使用暗键或组键)或维度中的属性关系,以及如何有效地搜索多维数据集,最好是在块模式下而不是逐个单元格。 / p>

以下是这片土地:

事实表中有500多万行,并对财务进行了调整,因此从日期到开始时间总结是我目前正在处理的事情。

70万行的Dimenion表有一个账户(祖父母),可以有1:M索赔(父母),这也是类型2,具有索赔等级信息(孙子?),当维度改变时有记录开始和结束日期每个个人索赔都会发生。孙子级别有一个Dim Key,声明(父级)级别有一个组密钥。

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

通过以下内容,思考过程是为每个索赔获得尾部< =传入的日期。 然后将此信息用于事实数据切片,并将每个索赔的数据汇总到通过组密钥传递的日期(不是暗淡的密钥,因为需要总计财务)。

with 
set [FilterRecBeginDate] as 
Generate([CLAIM].[Claim Number].Children,
Tail(Filter(
    CrossJoin([CLAIM].[Claim Number].CurrentMember,
          {[CLAIM].[Claim Record Begin Date].Children},
          {[CLAIM].[Claim Status Code].Children}
          )
, [CLAIM].[Claim Record Begin Date].CurrentMember.Name <= '2009-08-23'
)
)
)
select 
{[Measures].[Paid Amount], 
 [Measures].[Paid Loss Amount]}on columns,
non empty [FilterRecBeginDate] on rows
from [Cube]
where ([CALENDAR DATE].[Date].&[19000101]:[CALENDAR DATE].[Date].&[2009-08-23T00:00:00]) *
{([CLAIM].[Claimant Name].&[xxxxx])}

1.。)如果仅将Account和Date作为参数,我如何以不同的方式构建多维数据集和/或Dim属性关系以更好地支持此类查询?

2。)我玩过MDX Generate和Desendants,它们似乎都是逐个循环的。也许循环是唯一的选择,但我希望有更好的方法。可以通过不同的方式编写MDX来利用块模式吗?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我认为您可以通过减少交叉连接的大小来优化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])
        )
    )