关于我如何获得最近孙子的维度信息,同时从孩子的父母那里汇总事实数量,对于每个父母,我都有问题(如果这是有道理的,我对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来利用块模式吗?
提前致谢。
答案 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])
)
)