SSAS使用时间智能解决本年累计、同比、环比【转载】
通常,我们需要使用MDX来定义本年累计、同比、环比等一系列基于时间维度的计算指标。但是这样有一个麻烦的地方就是比如我有50个基础指标,每个指标都需要本年累计,那我就需要写50遍下面的语句:
create member CURRENTCUBE.[MEASURES].[本年累计交易金额] as
sum(periodsToDate([日期].[日期层次结构].[年],[个贷].[日期].[日期层次结构].currentmember),[交易金额]),
FORMAT_STRING = "#,#.00",
VISIBLE = 1;
这样下来纯工作量是不是很大?
原谅我比较愚笨,后来才知道SSAS的时间智能可以很轻松的解决该问题:使用商业智能中的定义时间智能就可以很easy的解决该问题。它会生成一些列mdx计算脚本,其实我们还可以根据自己的需要有所增减,吼吼。
结果如下:
/*
开始 [统计日期].[日期层次] 层次结构的时间智能脚本。
*/
Create Member
CurrentCube.[统计日期].[日期范围计算].[本年度截止到现在]
As "NA";
Scope(
{
[Measures].[交易金额],
[Measures].[交易笔数],
[Measures].[手续费],
[Measures].[提支利差收入],
[Measures].[持有金额],
[Measures].[累计数量],
[Measures].[累计金额],
[Measures].[客户总数],
[Measures].[交易数量]
}
);
// 本年度截止到现在
(
[统计日期].[日期范围计算].[本年度截止到现在],
[统计日期].[D YEAR].[D YEAR].Members,
[统计日期].[日期].Members
) =
Aggregate(
{ [统计日期].[日期范围计算].DefaultMember } *
PeriodsToDate(
[统计日期].[日期层次].[年],
[统计日期].[日期层次].CurrentMember
)
);
end scope;