博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Cognos 维度函数

Posted on 2011-09-08 11:51  徐正柱-  阅读(743)  评论(0编辑  收藏  举报

以下函数说明均来自Cognos ReportNet说明,函数例子由本人总结编写

 

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].[日期].[日期].[]) 为取得去年相对于[]成员,level1的成员:[] 成员;

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 )

返回选定数据项占合计值的百分比。