Cognos8.3函数使用手册(二)
1 top and bottom functions
1.1 bottomCount
原型 |
bottomCount ( set_exp , index_exp , numeric_exp ) |
说明 |
此函数根据在"set_exp"的每个成员中算得的"numeric_exp"值对集进行排序,然后返回具有最小"index_exp"值的成员 |
案例 |
1、bottomCount([每日一览N].[产品].[产品].[险类+],9,[2008年]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[2008年]排列后9项 |
1.2 topCount
原型 |
topCount ( set_exp , index_exp , numeric_exp ) |
说明 |
此函数根据在“set_exp”的每个成员中算得的“numeric_exp”值对集进行排序,然后返回具有最大“index_exp”值的成员 |
案例 |
1、topCount([每日一览N].[产品].[产品].[险类+],9,[2008年]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[2008年]排列前9项 |
1.3 bottomPercent
原型 |
bottomPercent ( set_exp , numeric_exp1 , numeric_exp2 ) |
说明 |
此函数与 bottomSum 类似,但阈值是“numeric_exp1”占合计的百分数 |
案例 |
1、bottomPercent([每日一览N].[产品].[产品].[险类+],5,[保单数量]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[保单数量]占总量的百分比5% |
1.4 bottomPercent
原型 |
bottomPercent ( set_exp , numeric_exp1 , numeric_exp2 ) |
说明 |
此函数与 bottomSum 类似,但阈值是“numeric_exp1”占合计的百分数 |
案例 |
1、bottomPercent([每日一览N].[产品].[产品].[险类+],5,[保单数量]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[保单数量]占总量的百分比5% |
1.5 topPercent
原型 |
topPercent ( set_exp , numeric_exp1, numeric_exp2 ) |
说明 |
此函数与 topSum 类似,但阈值是“numeric_exp1”占合计的百分数 |
案例 |
1、topPercent([每日一览N].[产品].[产品].[险类+],50,[保单数量]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[保单数量]占总量的百分比50% |
1.6 bottomSum
原型 |
bottomSum ( set_exp , numeric_exp1 , numeric_exp2 ) |
说明 |
此函数根据在“set_exp”的相应成员中算得的“numeric_exp2”进行排序,然后挑选出累加合计值至少为“numeric_exp1”的最小项 |
案例 |
1、bottomSum([每日一览N].[产品].[产品].[险类+],50000,[保单数量]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[保单数量]累计和至少为50000的最小项 |
1.7 topSum
原型 |
topSum ( set_exp , numeric_exp1 , numeric_exp2 ) |
说明 |
此函数根据在“set_exp”的相应成员中算得的“numeric_exp2”值进行排序,然后挑选出累加合计值至少为“numeric_exp1”的最大项 |
案例 |
1、topSum ([每日一览N].[产品].[产品].[险类+],50000,[保单数量]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]维度,按[保单数量]累计和至少为50000的最大项 |
2 value functions
2.1 completeTuple
原型 |
completeTuple ( member { , member } ) |
说明 |
与“tuple”相似,它根据指定成员(它们必须来自不同的维度)确定单元格位置(交集)。 不过,completeTuple 暗指包括自变量中未另外指定的所有维度的默认成员,而非当前成员。 此单元格的值可通过“value”函数求得 |
案例 |
1、completeTuple([机动车辆保险],[北京]) |
解释 |
1、返回[机动车辆保险]与[北京]交叉部分 |
2.2 Tuple
原型 |
tuple ( member { , member } ) |
说明 |
根据指定成员(它们必须来自不同的维度)确定单元格位置(交集)。 默认情况下,包括来自所有维度(而非自变量中指定维度)的当前成员。 如果在计算上下文时未指定维度的当前成员,假定为该维度的默认成员。 此单元格的值可通过“value”函数求得 |
案例 |
1、Tuple([机动车辆保险],[北京]) |
解释 |
1、返回[机动车辆保险]与[北京]交叉部分 |
2.3 value
原型 |
value ( tuple ) |
说明 |
返回由数组确定的单元格的值。请注意,度量维度的默认成员是默认度量 |
案例 |
1、value(tuple([机动车辆保险],[营销],[保单数量])) |
解释 |
1、返回[机动车辆保险]与[北京]交叉部分[保单数量]值 |
2.4 caption
原型 |
caption ( level | member | set_exp ) |
说明 |
返回指定自变量的标题值 |
案例 |
1、caption([每日一览N].[产品].[产品].[险类+]) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]名称列表 |
2.5 substring
原型 |
substring ( string_exp , integer_exp1 [ , integer_exp2 ] ) |
说明 |
返回 string_exp 的子字符串。该子字符串从 integer_exp1 位置开始连续 integer_exp2 个字符或者到 string_exp 的末尾(如果未指定 integer_exp2)。 string_exp 中的第一个字符处在位置 1 |
案例 |
1、substring(caption([每日一览N].[产品].[产品].[险类+]),3,5) |
解释 |
1、返回[每日一览N].[产品].[产品].[险类+]名称的第3位起,最大5个字 |
2.6 roleValue
原型 |
roleValue ( string [ , member | set_exp ] ) |
说明 |
返回与指定上下文中的某一角色(其名称由“string”指定)相关联的属性值。只在一些特定情况下,第二个自变量是可选的,这时它可由其他上下文派生得出。应用程序通过按角色而非按查询项目 ID 来访问属性,可以灵活地在不同的数据源和模型之间切换。(对于按维度建模的关系数据源,应由建模者分配角色。)为所有数据源类型的成员定义的内蕴角色包括:“_businessKey”、“_memberCaption”、“_memberDescription”、“_memberUniqueName” |
案例 |
1、roleValue('_businessKey',[每日一览N].[日期].[日期].[年]) |
解释 |
1、返回日期类似("2001-01-01","2001-12-31") |
2.7 ordinal
原型 |
ordinal ( level ) |
说明 |
返回指定级别的序数值(表示与根级别的距离,从零算起) |
案例 |
1、ordinal(level(CurrentMember([每日一览N].[产品].[产品]))) |
解释 |
1、返回0 |
3 案例分析:
3.1 维度成员组合(union、members)
案例1:
查询表达式:union(members([ids_fspg_biz_ply_calc].[机构维].[机构维].[部门组]),members([ids_fspg_biz_ply_calc].[机构维].[机构维].[分公司]),all)
显示结果如下:
入账保费本期 |
已决赔款本期 |
估损金额本期 |
机构成员 |
220310530.5 |
108985584.8 |
528845589.7 |
南京本部 |
48389677.91 |
33200885.17 |
193426745 |
盐城中心支公司 |
60755345.77 |
32554842.83 |
142384001.5 |
淮安中心支公司 |
46081415.58 |
38516559.7 |
166707329.3 |
泰州中心支公司 |
161412453.6 |
85677317.32 |
342161360.8 |
徐州中心支公司 |
100655687.5 |
61145560.48 |
238695714.5 |
南通中心支公司 |
60831595.83 |
51106269.86 |
217132228.5 |
连云港中心支公司 |
54474389.38 |
31071380.93 |
136790267 |
扬州中心支公司 |
75524214.4 |
48535118.38 |
173261278.9 |
镇江中心支公司 |
9015433.8 |
14423796.63 |
52141826.04 |
宿迁中心支公司 |
837450744.2 |
505217316.1 |
2191546341 |
江苏分公司 |
3.2 维度成员排序组合(hierarchize、union、members)
案例1:
查询表达式:hierarchize(union(members([ids_fspg_biz_ply_calc].[机构维].[机构维].[部门组]),members([ids_fspg_biz_ply_calc].[机构维].[机构维].[分公司]),all))
显示结果如下:
入账保费本期 |
已决赔款本期 |
估损金额本期 |
机构成员 |
837450744.2 |
505217316.1 |
2191546341 |
江苏分公司 |
220310530.5 |
108985584.8 |
528845589.7 |
南京本部 |
48389677.91 |
33200885.17 |
193426745 |
盐城中心支公司 |
60755345.77 |
32554842.83 |
142384001.5 |
淮安中心支公司 |
46081415.58 |
38516559.7 |
166707329.3 |
泰州中心支公司 |
161412453.6 |
85677317.32 |
342161360.8 |
徐州中心支公司 |
100655687.5 |
61145560.48 |
238695714.5 |
南通中心支公司 |
60831595.83 |
51106269.86 |
217132228.5 |
连云港中心支公司 |
54474389.38 |
31071380.93 |
136790267 |
扬州中心支公司 |
75524214.4 |
48535118.38 |
173261278.9 |
镇江中心支公司 |
9015433.8 |
14423796.63 |
52141826.04 |
宿迁中心支公司 |
3.3 维度类别组合(hierarchy、levels、level)
通过下图了解类别与层级,A是“机构维”树,包含层级与成员,B是各层级与明细成员,互相独立层次,hierarchy()函数,对A和B都可以选择。选择A和成员名称,只显示根节点与当前成员集,
3.4 RS中基于CUBE数据源的同期、本年累计等MDX写法
所有的例子中:month参数指向月粒度、year参数指向年粒度。日期层次结构为:年、季度、月、日
1. 去年同期:即查询月为200905的话,该指标为200805该指标
total([金额] within set parallelPeriod([日期].[日期层次结构].[年],1,[日期].[日期层次结构].[月]->?mon?))
2. 本年累计:即查询月为200905的话,该指标为200901-200905期间发生
total([金额] within set periodsToDate([日期].[日期层次结构].[年],[日期].[日期层次结构].[月]->?mon?))
3. 去年同期止累计:即查询月为200905的话,该指标为200801-200805期间发生
total([金额] within set periodsToDate([日期].[日期层次结构].[年],parallelPeriod([日期].[日期层次结构].[年],1,[日期].[日期层次结构].[月]->?mon?)))
4. 有史以来累计发生:查询月为200805,则为从时间第一个节点截止200805期间发生
1)如果提示使用的是[日期].[日期层次结构].[月].[月 - Key]
total([金额] within set
filter(
members([日期].[日期层次结构].[月]),
[日期].[日期层次结构].[月].[月 - Key]<=?month?
))
2)如果提示使用的是[日期].[日期层次结构].[月]
total([金额] within set
lastperiods(1000,[日期].[日期层次结构].[月]->?month?))
5. 查询粒度为年,统计上半年、下半年
上半年余额(即时点类指标):
total([余额] within set subset(descendants([日期].[日期层次结构].[年]->?year?,[日期].[日期层次结构].[月]),5,1))
上半年发生额(即时段类指标):
total([金额] within set subset(descendants([日期].[日期层次结构].[年]->?year?,[日期].[日期层次结构].[月]),0,6))
这里subset()这个函数和substring()类似,只不过subset截取的是一个set(集合)中的某些成员而已,并且注意subset()第一个是0而不是1,这个和数组是类似的.
6、同比与环比
同比增长 (以日期为行维)
([销售金额]- value(tuple(parallelPeriod([ARPD-Sale].[日期].[日期].[年]),[销售金额])))
/
value(tuple(parallelPeriod([ARPD-Sale].[日期].[日期].[年]),[销售金额]))
环比增长 (以日期为行维)
([销售金额]-value(tuple(prevMember(currentMember([ARPD-Sale].[日期].[日期])),[销售金额])))
/
value(tuple(prevMember(currentMember([ARPD-Sale].[日期].[日期])),[销售金额]))