BIEE分析及报表函数使用详解

更新时间:2023-03-08 16:40:56 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

常见BIEE分析及报表函数使用详解

系统中目前存在预制的标准函数,使用现有函数将有助于您更好的完成复杂格式和逻辑的报表。

1. 聚合函数

1. AGGREGATE AT

此函数根据指定的级别聚合列。使用 AGGREGATE AT 可确保始终在关键字 AT 之后指定的级别执行度量聚合,而无论 WHERE 子句如何 语法

AGGREGATE(expr AT level [, level1, levelN]) 其中:

expr 是至少引用一个度量列的任何表达式。

level 是要在其中聚合的级别。您可以选择性地指定多个级别。

AGGREGATE(\基础项\预算金额\时间\时间层次\年\要使用级别,

就需要使用时间层次

2. AVG

此函数计算结果集中表达式的平均值。它必须采用数值表达式作为参数。 语法

AVG(numExpr [by Expr]) 其中:

numExpr 是求值结果为数值的任何表达式。 Expr 是维度列,可以设置AVG的范围

如AVG(\基础项\预算金额\时间\年份\计算年内平均金额

AVGDISTINCT

此函数计算表达式中所有不同值的平均值。

3. BOTTOMN

按从1到n的顺序依次排列表达式参数中最小的n个值,1对应于最小的数值。BOTTOMN函数对结果集中返回的值执行运算。请求可以只包含一个BOTTOMN表达式。 语法

BOTTOMN(Expr,integer) 其中: Expr

求出数值的任意表达式。 Integer

任意正整数。表示结果集中显示的最低级别编号,1是最低的级别。

一般用于取得排名的数据,隐藏和排除字段都是不会影响结果的,跟表提示一起使用时,会先BottomN然后再提示

4. COUNT

此函数计算表达式中包含非空值的行数。该表达式通常为列名,此种情况下,将返回该列中包含非空值的行数。 语法:

COUNT(expr[BY expr1]) 其中:

expr 为任意表达式。 expr1 可以指定范围。

如COUNT(\基础项\预算金额\时间\年份\

COUNTDISTINCT

此函数对 COUNT 函数进行相异处理。

5. Max&Min

计算满足数值表达式参数的行的最大值(最大数值)。 语法

Max(numExpr)

其中: numExpr

求出数值的任意表达式。

可以使用Max(numExpr by Dim) 设置 Max的范围 如MAX(\事实-销售订单头\订单金额\时间维\年\ VS MAX(\事实-销售订单头\订单金额\

6. MEDIAN

此函数计算符合数值表达式参数要求的行的中间值。如果有偶数个行,则中间值为两个中间行的平均值。此函数始终返回双精度值。 语法

MEDIAN(numExpr[BY expr1]) 其中:

numExpr 是求值结果为数值的任何表达式。 expr1 可以指定范围

7. NTILE

此函数根据用户指定的范围确定值的排名。它返回整数,表示任意排名范围。

换句话说,生成的排序数据集分为多个维片,每个维片中值的数目大致相当。

numTiles = 100 的 NTile 返回的结果一般称为“百分比段”(数值从 1 到 100,100 表示最高排名)。该值不同于 Oracle BI PERCENTILE 函数的结果,该函数在 SQL 92 中符合所谓的“百分比排名”,并返回从 0 到 1 的值。 语法

NTILE(numExpr, numTiles) 其中:

numExpr 是求值结果为数值的任何表达式。

numTiles 是非空值正整数,表示维片数量。

如果 numExpr 参数不为空值,则该函数返回介于请求的范围中的表示排名的整数。

该函数可以用于求得比如说,销售额排名前25%的区域,就设置 numTiles为4,然后筛选该参数值等于4 的

8. PERCENTILE

此函数计算符合数值表达式参数要求的每个值的百分比排名。百分比段排名范围介于 0 (第 1 个百分比段) 和 1 (第 100 个百分比段) 之间,包含两端的值。

根据结果集内的值计算百分比段。 语法

PERCENTILE(numExpr) 其中:

numExpr 是求值结果为数值的任何表达式。

PERCENTILE(\基础项\预算金额\

9. RANK

计算满足数值表达式参数的每个值的级别。级别1分配给最大数值,下一个连

续的整数(2,3,4,...)依次分配给每个后继的级别。如果某些值相等,则分配相同的级别,同时,下一级别数字为前面出现的个数(例如,1,1,1,4,5,5,7...)。根据结果集中的值计算级别。 语法

RANK (Expr1, Expr2 [by Exp1,Exp2]) 其中: Expr

求出数值的任意表达式。 by 是定下RANK的范围如

设置RANK( \事实-销售订单行\销量\时间维\年\

最后能够达到类似于 TopN 的效果,而且,对于表提示器也是生效的,当然得建立过滤器

同时,这样会有一个局限在于,Rank的序列生成方式是(1,1,1,4,5,5,7...) 这样的,所以设置过滤小于10,可能返回的值不止9个,就像上面左图一样

10. STDDEV

此函数返回一组值的样本标准差。返回类型始终为双精度值。STDEV_SAMP 是 STDDEV 的同义词。 语法

STDDEV([ALL | DISTINCT] numExpr BY expr) 其中:

numExpr 是求值结果为数值的任何表达式。

如果指定 ALL,则会为数据集内的所有数据计算标准差。 如果指定 DISTINCT,则会在计算中忽略所有重复项。 如果未指定任何内容 (默认值),则会考虑所有数据。 expr 可以设置范围

如STDDEV(\基础项\预算金额\时间\年份\

11. STDDEV_POP

此函数使用总体方差和标准差的计算公式返回一组值的标准差。 语法

STDDEV_POP([ALL | DISTINCT] numExpr BY expr) 其中:

numExpr 是求值结果为数值的任何表达式。

如果指定 ALL,则会为数据集内的所有数据计算标准差。 如果指定 DISTINCT,则会在计算中忽略所有重复项。 如果未指定任何内容 (默认值),则会考虑所有数据。 expr 可以设置范围

如STDDEV_POP(\基础项\预算金额\时间\年份\

12. SUM

此函数计算通过累加符合数值表达式参数要求的所有值得出的总和。 语法

SUM(numExpr BY expr) 其中:

numExpr 是求值结果为数值的任何表达式。 expr 可以设置范围

SUMDISTINCT

此函数计算通过累加符合数值表达式参数要求的所有不同值得出的总和。

13. TOPN

按从1到n的顺序依次排列表达式参数中最大的n个值,1对应于最大的数值。TOPN函数对结果集中返回的值执行运算。请求可以只包含一个TOPN表达式。 语法

TopN(Expr,integer) 其中: Expr

求出数值的任意表达式。 Integer

任意正整数。表示结果集中显示的最低级别编号,1是最高的级别。 一般,我们是新建一个TOPN的指标,然后将这个指标排除或者隐藏起来 TOPN 对表提示器无效,因为是先TOPN再进行提示的

2. 运行聚合函数

运行聚合函数与函数聚合相似,它们都采用一组记录作为输入,但运行聚合函数不会为整组记录输出一个聚合,而会根据迄今为止出现的记录输出聚合。

14. MAVG

此函数计算结果集内最后 n 行数据 (包括当前行) 的移动平均值。

第一行的平均值等于第一行的数值表达式。第二行的平均值通过计算前两行数据的平均值得出。第三行的平均值通过计算前三行数据的平均值得出,依此类推,直到您到达第 n 行为止,第 n 行的平均值根据最后 n 行数据计算得出。 语法

MAVG(numExpr, integer) 其中:

numExpr 是求值结果为数值的任何表达式。

integer 是任意正整数。它表示最后 n 行数据的平均值。

比如,这里是3,那么就是求上两行数据的平均值,第一行为第一行数据的平均值,第二行是前两行的平均值,第三行是前三行的平均值,后面每一行都是左边前三行的平均值

15. MSUM

此函数计算最后 n 行数据 (包括当前行) 的移动总和。

第一行的总和等于第一行的数值表达式。第二行的总和通过计算前两行数据的总和得出。第三行的总和通过计算前三行数据的总和得出,依此类推。在您到达第 n 行以后,根据最后 n 行数据计算总和。 语法

MSUM(numExpr, integer) 其中:

numExpr 是求值结果为数值的任何表达式。

integer 是任意正整数。它表示最后 n 行数据的平均值。

16. RSUM

此函数根据迄今为止出现的记录来计算运行总和。第一行的总和等于第一行的数值表达式。第二行的总和通过计算前两行数据的总和得出。第三行的总和通过计算前三行数据的总和得出,依此类推。 语法

RSUM(numExpr) 其中:

numExpr 是求值结果为数值的任何表达式。 在 Answers 中,您还可以使用以下替代语法:

RSUM(expression1 [BY expression2[, expression3[, ...]]]) 其中:

expression1, expression2, expression3 ... 可以是任何列引用或列引用中的算术表达式。

BY 子句导致 RSUM 计算从任何 BY 列值不同于上一行的行重新开始。

17. RCOUNT

此函数采用一组记录作为输入,并计算迄今为止出现的记录数量。

语法

RCOUNT(expr) 其中:

expr 是任何数据类型的表达式。

在 Answers 中,您还可以使用以下替代语法:

RCOUNT(expression1 [BY expression2[, expression3[, ...]]]) 其中:

expression1, expression2, expression3 ... 可以是任何列引用或列引用中的算术表达式。

BY 子句导致 RCOUNT 计算从任何 BY 列值不同于上一行的行重新开始。

18. RMAX&RMIN

此函数采用一组记录作为输入,并根据迄今为止出现的记录显示最大值。指定数据类型必须是可排序的数据类型。 语法

RMAX(expr) 其中:

expr 是任何数据类型的表达式。该数据类型必须是具有关联的排序顺序的数据类型。

在 Answers 中,您还可以使用以下替代语法:

RMAX(expression1 [BY expression2[, expression3[, ...]]]) 其中:

expression1, expression2, expression3 ... 可以是任何列引用或列引用中的算术表达式。

BY 子句导致 RMAX 计算从任何 BY 列值不同于上一行的行重新开始。

3. 字符串函数

19. ASCII

1. Concat

CONCAT(strExpr1, strExpr2 || strExpr3) 其中:

strExprs 是求值结果为逗号分隔字符串和字符串连接运算符 || (双竖线) 的表达式。CONCAT 函数首先将 strExpr2 与 strExpr3 连接在一起以生成中间字符串,然后将 strExpr1 和中间字符串连接在一起以生成最终字符串。 示例

此示例请求返回显示的结果。

SELECT DISTINCT CONCAT('abc','def' || 'ghi') FROM employee 结果:

abcdefghi

2. Left

从字符串左方返回指定字符数。 语法

Left(strExpr,integer) 其中: strExpr

求出字符串的任意表达式。 Integer

任意正整数,表示要从字符串左方返回的字符数。

3. Lower

将字符串转换成小写字母。 语法

Lower(strExpr) 其中: strExpr

求出字符串的任意表达式。

4. Replace

使用一个或多个其它字符替换指定字符表达式中的一个或多个字符。 语法

Replace(strExpr1,strExpr2,strExpr3) 其中: strExpr1

求出字符串的任意表达式。这是要替换其中字符的字符串。 strExpr2

求出字符串的任意表达式。第二个字符串指定第一个字符串中被替换的字符。 strExpr3

求出字符串的任意表达式。第三个字符串指定要替换至第一个字符串的字符。

5. Right

从字符串左方返回指定字符数。 语法

Right(strExpr,integer) 其中: strExpr

求出字符串的任意表达式。 Integer

任意正整数,表示要从字符串右方返回的字符数。

6. Substring

从固定字符数开始,将新字符串创建至原始字符串。

语法

Substring(strExprFROMstartPos) 其中: strExpr

求出字符串的任意表达式。 startPos

任意正整数,表示从结果所在的字符串左边开始的字符数。

7. TrimBoth

除去字符串中的前导和尾部字符。 语法

Trim(BOTHcharFROMstrExpr) 其中: char

任意单个字符。如果您忽略此说明(以及要求的单个引号),空白字符则会用作缺省值。 strExpr

求出字符串的任意表达式。

8. TrimLeading

除去字符串中的前导字符。 语法

Trim(LEADINGcharFROMstrExpr) 其中: char

任意单个字符。如果您忽略此说明(以及要求的单个引号),空白字符则会用作缺省值。 strExpr

求出字符串的任意表达式。

9. TrimTrailing

除去字符串中的尾部字符。 语法

Trim(TRAILINGcharFROMstrExpr)

其中: char

任意单个字符。如果您忽略此说明(以及要求的单个引号),空白字符则会用作缺省值。 strExpr

求出字符串的任意表达式。

10. Upper

将字符串转换成大写字母。 语法

Upper(strExpr) 其中: strExpr

求出字符串的任意表达式。

4. 数学函数

1. Abs

计算数值表达式的绝对值。 语法

Abs(numExpr) 其中: numExpr

求出数值的任意表达式。

2. Ceiling

将一个非整数数值表达式的值舍入至相邻的最大整数。如果数值表达式求出整数,则CEILING函数返回该整数。 语法

Ceiling(numExpr) 其中: numExpr

求出数值的任意表达式。

3. Floor

将一个非整数数值表达式的值舍入至相邻的最小整数。如果数值表达式求出整数,则FLOOR函数返回该整数。 语法

Floor(numExpr) 其中: numExpr

求出数值的任意表达式。

4. Mod

将第一个数值表达式除以第二个数值表达式,然后返回商的非余数部分。 语法

Mod(numExpr1,numExpr2) 其中: numExpr

求出数值的任意表达式。

5. Rand

返回0至1之间的伪随机数。 语法 Rand()

6. Round

将数值表达式的值四舍五入到n位精度。 语法

Round(numExpr,integer) 其中: numExpr

求出数值的任意表达式。 integer

表示精度位数的任何正整数。

7. Truncate

舍去小数,以返回从小数点指定的位数。 语法

Truncate(numExpr,integer) 其中: numExpr

求出数值的任意表达式。 integer

表示小数点右边要返回的字符数的任何正整数。

5. 日历日期/时间函数

20. CURRENT_DATE

此函数返回当前日期。该日期由运行 Oracle BI Server 的系统确定。 语法

CURRENT_DATE

21. CURRENT_TIME

此函数返回当前时间。该时间由运行 Oracle BI Server 的系统确定。 语法

CURRENT_TIME(integer) 其中:

integer 是任意整数,它表示显示零点几秒的精度的位数。该参数是可选的;未指定该参数时,函数返回默认精度。

默认是整秒,设置了精度,也看不到零点几秒的情况,标记为复查 CURRENT_TIMESTAMP

此函数返回当前日期/时间戳。该时间戳由运行 Oracle BI Server 的系统确定。 语法

CURRENT_TIMESTAMP(integer) 其中:

integer 是任意整数,它表示显示零点几秒的精度的位数。该参数是可选的;未指定该参数时,函数返回默认精度。

1. Day_of_Quarter

返回一个介于1和92之间的数字,该数字对应于指定日期在季度中的某一天。 语法

Day_Of_Quarter(dateExpr) 其中: dateExpr

求出日期值的任意表达式。

2. DayName

返回指定日期的那一天的名称。 语法

DayName(dateExpr) 其中: dateExpr

求出日期值的任意表达式。

3. DayOfWeek

返回一个介于1和7之间的数字,该数字对应于指定日期是星期几(从星期日到星期六)。例如,数字1对应于星期日,而数字7对应于星期六。 语法

DayOfWeek(dateExpr) 其中: dateExpr

求出日期值的任意表达式。

4. DayOfYear

返回一个介于1和366之间的数字,该数字对应于指定日期在一年中的某一天。 语法

DayOfYear(dateExpr) 其中: dateExpr

求出日期值的任意表达式。

5. Week_Of_Quarter

返回一个介于1和13之间的数字,该数字对应于指定日期在季度中的某一周。 语法

Week_Of_Quarter(dateExpr) 其中: dateExpr

求出日期值的任意表达式。

6. Week_Of_Year

返回一个介于1和53之间的数字,该数字对应于指定日期在一年中处于的某一周。 语法

Week_Of_Year(dateExpr) 其中: dateExpr

求出日期值的任意表达式。

6. 表达式

1. Case(Switch)

Case语句的这种形式也称为CASE(Lookup)形式。先检验expression1的值,然后检验WHEN表达式。如果expression1与任何WHEN表达式匹配,则会分配对应THEN表达式中的值。

如果与任何一个WHEN表达式都不匹配,则会分配在ELSE表达式中指定的缺省值。如果未指定ELSE表达式,系统将自动添加ELSENULL。

如果expression1与多个WHEN子句中的表达式匹配,则只分配第一次匹配之后的表达式。 语法

CASEexpression1

WHENexpression2THENexpression2 {WHENexpression...THENexpression...} ELSEexpression END

其中: CASE

开始CASE语句。后面必须跟随表达式和一个或多个WHEN和THEN语句、(可选)ELSE语句以及END关键字。 WHEN

指定要满足的条件。 THEN

指定在满足对应的WHEN表达式的情况下要分配的值。 ELSE

指定在不满足任何一个WHEN条件的情况下要分配的值。如果忽略,则会假定ELSENULL。 END

结束CASE语句。 示例

CASEScore-par

WHEN-5THEN'BirdieonPar6' WHEN-4THEN'MustbeTiger' WHEN-3THEN'Threeunderpar'

WHEN-2THEN'Twounderpar' WHEN-1THEN'Birdie' WHEN0THEN'Par' WHEN1THEN'Bogey' WHEN2THEN'DoubleBogey' ELSE'TripleBogeyorWorse' END

2. Case(If)

Case语句的此形式评估每个WHEN条件,如果满足,则会分配对应THEN表达式中的值。

如果不满足任何一个WHEN表达式,则会分配在ELSE表达式中指定的缺省值。如果未指定ELSE表达式,系统将自动添加ELSENULL。 语法 CASE

WHENrequest_condition1THENexpression1 {WHENrequest_condition2THENexpression2} {WHENrequest_condition...THENexpression...} ELSEexpression END 其中: CASE

开始CASE语句。后面必须跟随一个或多个WHEN和THEN语句、(可选)ELSE语句以及END关键字。 WHEN

指定要满足的条件。 THEN

表示在满足对应WHEN表达式的情况下要分配的值。 ELSE

指定不满足任何一个WHEN条件的情况下要分配的值。如果忽略,则会假定ELSENULL。 END

结束CASE语句。 示例 CASE

WHENscore-par<0THEN'UnderPar' WHENscore-par=0THEN'Par'

WHENscore-par=1THEN'Bogie' WHENscore-par=2THEN'DoubleBogey' ELSE'TripleBogeyorWorse' END

7. 时间序列计算

1. Ago

一个时间序列聚合函数, 用于计算从当前时间追溯到以前的指定时段之间的聚合值。例如, Ago 可以生成当前季度每个月的销售额以及相应的季前销售额。 语法

AGO(expr, time_level, offset) 其中

expr 是至少引用一个度量列的表达式。

time_level 是时段的类型, 例如季度, 月或年,必须使用在模型中设置的时间层级,分析中不可用, 如果不设置,则会根据当前SQL的级别设置 如果要在 Answer中设置级别,则必须使用

AGO(\基础项\预算金额\时间\时间层次\年\

时间维度中需要拉出级别层次

offset 是一个整型, 表示时间偏移量,向前为负,向后为正 例如:

去年同期:AGO(\- OM Order Line\销量\\ 策略:

去年上期:AGO(TODATE(EXPR,YEAR),YEAR,-1)) – AGO(EXPR,YEAR,-1)

月累计:TODATE(EXPR,MONTH)

同期月累计: AGO(TODATE(EXPR,MONTH),MONTH,-12) 上月累计(上月同一天):

IFNULL(\- OM Order Line\年累计实际销售额2\- IFNULL(TODATE(\- OM Order Line\销售额

2\

\

Line\上月销售额2\ IFNULL(AGO(TODATE(\- OM Order Line\销售额

2\\Month\),

\

2. Todate

一个时间序列聚合函数, 用于累计从指定时段开始到当前时间的度量属性。例如, 此函数可以计算年初至今的销售额。 语法

TODATE(expr, time_level) 其中

expr 是一个至少引用一个度量列的表达式。 time_level 是时段的类型, 例如季度, 月或年。

例子参见 AGO

3. PeriodRolling

此函数计算在距当前时间的 x 个时间单位开始到 y 个时间单位结束这一时段内的度量总和。

时间单位由该函数第一个参数中度量的度量级别以及该函数所属查询的查询级别确定。 语法

PERIODROLLING(measure, x [,y][,hierarchy]) 说明

度量是度量列的名称。

x 是一个整数, 指定距当前时间的偏移时间,当前为0,向前则为负,向后则为正数。

y 指定该函数将计算的时间单位数,当前则为0,向前为负,向后为正。 hierarchy 是可选参数, 指定在时间维中要用于计算时间窗口的层次的名称, 如年, 月, 日。

如果是不限定范围,则可以使用UNBOUND,如

PERIODROLLING (measure, -UNBOUND, 0)就是取从最开始的时间到现在的SUM

PERIODROLLING 函数中使用的时间单位 (偏移) 称为该函数的级别。该值由此函数第一个参数中的度量的度量级别以及此函数所属的查询的查询级别共同确定。度量的度量级别可以在管理工具中设置。如果为该函数中使用的度量设置了度量级别,该度量级别将用作该函数的级别。度量级别也称为函数的存储粒度。

如果未在管理工具中设置度量级别,则使用查询级别。查询级别也称为函数的查询粒度。

对于指定一个层次,在Answer中可以跟AGGREGATE一起使用 PERIODROLLING(AGGREGATE(\基础项\预算金额\AT \时间\时间层次\年\

不能在 PERIODROLLING 函数中嵌套 AGO 和 TODATE 函数。此外,还不能嵌套 PERIODROLLING、FIRST 和 LAST 函数。

如果在 PERIODROLLING 中嵌套了其他聚合函数 (例如 RANK、TOPN、PERCENTILE、FILTER 或 RSUM),则会向内推送 PERIODROLLING 函数

PERIODROLLING 计算SQL

PERIODROLLING(\事实-销售订单头\订单金额\WITHYEARAS (

SELECT Y.YEAR_ID, RANK()OVER(ORDERBY Y.YEAR_ID ASC) ROW_NUMBER FROM DW_D_YEAR Y ) , DAYAS (

SELECT D.DAY_WID

PERIODROLLING(TOPN(measure))

TOPN(PERIODROLLING(measure)) 执行。

, YEAR.ROW_NUMBER -1 X )

SELECT YEAR.YEAR_ID, SUM(OH.AMOUNT) FROM DW_F_OM_ORDER_HEADER OH

,DW_D_DEPARTMENT DE

WHERE OH.DAY_WID = DAY.DAY_WID

AND YEAR.ROW_NUMBER BETWEEN DAY.X AND DAY.Y AND DE.ROW_WID = OH.DEPARTMENT_WID AND DE.DEPT_NAME = 'OTC内蒙' GROUPBY YEAR.YEAR_ID ORDERBY YEAR.YEAR_ID;

, YEAR, DAY

, YEAR.ROW_NUMBER + 1 Y FROM DW_D_DAY D

WHERE D.YEAR_ID = YEAR.YEAR_ID

, YEAR

8. 数据库函数

用户和管理员可以通过直接从 Oracle BI Answers 调用数据库函数,或者通过在元数据资料档案库中使用逻辑列 (位于逻辑表源中) 来创建请求。这些函数的关键用法包括能够通过表达式来获得高级计算,以及能够访问底层数据库上的定制编写的函数或过程。

当前并非在所有多维源上都支持数据库函数。此外,无法在 XML 数据源中使用这些函数

默认情况下,禁用了对 EVALUATE 系列数据库函数的支持。必须在 NQSConfig.INI 中更改 EVALUATE_SUPPORT_LEVEL 参数以启用对 EVALUATE* 函数的支持

# EVALUATE_SUPPORT_LEVEL:

# 1: evaluate is supported for users with manageRepositories permssion

# 2: evaluate is supported for any user.

# other: evaluate is not supported if the value is anything else. EVALUATE_SUPPORT_LEVEL = 0;

1. EVALUATE

此函数将包含作为参数的可选引用列的指定数据库函数传递给后端数据源,以供求值时使用。此函数专门用于标量计算;当要使用由基础数据源识别但 Oracle BI Server 不支持的专用数据库函数时,此函数会十分有用。

嵌入式数据库函数可能需要一个或多个列。这些列将由该函数中的 %1 到 %N 引用。实际列必须列在该函数后面。 语法

EVALUATE('db_function(%1...%N)' [AS data_type] [, column1, columnN]) 其中:

db_function 是由基础数据源识别的任何有效数据库函数。

data_type 是可选参数,它指定返回结果的数据类型。每当无法从输入参数可靠地预测返回数据类型时,就可以使用此参数。但是,请勿使用此参数进行类型转换;如果该函数需要返回特定数据类型,请添加显式转换。如果特定于数据库的函数用于生成不必返回到 Oracle BI Server 的中间结果但该函数的返回类型不受 Oracle BI Server 支持,则通常可以忽略此参数。 column1 到 columnN 是可选参数,这是以逗号分隔的列的列表。 示例

此示例显示嵌入式数据库函数。

SELECT EVALUATE('instr(%1, %2)', address, 'Foster City') FROM employees

2. EVALUATE_ANALYTIC

用法跟EVALUATE相同,但是主要使用数据库的分析函数

3. EVALUATE_AGGR

此函数专门用于带有 GROUP BY 子句的聚合函数。 用法和EVALUATE 相同

4. EVALUATE_PREDICATE

此函数专门用于带有布尔返回类型的函数。 用法和EVALUATE 相同

如果希望对数据库函数建立模型以进行比较,则不应使用 EVALUATE_PREDICATE。请改为使用 EVALUATE 并在函数外部进行比较。

例如,不要使用 EVALUATE_PREDICATE,如下所示:

EVALUATE_PREDICATE('dense_rank() over (order by 1% ) < 5', sales.revenue)

请改为使用 EVALUATE,如下所示:

EVALUATE('dense_rank() over (order by 1% ) ', sales.revenue) < 5 ?

9. 系统

1. Database

此函数返回默认主题区域的名称。

什么是默认的主题区域怎么设置,这里标记复查 语法

DATABASE()

2. User

此函数返回登录到的 Oracle BI 资料档案库的用户名。 语法 USER()

10. 转换

转换函数用于将值从一种形式转换为另一种形式

1. Cast

此函数更改表达式的数据类型,或者将空值文字更改为其他数据类型。例如,可以转换 customer_name (一种 Char 或 Varchar 数据类型) 或 birthdate (日期时间文字)。下面提供了可以将值更改为的支持的数据类型: CHARACTER, VARCHAR, INTEGER, FLOAT, SMALLINT, DOUBLE PRECISION, DATE, TIME, TIMESTAMP, BIT, BIT VARYING

根据源数据类型,某些目标类型不受支持。例如,如果源数据类型为 BIT 字符串,则目标数据类型必须是字符串或其他 BIT 字符串。

使用 CAST 可以更改为 DATE 数据类型。不要使用 TO_DATE。 使用 CAST(EXP AS DATE) 注意, EXP 的格式默认是01-7月-10 可以进行转换

cast(replace( right( '@{var_startdate}{2010-7-26}', 2 ), '-', '' ) ||'-' ||( 2 for

), 2

'-', ),

'' '-',

case ),

'' 1

) ),

= 1

when 0then )else

left( replace( substring( '@{var_startdate}{2010-7-26}' from 6 for right( replace( substring( '@{var_startdate}{2010-7-26}' from 6 replace( substring( '@{var_startdate}{2010-7-26}' from 6 for 2 ) ,'-', '' )end ) ||'月-' ||substring( '@{var_startdate}{2010-7-26}' from 3 for 2 )as date )

对于 Oracle 数据库,还可以设置默认日期格式 在连接池–连接脚本–连接时执行加入

ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD' 设置日期格式

下面描述了 CHAR 和 VARCHAR 数据类型的独有特征:

转换为 CHAR 数据类型。必须使用大小参数。如果不添加大小参数,则将添加默认值 30。以下列表中显示了语法选项:

建议的语法为:

CAST(expr|NULL AS CHAR(n)) 例如:

CAST(companyname AS CHAR(35)) 您还可以使用以下语法: 例如:

CAST(companyname AS CHAR) 注:

如果使用此语法,则 Oracle BI Server 会显式地转换并存储为 CAST(expr|NULL AS CHAR(30))

转换为 VARCHAR 数据类型。必须使用大小参数。如果忽略大小参数,则不能保存更改。

2. IfNull

此函数测试表达式的求值是否为空值;如果是,则会为该表达式分配指定值。 语法

IFNULL(expr, value) 其中:

expr 是要进行求值的表达式。

value 是在表达式求值结果为空值时要分配的值。

对于要设置加减公式的指标,都要用 IFNULL 包装起来,避免 NULL的情况

5. TO_DATETIME

此函数将 dateTime 格式的字符串文字转换为 DateTime 数据类型。 语法

TO_DATETIME('string1', 'DateTime_formatting_string') 其中:

string1 是要转换的字符串文字

DateTime_formatting_string 是要使用的 DateTime 格式,例如 yyyy.mm.dd hh:mi:ss。对于此参数,yyyy 代表年,mm 代表月份,dd 代表天,hh 代表小时,mi 代表分钟,而 ss 代表秒。 示例

SELECT TO_DATETIME('2009-03-03 01:01:00', 'yyyy-mm-dd hh:mi:ss') FROM snowflakesales SELECT

TO_DATETIME('2009.03.03

01:01:00',

'yyyy.mm.dd

hh:mi:ss') FROM snowflakesales

3. ValueOf

使用 VALUEOF 函数可以引用资料档案库变量的值 资料库变量 VALUEOF(NAME)

会话变量 VALUEOF(NQ_SESSION.NAME) 如果变量名称有空格,则需要用双引号包装起来

11. 显示函数

1. Filter

对度量值进行筛选,必须是度量值,所以,他能够在模型的逻辑层,和BI的分析中编辑公式,模型的物理层上不允许使用 语法

Filter( Expr Using filter_expressions) 其中

Expr 为度量值

filter_expressions是bool表达式 示例:

FILTER(\开票金额\ USING \- OM Invoice\发票行类型\票扣折扣', '开票折扣')) 或者

FILTER(\事实-销售订单行\销量\USING (\时间维\年-月\= '2000-01'))

本文来源:https://www.bwwdw.com/article/nog6.html

Top