我有一个问题,那就是我如何才能获得最近一个孙子的维度信息,同时从孩子的父母那里获得每个父母的事实金额(如果这是有意义的,我对SSAS和MDX非常陌生,所以请耐心等待,我将进一步解释)。
我不太确定如何在维度中构建表(使用dim key或group key)或属性关系,以及如何有效地搜索多维数据集,最好是在块模式中,而不是逐个单元格。
情况是这样的:
带有500+million行的事实表,对财务数据进行了调整,因此从日期到时间的开始进行求和是我目前正在使用的。
70+million行的维表有一个帐户(祖父母),它可以有1:M的索赔(父级),它也是类型2,具有索赔级别信息(孙子?)记录每个索赔发生维度更改时的开始日期和结束日期。在子级有一个Dim键,在声明(父)级有一个组键。
到目前为止,我已经尝试在事实和Dim之间使用桥接表,并使用以下MDX逻辑,对于非常小的帐户可以工作,但对于较大的帐户不能很好地扩展。需要注意的一点是,较大的帐户可能有大约60,000个索赔。
对于以下内容,思考过程是获取传入日期的每个claim <=的尾部。然后将此信息用于事实数据切片,并通过组密钥(不是dim密钥,因为需要总计的财务数据)对每个索赔的数据求和。
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.)如何以不同的方式构造多维数据集和/或Dim属性关系,以更好地支持这种类型的查询,只给出一个帐户和日期作为参数?
2.)我使用过MDX Generate和Desendants,它们似乎都是一个接一个地循环。也许循环是唯一的选择,但我希望有更好的方法。是否可以通过以不同方式编写MDX来利用块模式?
提前谢谢。
发布于 2012-09-14 22:45:15
我认为你可以通过减小交叉连接的大小来优化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])
)
)https://stackoverflow.com/questions/12426113
复制相似问题