0

我有关于如何获取最近孙子的维度信息的问题,同时从孩子的父母那里为每个父母汇总事实金额(如果这有意义,我对 SSAS 和 MDX 还很陌生,所以请多多包涵我'将进一步解释)。

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

这是土地的布局:

事实表包含 500 多万行,并对财务进行了调整,因此我目前正在使用从日期到开始的时间总和。

70+百万行的维度表有一个帐户(祖父),它可以有 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.) 如果仅给定帐户和日期作为参数,我如何以不同的方式构建多维数据集和/或暗淡属性关系以更好地支持此类查询?

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

提前致谢。

4

1 回答 1

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])
        )
    )
于 2012-09-14T14:45:14.907 回答