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 ?