高级技术:引用变量中存储的值

您可能想要创建一个标题显示当前用户名的分析。可通过引用变量来实现这一点。

可以在分析、仪表盘和操作中引用下面若干不同类型的变量:会话语义模型(资料档案库)演示请求全局。内容作者可以自己定义演示、请求和全局变量,但其他类型(会话和语义模型(资料档案库))是在语义模型中为您定义的。

:Oracle Analytics 不支持数据源连接身份证明中的变量 :user 和 :password。

变量类型 定义位置 定义者 详细信息

会话

  • 系统

  • 非系统

语义模型

数据模型作者

关于会话变量

语义模型(资料档案库)

  • 动态

  • 静态

语义模型

数据模型作者

关于语义模型(资料档案库)变量

表示

分析和仪表盘提示

内容作者

关于表示变量

请求

分析和仪表盘提示

内容作者

关于请求变量

全局

分析

管理员

关于全局变量创建全局变量

关于会话变量

会话变量在用户登录时进行初始化。

这些变量在每个用户浏览会话的持续时间内存在,并在用户关闭浏览器或注销时到期。有两种类型的会话变量:系统和非系统。

系统会话变量

有多个系统会话变量可供您在报表和仪表盘中使用。

系统会话变量具有保留名称,因此您无法将其用于任何其他种类的变量。

系统会话变量 说明 示例 SQL 查询值(“变量”对话框)

PORTALPATH

标识用户在登录时看到的默认仪表盘(用户可以在登录后覆盖此首选项)。

在用户登录时显示 "mydashboard":

 select ‘/shared/_portal/mydashboard’ from dual;

TIMEZONE

为用户指定登录时的默认时区。

通常从用户的概要信息填充用户的时区。用户可以通过首选项(“我的账户”)更改其默认时区。

设置用户登录时的时区:

select ‘(GMT-08:00) Pacific Time (US & Canada)’ from dual;

DATA_TZ

指定相对原始时区的数据偏移。

使用此变量可以转换时区,以便用户看到适当的时区。

将时间数据转换为东部标准时间 (EST):

select ‘GMT-05:00’ from dual;

此示例表示格林威治标准时间 (GMT) - 5 小时

DATA_DISPLAY_TZ

指定显示数据所用的时区。

显示东部标准时间 (EST):

select ‘GMT-05:00’ from dual;

此示例表示格林威治标准时间 (GMT) - 5 小时

非系统会话变量

在语义模型中命名和创建非系统会话变量。

例如,数据建模器可能会创建一个 SalesRegion 变量,此变量在用户登录时初始化为用户销售区域的名称。

关于语义模型(资料档案库)变量

语义模型(资料档案库)变量是在任意时间点都具有单个值的变量。

语义模型(资料档案库)变量可以是静态或动态的。静态语义模型(资料档案库)变量的值会持久保留,除非管理员更改,否则不会变化。动态语义模型(资料档案库)变量的值将刷新为查询返回的数据。

关于表示变量

可在创建列提示或变量提示时创建表示变量。

类型 说明

列提示

作为列提示一部分创建的表示变量与某个列相关联,它可采用的值来自于列值。

要创建可作为列提示一部分的表示变量,您必须在“新建提示”对话框中选择设置变量字段中的表示变量。在变量名称字段中为该变量输入一个名称。

变量提示

作为变量提示一部分创建的表示变量不与任何列相关联,您可以定义它可采用的值。

要创建可作为变量提示一部分的表示变量,必须在“新建提示”对话框中选择提示字段中的表示变量。在变量名称字段中为该变量输入一个名称。

表示变量的值由创建该变量时所使用的列提示或变量提示填充。也就是说,每次用户在列提示或变量提示中选择一个或多个值时,表示变量的值就会设置为用户选择的一个或多个值。

关于请求变量

使用请求变量可以覆盖会话变量的值,但这只在从列提示启动的数据库请求期间有效。可以在创建列提示的过程中创建请求变量。

可在创建以下任一类型仪表盘提示的过程中创建请求变量:

  • 作为列提示一部分创建的请求变量与某个列相关联,它可采用的值来自于列值。

    要将请求变量作为列提示的一部分创建,必须在“新建提示”对话框中的设置变量字段中选择请求变量。在变量名称字段中输入要覆盖的会话变量名称。

  • 作为变量提示一部分创建的请求变量不与任何列相关联,您可以定义它可采用的值。

    要将请求变量作为变量提示的一部分创建,必须在“新建提示”对话框(或“编辑提示”对话框)中的提示字段中选择请求变量。然后在变量名称字段中输入要覆盖的会话变量名称。

请求变量的值由创建该变量时所使用的列提示填充。也就是说,每次用户在列提示中选择值时,请求变量的值就会设置为用户选择的这个值。不过,只有在从用户按提示的开始按钮到分析结果返回到仪表盘这一段时间内,该值才有效。

请求变量无法覆盖某些系统会话变量(例如 USERGUID 或 ROLES)。可以覆盖 DATA_TZ 和 DATA_DISPLAY_TZ(时区)等其他系统会话变量(如果已在模型管理工具中配置)。

只有字符串和数字请求变量才支持多个值。所有其他数据类型只传递第一个值。

关于全局变量

全局变量是通过将特定数据类型与值结合创建的列。该值可以为日期、日期和时间、数字、文本以及时间。

在执行分析时会对全局变量求值,并相应替换其值。

只有具有“BI 服务管理员”角色的用户才能管理(添加、编辑和删除)全局变量。

在使用“编辑列公式”对话框创建分析的过程中创建全局值。全局变量保存在目录中,可供特定租户系统中的所有其他分析使用。

创建全局变量

可以将计算保存为全局变量,然后在其他分析中重用它。

  1. 打开分析进行编辑。
  2. 在“所选列”窗格中,单击列名旁边的选项
  3. 选择编辑公式可显示“列公式”选项卡。
  4. 单击变量并选择全局
  5. 单击添加新的全局变量
  6. 名称输入值。例如,gv_region、date_and_time_global_variable 或 rev_eastern_region_calc_gv。
    在引用变量时,全局变量的名称必须为全限定名称,因此应该使用文本“global.variables”为前缀。例如,“列公式”对话框中将显示为计算收入设置的全局变量,如下所示:

    "Base Facts"."1- Revenue"*@{global.variables.gv_qualified}

  7. 类型输入值。
    • 如果选择“日期和时间”作为数据类型,则按照下例所示输入值:03/25/2004 12:00:00 AM
    • 如果要输入表达式或计算作为值,则必须使用文本数据类型,如下例中所示:"Base Facts"."1- Revenue"*3.1415
  8. 单击确定。新的全局变量将添加到“插入全局变量”对话框中。
  9. 选择刚刚创建的新全局变量,然后单击确定。此时将显示“编辑列公式”对话框,全局变量已插入到“列公式”窗格中。将自动选中定制标题复选框。
  10. 为将全局变量分配到的列输入新名称以更准确地反映变量。
  11. 单击确定

引用变量的语法

可以在分析和仪表盘中引用变量。

引用变量的方式取决于您所执行的任务。对于通过对话框中的字段提供的任务,只能指定变量的类型和名称(而不是完整语法),例如在筛选器定义中引用变量。

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

类型 语法 示例

会话

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

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

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

语义模型(资料档案库)

@{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}

@{dashboard.MyFavoriteRegion}{EASTERN REGION}

@{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 的 ECMA 脚本编写语言规范。名称不能超过200个字符,不能包含嵌入空格、保留关键字以及特殊字符。如果您不熟悉 JavaScripting 语言要求,请查看第三方参考

@{global.variables.gv_date_n_time}

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

会话变量

可以使用以下准则在表达式中引用会话变量。

  • 以 VALUEOF 函数的参数形式包含会话变量。
  • 用双引号将变量名引起来。
  • 在会话变量前面放置 NQ_SESSION 和一个句点。
  • 用双引号将 NQ_SESSION 引起来。
  • 用括号将 NQ_SESSION 部分和会话变量名括起来。

例如:

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

表示变量

可以使用以下准则在表达式中引用表示变量。

当引用表示变量时,使用此语法:

@{variablename}{defaultvalue}

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

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

'@{user.displayName}'

如果 @ 符号后面未跟随 {,则将其视为一个 @ 符号。使用可以具有多个值的表示变量时,语法会因列类型的不同而异。

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

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

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

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

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

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

例如:

'@{user.displayName}'

语义模型(资料档案库)变量

可以使用以下准则在表达式中引用语义模型(资料档案库)变量。

  • 以 VALUEOF 函数的参数形式包含变量。
  • 用双引号将变量名引起来。
  • 按名称引用静态语义模型(资料档案库)变量。
  • 按全限定名称引用动态语义模型(资料档案库)变量。

例如:

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