引用变量的语法是什么?

可以在分析、仪表盘、KPI 和代理中引用变量。引用变量的方式取决于您所执行的任务。

对于通过对话框中的字段提供的任务,只能指定变量的类型和名称 (而不是完整语法),例如在过滤器定义中引用变量。

对于其他任务 (例如在标题视图中引用变量),可以指定变量语法。所使用的语法取决于变量类型,如表中所述。

注:

在此语法中,如果 @ 符号后面未跟随大括号 ({),则将其视为一个 @ 符号。
变量类型 语法 示例

会话

@{biServer.variables['NQ_SESSION.variablename']}

其中 variablename 是会话变量的名称,例如 DISPLAYNAME。

有关可使用的系统会话变量列表,请参阅 Oracle Business Intelligence Enterprise Edition 元数据资料档案库构建器指南中的关于系统会话变量

@{biServer.variables['NQ_SESSION.USER']}

资料档案库

@{biServer.variables.variablename}

@{biServer.variables['variablename']}

其中 variablename 是资料档案库变量的名称,例如 prime_begin。

@{biServer.variables.prime_begin}

@{biServer.variables['prime_begin']}

表示或请求

@{variables.variablename}[format]{defaultvalue}

@{scope.variables['variablename']}

其中:

  • variablename 是表示变量或请求变量的名称,例如 MyFavoriteRegion。

  • (可选) format 是依赖于变量数据类型的格式掩码,例如 #,##0、MM/DD/YY hh:mm:ss。(请注意,格式不应用于默认值。)

  • (可选) defaultvalue 是一个常量或变量引用,指示在未填充由 variablename 引用的变量时使用的值。

  • scope 标识变量的限定符。在多个级别 (分析、仪表盘页和仪表盘) 使用变量并希望访问特定值时,必须指定范围。(如果未指定范围,则优先顺序为分析、仪表盘页和仪表盘。)

注:将仪表盘提示用于可以具有多个值的表示变量时,语法会因列类型的不同而异。多个值将格式化为以逗号分隔的值,因此,任何格式化子句将在各个值使用逗号联接起来之前应用。

@{variables.MyFavoriteRegion}{EASTERN REGION}

@{MyFavoriteRegion}

@{dashboard.variables['MyFavoriteRegion']}

(@{myNumVar}[#,##0]{1000})

(@{variables.MyOwnTimestamp}[YY-MM-DD hh:mm:ss]{)

(@{myTextVar}{A, B, C})

全局

@{global.variables.variablename}

其中 variablename 是全局变量的名称,例如,gv_region。引用全局变量时,必须使用全限定名称,如示例中所示。

注:全局变量的命名惯例必须遵守 JavaScript 的 EMCA 脚本编写语言规范。名称不能超过 200 个字符,不能包含嵌入空格、保留关键字以及特殊字符。如果您不熟悉 JavaScripting 语言要求,请查看第三方参考。

@{global.variables.gv_date_n_time}

您也可以在表达式中引用变量。下表中介绍了有关在表达式中引用变量的准则。

变量类型 准则 示例

会话

  • 以 VALUEOF 函数的参数形式包含会话变量。

  • 用双引号将变量名括起来。

  • 在会话变量前面放置 NQ_SESSION 和一个句点。

  • 用括号将 NQ_SESSION 部分和会话变量名括起来。

"Market"."Region"=VALUEOF(NQ_SESSION."SalesRegion")

资料档案库

  • 以 VALUEOF 函数的参数形式包含资料档案库变量。

  • 用双引号将变量名括起来。

  • 按名称引用静态资料档案库变量。

  • 按全限定名称引用动态资料档案库变量。

    如果使用动态资料档案库变量,初始化块和资料档案库变量的名称必须使用双引号 (") 括起来,用句点分隔,并且包含在括号内。例如,要在名为“Region Security”的初始化块中包含名为“REGION”的动态资料档案库变量的值,请使用以下语法:

    VALUEOF("Region Security"."REGION")

    有关详细信息,请参阅 Oracle Business Intelligence Enterprise Edition 元数据资料档案库构建器指南中的关于资料档案库变量

CASE WHEN "Hour" >= VALUEOF("prime_begin") AND "Hour" < VALUEOF("prime_end") THEN 'Prime Time' WHEN ... ELSE...END

表示

  • 使用以下语法:

    @{variablename}{defaultvalue}
    

    其中,variablename 是表示变量的名称,defaultvalue (可选) 是一个常量或变量引用,指示在未填充由 variablename 引用的变量时使用的值。

  • 要将变量的类型转换为字符串,请将整个语法用单引号括起来。例如:

    '@{user.displayName}'
    

注:如果 @ 符号后面未跟随 {,则将其视为一个 @ 符号。

使用可以具有多个值的表示变量时,语法会因列类型的不同而异。

在 SQL 中为指定列类型使用以下语法以生成有效的 SQL 语句:

  • 文本 - (@{variablename}['@']{'defaultvalue'})

  • 数字 - (@{variablename}{defaultvalue})

  • 日期时间 - (@{variablename}{timestamp 'defaultvalue'})

  • 日期 (仅日期) - (@{variablename}{date 'defaultvalue'})

  • 时间 (仅时间) - (@{variablename}{time 'defaultvalue'})

"Market"."Region"=@{MyFavoriteRegion}{EASTERN REGION}

"Products"."P4 Brand"=(@{myTextVar}['@']{BizTech})

"Products"."PO Product Number"=(@{myNumVar}{1000})

"Sales Person"."E7 Hire Date"=(@{myDateTimeVar}{timestamp '2013-05-16 00:00:01'})

"Time"."Total Fiscal Time"=(@{myDateVar}{date '2013-05-16'})

"Time"."Time Right Now"=(@{myTimeVar}{time '00:00:01'})

使用 SQL 时,对于多值 (指定的数据类型):

  • 如果列类型为文本并且 variablename 传递 val1、val2 和 val3,则结果为 ('val1', 'val2', 'val3')。

  • 如果列类型为日期并且 variablename 传递 2013-08-09 和 2013-08-10,则结果为 (date '2013-08-09', date '2013-08-10')。

  • 如果列类型为日期时间并且 variablename 传递 2013-08-09 00:00:00 和 2013-08-10 00:00:00,则结果为 (timestamp '2013-08-09 00:00:00', timestamp '2013-08-10 00:00:00')。

有关可引用变量的特定区域,请参阅在何处可以引用变量?