Cognos 维度函数
Cognos 维度函数
以下函数说明均来自Cognos ReportNet说明,函数例子由本人总结编写(作者:HondaHsu 来源:博客园)
firstFromSet ( set_exp, numeric_exp_max , numeric_exp_overflow )
返回在集中找到的前几个(不超过 numeric_exp_max + numeric_exp_overflow)成员。 如果超过 numeric_exp_max + numeric_exp_overflow,则只返回成员的最大数目。
remainderSet (member_exp, set_exp , numeric_exp )
当 set_exp set 的大小大于 numeric_exp 时,成员表达式将包括在返回的集中。
hierarchy ( level | member | set_exp )
返回包含指定级别、成员或成员集的层级。
level ( member )
返回成员的级别。
levels ( hierarchy , index )
返回层级中与根级别相距某一距离(由“index”指定)的级别。
rootMembers ( hierarchy )
返回层级的根成员。
currentMember ( hierarchy )
返回迭代过程中某个层级的当前成员。 如果指定层级不在所计算的表达式的上下文中,则假定为其默认成员。
例子:
环比增长,相对于同年上月的增长:
([销售金额]-value(tuple(prevMember(currentMember([ARPD-Sale].[日期].[日期])),[销售金额])))
/value(tuple(prevMember(currentMember([ARPD-Sale].[日期].[日期])),[销售金额]))
defaultMember ( hierarchy )
返回层级的默认成员。
lag ( member , index_exp )
返回排在指定成员之前特定位数的同胞成员。
例子:lag([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091203],2)
结果: 20091201
lead ( member , index_exp )
返回排在指定成员之后特定位数的同胞成员。
例子:lead([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091201],2)
结果: 20091203
members ( hierarchy | level )
返回层级或级别中的成员集。 如果返回层级中的成员,则结果中无法保证成员的顺序;要按某一个顺序列出成员,必须使用明确排序的函数(如 hierarchize)。
member ( value_exp [ , string1 [ , string2 [ , hierarchy ] ] ] )
根据指定层级中的指定表达式定义成员。 “string1”用于识别由此函数创建的成员,它必须在查询中是唯一的,并且不同于同一层级中的任何其它成员。 “string2”用作成员标题;如果不指定,则标题为空。 如果未指定层级,则假定为度量维度。注释: 如果所有计算均用作分组项,并且这些分组项的同胞项是其它计算或成员集,则所有计算均应通过此函数明确分配给某一层级,否则会得到无法预计的结果。 唯一的例外是,如果计算仅涉及同一层级的同胞成员,则不必分配。 这种情况下,假定计算属于此层级。
nextMember ( member )
返回包含指定成员的级别中的下一个成员。
prevMember ( member )
返回同一级别中直接排在指定成员前面的成员。
ancestor ( member, level | integer )
返回指定(命名)级别上指定成员的祖项,或返回以下级别上指定成员的祖项:指定成员上面指定数量的级别。注:当存在多个此类祖项时,结果可能不一致。
例子:ancestor([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210],[AcrmSale].[日期].[日期].[YEAR])
结果:2009年
ancestors ( member , level | index )
返回某一成员在指定级别或高于该成员的级别中的所有祖项。 (在指定级别上,大多数数据源只支持一个祖项,而某些数据源则支持多个祖项。 因此结果是成员集。)
例子:ancestors([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210],[AcrmSale].[日期].[日期].[MONTH])
结果:12月
parent ( member )
返回指定成员的父项成员。
例子: parent([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210])
结果:12月
例子:parent(parent([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210]))
结果:2009年
cousin ( member1 , member2 )
返回 member2 的子项,该子项在 member2 下面的相对位置与member1 在其父项下面的相对位置相同。位置是指:序号,返回序号相同的成员
例子:cousin([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091022],[AcrmSale].[日期].[日期].[MONTH]->:[PC].[@MEMBER].[200911])
descendants ( member | set_expr , level | distance [ , { self | before | beforewithmember | after } ] )
返回指定级别 (限定名称) 或与根级别相距某一距离 (整数 0..n) 的级别上某成员或成员集的子项集。可以指定多个选项 (用空格隔开) 以确定要返回的成员。
返回与member成员相距level级别上的成员
例子1:
查询粒度为年,统计上半年、下半年
上半年余额,六月的余额即为上半年余额:
total([余额] within set subset(descendants([日期].[日期层次结构],[年]->?year?,[日期].[日期层次结构].[月]),5,1))
说明:
descendants函数作用为:得到查询的年份成员 在 [日期].[日期层次结构].[月] 层次上的所有成员;取得的这些月份成员索引号从0开始;
subset 函数,从第5个[月]成员开始取,取1个成员,即取得了成员:6月;
total 函数,再汇总6月的余额,相当于没有汇总;
例子2:
上半年发生额,前六个月的发生额相加为上半年发生额:
total([金额] within set subset(descendants([日期].[日期层次结构].[年]->?year?,[日期].[日期层次结构].[月]),0,6))
说明:
descendants函数作用为:得到查询的年份成员 在 [日期].[日期层次结构].[月] 层次上的所有成员;取得的这些月份成员索引号从0开始;
subset 函数,从第0个[月]成员开始取,取6个成员,即取得了成员:1月 至 6月;
total 函数,再汇总1月 到6月的发生额;
firstSibling ( member )
返回成员父项的第一个子项。
返回member的大哥;
例子:firstSibling([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210])
结果:20091201
lastChild ( member )
返回指定成员的最后一个子项。
返回member最小的儿子
例子:lastChild([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[200912])
结果:20091231
siblings ( member )
返回指定成员的父项的子项。
返回member的所有兄弟成员
例子:siblings([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210])
结果: 20091201 到 20091231
parallelPeriod ( level [ , int_exp [ , member ] ] )
返回先前时段中与指定成员具有相同相对位置的成员。此函数与“Cousin”函数类似,但与时序的关系更为密切。该函数先得出处于“level”的“member”的祖项 (称为“祖项”);然后得出与“祖项”相距“int_exp”个位置的“祖项”同胞,并返回该同胞的子项中“member”的平行时段。如果未指定,“int_exp”默认值为 1,“member”的默认值为当前成员。
返回相对于level成员的祖项偏移量为int_exp的祖项成员 的 与level成员处于相同位置的成员
int_exp 为正数,则要求的是该成员之前的层次,如:parallelPeriod([月],1),如果[月]成员为200905,则parallelPeriod([月],1)值为:200805
int_exp 为负数,则要求的是该成员之后的层次,如:parallelPeriod([月],-1),如果[月]成员为200905,则parallelPeriod([月],-1)值为:201005
例子1:
去年同期:即查询月为200905的话,该指标为200805该指标
total([金额] within set parallelPeriod([日期].[日期层次结构].[年],1,[日期].[日期层次结构].[月]->?mon?))
例子2:
同比增长:相对于去年的增长
([销售金额]- value(tuple(parallelPeriod([ARPD-Sale].[日期].[日期].[年]),[销售金额])))
/
value(tuple(parallelPeriod([ARPD-Sale].[日期].[日期].[年]),[销售金额]))
说明:
parallelPeriod([ARPD-Sale].[日期].[日期].[年]) 为取得去年相对于[年]成员,level为1的成员:[月] 成员;
tuple() 为取得每个成员: [月] 与 [销售金额] 的交叉单元格
value() 为取得交叉单元格的值
periodsToDate ( level , member )
返回与指定成员处于同一级别的同胞成员集,并受指定级别限制。 它先查找处于“level”级别的“member”成员的祖项,然后返回此祖项中与“member”成员处于同一级别的子项(直到包括“member”成员)。 通常与时间维度配合使用。
返回member成员的level祖项的子项直至包括到member
例子1:
本年累计:即查询月为200905的话,该指标为200901-200905期间发生
total([金额] within set periodsToDate([日期].[日期层次结构].[年],[日期].[日期层次结构].[月]->?mon?))
例子2:
去年同期止累计:即查询月为200905的话,该指标为200801-200805期间发生
total([金额] within set periodsToDate([日期].[日期层次结构].[年],parallelPeriod([日期].[日期层次结构].[年],1,[日期].[日期层次结构].[月]->?mon?)))
例子3:
except(periodsToDate([AcrmSale].[日期].[日期].[YEAR],[AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210]),periodsToDate([AcrmSale].[日期].[日期].[YEAR],prevMember([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091201])))
closingPeriod ( level [, member ] )
返回指定级别上member成员的子项中的最后一个同胞。 通常与时间维度配合使用。
例子1: closingPeriod([AcrmSale].[日期].[日期].[DATE_KEY],[AcrmSale].[日期].[日期].[MONTH]->:[PC].[@MEMBER].[200912])
结果: 20091231
例子2: closingPeriod([AcrmSale].[日期].[日期].[DATE_KEY],[AcrmSale].[日期].[日期].[YEAR]->:[PC].[@MEMBER].[2009])
结果:20091231
例子3: closingPeriod([AcrmSale].[日期].[日期].[MONTH],[AcrmSale].[日期].[日期].[YEAR]->:[PC].[@MEMBER].[2009])
结果:200912
例子4: closingPeriod([AcrmSale].[日期].[日期].[DATE_KEY])
结果:20091231
lastPeriods ( integer_exp , member )
返回同一级别中以指定成员结尾的成员集。 返回的成员数是“integer_exp”的绝对值。 如果“integer_exp”为负数,则返回指定成员后面的成员,包括指定成员。 通常与时间维度配合使用。
如果:integer_exp 是正数,则返回截止到member成员的前面integer_exp个成员
如果:integer_exp 是负数,则返回从member成员开始的后面 integer_exp 的绝对值 个数的成员
例子1:
有史以来累计发生:查询月为200805,则为从时间第一个节点截止200805期间发生
1)如果提示使用的是[日期].[日期层次结构].[月]
total([金额] within set
lastperiods(1000,[日期].[日期层次结构].[月]->?month?))
例子lastPeriods(-2,[AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210])
结果:20091210 20091211
例子lastPeriods(2,[AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210])
结果: 20091209 20091210
openingPeriod ( level [ , member ] )
在指定级别上某一成员的子项当中,返回第一个同胞成员。 通常与时间维度配合使用。
作用与closingPeriod函数相反
例子1: openingPeriod ([AcrmSale].[日期].[日期].[DATE_KEY],[AcrmSale].[日期].[日期].[MONTH]->:[PC].[@MEMBER].[200912])
结果: 20091201
例子2: openingPeriod ([AcrmSale].[日期].[日期].[DATE_KEY],[AcrmSale].[日期].[日期].[YEAR]->:[PC].[@MEMBER].[2009])
结果:20090101
例子3: openingPeriod ([AcrmSale].[日期].[日期].[MONTH],[AcrmSale].[日期].[日期].[YEAR]->:[PC].[@MEMBER].[2009])
结果:200901
例子4: openingPeriod ([AcrmSale].[日期].[日期].[DATE_KEY])
结果:20090101
generate ( set_exp1 , set_exp2 [ , ALL ] )
此函数为“set_exp1”中的每个成员计算“set_exp2”,然后合并成结果集。 如果指定了 ALL,则结果中保留重复值。
nestedSet ( set_expr1 , set_expr2 )
返回在 set_expr1 当前成员的上下文中求得的一组set_expr2 成员。
filter ( set_exp , boolean_exp )
返回按布尔条件过滤指定集后得出的集。 当且仅当“boolean_exp”的对应值为真时,结果中才包含每个成员。
例子:
有史以来累计发生:查询月为200805,则为从时间第一个节点截止200805期间发生
1)如果提示使用的是[日期].[日期层次结构].[月].[月 - Key]
total([金额] within set
filter(
members([日期].[日期层次结构].[月]),
[日期].[日期层次结构].[月].[月 - Key]<=?month?
))
item ( set_exp , index )
返回集中处于指定位置的成员。集的索引从零算起。
set ( member { , member } )
返回表达式中定义的成员列表。 成员必须属于同一层级。
tail ( set_exp [ , index_exp ] )
返回“set exp”中最后的“index_exp”个要素。 “index_exp”的默认值为 1。
例子:tail(periodsToDate([AcrmSale].[日期].[日期].[YEAR],[AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210]),1)
结果:20091210
head ( set_exp [ , index_exp ] )
返回“set_exp”中的第一个要素“index_exp”。 “index_exp”的默认值为 1。
subset ( set_exp, index_exp1 [ , index_exp2 ] )
返回指定集中成员的子集,从“index_exp1”开始。 如果指定了计数“index_exp2”,则返回多个成员(如果存在)。 否则,将返回所有剩余成员。
返回set_exp成员集中,从索引号index_exp1开始(索引号从0开始)的 index_exp2 个成员,如果不指定index_exp2,则返回所有剩余成员;
members ( hierarchy | level )
返回层级或级别中的成员集。 如果返回层级中的成员,则结果中无法保证成员的顺序;要按某一个顺序列出成员,必须使用明确排序的函数(如 hierarchize)。
except ( set_exp1 , set_exp2 [,ALL] )
返回那些属于“set_exp1”但不属于“set_exp2”的成员。 只有当可选关键字“ALL”用作第三个自变量时,才会保留重复项。
例子:
求时间段内的合计1:
total( [指标值1]
within set
except(
lastperiods(-9999,[AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091201]),
lastperiods(-9999,nextMember([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091201]))
)
)
例子:
求时间段内的合计2:这种更好
total( [指标值1]
within set
except(periodsToDate([AcrmSale].[日期].[日期].[YEAR],[AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091210]),periodsToDate([AcrmSale].[日期].[日期].[YEAR],prevMember([AcrmSale].[日期].[日期].[DATE_KEY]->:[PC].[@MEMBER].[20091201])))
去年同时段总计;
total([金额] within set
EXCEPT(LASTPERIODS(-90000,parallelPeriod([日期].[日期层次结构].[年],1,
[日期].[日期层次结构].[日]->?st_dt?
)
),
LASTPERIODS(-90000,parallelPeriod([日期].[日期层次结构].[年],1,
nextMember([日期].[日期层次结构].[日]->?end_dt?)
)
)
)
)
order ( set_exp , value_exp [ , ASC | DESC | BASC | BDESC ] )
通过为指定集中的每个值计算“value_exp”而得出一组值,来排列指定集中的成员,并通过第三个参数进行修改。 有两种排序方法: 层级式(ASC 或 DESC)和非层级式(BASC 或 BDESC,此处 B 表示“打破层级”)。 层级式排序方法首先按照成员在层级中的位置来排列成员。 然后它根据“value_exp”排列每个成员的子项。 非层级式排序方法对集中的成员进行排序时不考虑层级。 如果没有明确指明,则默认为 ASC。
hierarchize ( set_exp )
此函数用于对层级中某个集的成员进行排序。 在未指定其它排序条件时,级别中的成员按自然顺序(即成员在维度上的默认顺序)进行排列。
例子:hierarchize(members([AcrmSale].[日期].[日期].[DATE_KEY]))
intersect ( set_exp1 , set_exp2 [ , ALL ] )
返回两个输入集的交集。 只有当可选关键字“ALL”用作第三个自变量时,结果中才会保留重复项。
union ( set_exp1 , set_exp2 [ , ALL ] )
此函数返回“set_exp1”和“set_exp2”这两个集的并集。 只有当可选关键字“ALL”用作第三个自变量时,结果中才会保留重复项。
bottomCount ( set_exp , index_exp , numeric_exp )
此函数根据在"set_exp"的每个成员中算得的"numeric_exp"值对集进行排序,然后返回具有最小"index_exp"值的成员。
topCount ( set_exp , index_exp , numeric_exp )
此函数根据在“set_exp”的每个成员中算得的“numeric_exp”值对集进行排序,然后返回具有最大“index_exp”值的成员。
bottomPercent ( set_exp , numeric_exp1 , numeric_exp2 )
此函数与 bottomSum 类似,但阈值是“numeric_exp1”占合计的百分数。
topPercent ( set_exp , numeric_exp1, numeric_exp2 )
此函数与 topSum 类似,但阈值是“numeric_exp1”占合计的百分数。
bottomSum ( set_exp , numeric_exp1 , numeric_exp2 )
此函数根据在“set_exp”的相应成员中算得的“numeric_exp2”进行排序,然后挑选出累加合计值至少为“numeric_exp1”的最小项。
topSum ( set_exp , numeric_exp1 , numeric_exp2 )
此函数根据在“set_exp”的相应成员中算得的“numeric_exp2”值进行排序,然后挑选出累加合计值至少为“numeric_exp1”的最大项。
completeTuple ( member { , member } )
与“tuple”相似,它根据指定成员(它们必须来自不同的维度)确定单元格位置(交集)。 不过,completeTuple 暗指包括自变量中未另外指定的所有维度的默认成员,而非当前成员。 此单元格的值可通过“value”函数求得。
tuple ( member { , member } )
根据指定成员(它们必须来自不同的维度)确定单元格位置(交集)。 默认情况下,包括来自所有维度(而非自变量中指定维度)的当前成员。 如果在计算上下文时未指定维度的当前成员,假定为该维度的默认成员。 此单元格的值可通过“value”函数求得。
value ( tuple )
返回由数组确定的单元格的值。请注意,度量维度的默认成员是默认度量。
caption ( level | member | set_exp )
返回指定自变量的标题值。
substring ( string_exp , integer_exp1 [ , integer_exp2 ] )
返回 string_exp 的子字符串。该子字符串从integer_exp1 位置开始连续 integer_exp2 个字符或者到 string_exp 的末尾(如果未指定 integer_exp2)。 string_exp 中的第一个字符处在位置 1。
roleValue ( string [ , member | set_exp ] )
返回与指定上下文中的某一角色(其名称由“string”指定)相关联的属性值。只在一些特定情况下,第二个自变量是可选的,这时它可由其他上下文派生得出。应用程序通过按角色而非按查询项目 ID 来访问属性,可以灵活地在不同的数据源和模型之间切换。(对于按维度建模的关系数据源,应由建模者分配角色。)为所有数据源类型的成员定义的内蕴角色包括:“_businessKey”、“_memberCaption”、“_memberDescription”、“_memberUniqueName”。
ordinal ( level )
返回指定级别的序数值(表示与根级别的距离,从零算起)。
rank ( numeric_expr [ ASC | DESC ] [ tuple member_expr {, member_expr } ] within set set_expr )
返回选定数据项的排名值。返回的排名类型 (Olympic、密集或序列) 取决于数据源。排序顺序是可选的;默认情况下,假定为 DESC。
percentage ( numeric_expr [ tuple member_expr {, member_expr } ] within set set_expr )
返回选定数据项占合计值的百分比。