F 表达式编辑器参考

此部分介绍可在表达式编辑器中使用的表达式元素。

主题:

SQL 运算符

可使用 SQL 运算符来指定表达式之间的比较和算术运算。

可以使用各种类型的 SQL 运算符。

运算符 示例 说明 语法

BETWEEN

"COSTS"."UNIT_COST" BETWEEN 100.0 AND 5000.0

确定值是否介于两个非包含边界之间。

可以在 BETWEEN 前面加 NOT 来对条件取反。

BETWEEN [LowerBound] AND [UpperBound]

IN

"COSTS"."UNIT_COST" IN(200, 600, 'A')

确定值是否存在于一组值中。

IN ([Comma Separated List])

IS NULL

"PRODUCTS"."PROD_NAME" IS NULL

确定值是否为空值。

IS NULL

LIKE

"PRODUCTS"."PROD_NAME" LIKE 'prod%'

确定值是完全还是部分匹配字符串。通常与通配符一起使用以指明零个或多个字符的任意字符串匹配 (%) 或指示任意单个字符匹配 (_)。

LIKE

+

(FEDERAL_REVENUE + LOCAL_REVENUE) - TOTAL_EXPENDITURE

加号,用于执行加法运算。

+

-

(FEDERAL_REVENUE + LOCAL_REVENUE) - TOTAL_EXPENDITURE

减号,用于执行减法运算。

-

* X

SUPPORT_SERVICES_EXPENDITURE * 1.5

乘号,用于执行乘法运算。

*

X

/

CAPITAL_OUTLAY_EXPENDITURE/1.05

除号,用于执行除法运算。

/

%

 

百分比

%

||

STATE||CAST(YEAR AS CHAR(4))

字符串连接。

||

(

(FEDERAL_REVENUE + LOCAL_REVENUE) - TOTAL_EXPENDITURE

左括号。

(

)

(FEDERAL_REVENUE + LOCAL_REVENUE) - TOTAL_EXPENDITURE

右括号。

)

>

YEAR > 2000 and YEAR < 2016 and YEAR <> 2013

大于号,表示值大于比较值。

>

<

YEAR > 2000 and YEAR < 2016 and YEAR <> 2013

小于号,表示值小于比较值。

<

=

 

等号,表示值相同。

=

>=

 

大于等于号,表示值与比较值相同或大于比较值。

>=

<=

 

小于等于号,表示值与比较值相同或小于比较值。

<=

<>

YEAR > 2000 and YEAR < 2016 and YEAR <> 2013

不等于,表示值大于或小于比较值,但与比较值不同。

<>

,

STATE in ('ALABAMA','CALIFORNIA')

逗号,用于分隔列表中的元素。

,

函数

存在可在表达式中使用的各种类型的函数。

主题:

聚合函数

聚合函数对多个值执行运算以创建概要结果。

以下列表介绍了可用于列和度量列的聚合规则。此列表还包含可在为分析创建计算项时使用的函数。

  • 默认值 — 应用语义模型中或者分析的原始作者要求的默认聚合规则。此选项不适用于分析中的计算项。

  • 由服务器决定 — 应用由 Oracle Analytics 确定的聚合规则(例如,在语义模型中定义的规则)。在 Oracle Analytics 内针对简单规则(如求和、求最小值和求最大值)执行聚合。此选项不适用于“布局”窗格中的度量列,也不适用于分析中的计算项。

  • 总和 - 计算通过将结果集中的所有值相加获得的总和。此选项用于包含数值的项。

  • 最小值 - 计算结果集中的行的最小值 (最小数值)。此选项用于包含数值的项。

  • 最大值 - 计算结果集中的行的最大值 (最大数值)。此选项用于包含数值的项。

  • 平均值 - 计算结果集中的项的平均值 (均值)。此选项用于包含数值的项。表和数据透视表中的平均值舍入为最接近的整数。

  • 第一个 - 在结果集中,选择度量的项的第一个匹配项。对于计算项,请根据“所选”列表中的显示内容选择第一个成员。此选项在编辑列公式对话框中不可用。

  • 最后一个 - 在结果集中,选择该项的最后一个匹配项。对于计算项,请根据“所选”列表中的显示内容选择最后一个成员。此选项在编辑列公式对话框中不可用。

  • 计数 — 计算结果集中项对应的值为非空值的行数。该项通常为列名,此种情况下,将返回该列中其值为非空值的行数。

  • 相异值计数 — 为“计数”函数添加相异处理,这意味着该项的每个相异匹配项仅计算一次。

  • - 不应用聚合。此选项不适用于分析中的计算项。

  • 基于报表的总计(如果适用) — 如果未选择此选项,请指定 Oracle Analytics 应根据整个结果集计算总计,然后对度量应用任何筛选器。此选项在编辑列公式对话框中不可用,也不适用于分析中的计算项。该选项仅适用于属性列。

函数 示例 说明 语法

AGGREGATE AT

AGGREGATE(sales AT year)

基于数据模型层次中您指定的级别聚合列。

  • measure 是度量列的名称。
  • level 是要进行聚合的级别。

您可以选择指定多个级别。您不能指定这样的级别:该级别源自的维所包含的级别将用作您在第一个参数中指定的度量的度量级别。例如,如果 month 源自用作 yearly_sales 度量级别的同一时间维,则不能将该函数写为 AGGREGATE(yearly_sales AT month)

AGGREGATE(measure AT level [, level1, levelN])

AGGREGATE BY AGGREGATE(sales BY month, region) 基于一个或多个维列聚合度量。
  • measure 是要聚合的度量列的名称。

  • column 是要基于其聚合的维列。
您可以基于多列聚合度量。
AGGREGATE(measure BY column [, column1, columnN])

AVG

Avg(Sales)

计算一组数字值的平均值。

AVG(expr)

AVGDISTINCT

 

计算表达式中所有相异值的平均值。

AVG(DISTINCT expr)

BIN

BIN(revenue BY productid, year WHERE productid > 2 INTO 4 BINS RETURNING RANGE_LOW)

将给定的数值表达式分类到指定数量的等宽存储桶。该函数可以返回收集器编号或者收集器间隔的两个端点之一。numeric_expr 是要收集的度量或数值属性。BY grain_expr1,…, grain_exprN 是一系列表达式,用来定义 numeric_expr 的计算粒度。BY 对于度量表达式为必需,对于属性表达式为可选。WHERE 是将数值分配给收集器前应用于 numeric_expr 的筛选器;INTO number_of_bins BINS 是将返回的收集器的编号;BETWEEN min_value AND max_value 是用于最外层收集器端点的最小值和最大值;RETURNING NUMBER 指示返回值应为收集器编号(1、2、3、4 等)。这是默认设置。RETURNING RANGE_LOW 指示收集器间隔的下限值,RETURNING RANGE_HIGH 指示收集器间隔的上限值

BIN(numeric_expr [BY grain_expr1, ..., grain_exprN] [WHERE condition] INTO number_of_bins BINS [BETWEEN min_value AND max_value] [RETURNING {NUMBER | RANGE_LOW | RANGE_HIGH}])

BottomN

 

按从 1 到 n 的顺序依次排列表达式参数中最小的 n 个值,1 对应于最小的数值。

expr 是求值结果为数值的任意表达式。integer 是任意正整数。它表示结果集内显示的最低排名的数字,1 为最低排名。

BottomN(expr, integer)

COUNT

COUNT(Products)

确定具有非空值的项的数量。

COUNT(expr)

COUNTDISTINCT

 

对 COUNT 函数进行相异处理。

expr 为任意表达式。

COUNT(DISTINCT expr)

COUNT*

SELECT COUNT(*) FROM Facts

计算行数。

COUNT(*)

First

First(Sales)

选择表达式参数的第一个非空返回值。First 函数以明确定义的维中指定的最详细级别运行。

First([NumericExpression)]

Last

Last(Sales)

选择表达式的最后一个非空返回值。

Last([NumericExpression)]

MAVG

 

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

expr 是求值结果为数值的任意表达式。integer 是任意正整数。它表示最后 n 行数据的平均值。

MAVG(expr, integer)

MAX

MAX(Revenue)

计算符合数值表达式参数要求的行的最大值(最大数值)。

MAX(expr)

MEDIAN

MEDIAN(Sales)

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

MEDIAN(expr)

MIN

MIN(Revenue)

计算符合数值表达式参数要求的行的最小值。

MIN(expr)

NTILE

 

根据用户指定的范围确定值的排名。它返回整数,表示任意排名范围。numTiles =100 的 NTILE 返回的结果一般称为“百分比段”(从 1 到 100 的数值,100 表示最高)。

expr 是求值结果为数值的任意表达式。numTiles 是非空值正整数,表示磁贴数量。

NTILE(expr, numTiles)

PERCENTILE

 

计算符合数值表达式参数要求的每个值的百分比段排名。百分比段排名范围介于 0(百分之零)和 1(百分之百)之间。

expr 是求值结果为数值的任意表达式。

PERCENTILE(expr)

RANK

RANK(chronological_key, null, year_key_columns)

计算符合数值表达式参数要求的每个值的排名。排名 1 分配给最大的数字,下一个连续的整数(2、3、4...)依次分配给后续的每个排名。如果某些值相等,则分配相同的排名(例如,1、1、1、4、5、5、7...)。

expr 是求值结果为数值的任意表达式。

RANK(expr)

STDDEV

STDDEV(Sales) STDDEV(DISTINCT Sales)

返回一组值的标准差。返回类型始终为双精度值。

STDDEV(expr)

STDDEV_POP

STDDEV_POP(Sales) STDDEV_POP(DISTINCT Sales)

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

STDDEV_POP([NumericExpression])

SUM

SUM(Revenue)

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

SUM(expr)

SUMDISTINCT

 

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

expr 是求值结果为数值的任意表达式。

SUM(DISTINCT expr)

TOPN

 

按从 1 到 n 的顺序依次排列表达式参数中最大的 n 个值,1 对应于最大的数值。

expr 是求值结果为数值的任意表达式。integer 是任意正整数。它表示结果集内显示的最高排名的数字,1 为最高排名。

TOPN(expr, integer)

分析函数

使用分析函数,您可以通过预测、趋势线和聚类等模型来浏览数据。或者,您可以将分析函数拖放到工作簿编辑器中。

或者,您可以通过在工作簿编辑器中数据面板的“分析”选项卡上选择预测、趋势线和聚类来将其添加到工作簿中。请参见将统计分析函数添加到可视化

函数 示例 说明 语法

CLUSTER

CLUSTER((product, company), (billed_quantity, revenue), 'clusterName', 'algorithm=k-means;numClusters=%1;maxIter=%2;useRandomSeed=FALSE;enablePartitioning=TRUE', 5, 10)

使用 K-平均值 (K-Means) 或分层聚类基于一个或多个输入表达式将一组记录收集到组中。

CLUSTER((dimension_expr1 , ... dimension_exprN), (expr1, ... exprN), output_column_name, options, [runtime_binded_options])

EVALUATE_SCRIPT

EVALUATE_SCRIPT('filerepo://obiee.Outliers.xml', 'isOutlier', 'algorithm=kmeans;id=%1;arg1=%2;arg2=%3;useRandomSeed=False;', customer_number, expected_revenue, customer_age)

按照 script_file_path 中的指定方式执行 Python 脚本,传入一个或多个列或文字表达式作为输入。此函数的输出由 output_column_name 确定。

EVALUATE_SCRIPT(script_file_path, output_column_name, options, [runtime_binded_options])

FORECAST

按天统计的收入预测示例

此示例选择按天统计的收入预测。

FORECAST("A - Sample Sales"."Base Facts"."1- Revenue" Target,
("A - Sample Sales"."Time"."T00 Calendar Date"),'forecast', 'numPeriods=30;predictionInterval=70;') ForecastedRevenue

按年和季度统计的收入预测示例

此示例选择按年和季度统计的收入预测。

FORECAST("A - Sample Sales"."Base Facts"."1- Revenue",
("A - Sample Sales"."Time"."T01 Year" timeYear, "A - Sample Sales"."Time"."T02 Quarter" TimeQuarter),'forecast', 'numPeriods=30;predictionInterval=70;') ForecastedRevenue

使用指数平滑 (Exponential Smoothing, ETS)、季节性 ARIMA 或 ARIMA 创建指定度量随序列变化的时间序列模型。此函数输出对 numPeriods 参数指定的一组期间的预测。

另请参见下面的其他 FORECAST 函数选项。

FORECAST(measure, ([series]), output_column_name, options,[runtime_binded_options])])

其中:

  • measure 表示要预测的度量,例如收入数据。

  • series 表示用于构建预测模型的时间粒度。series 是一个或多个时间维列的列表。如果省略了 series,则从查询确定时间粒度。

  • output_column_name 表示 forecastlowhighpredictionInterval 的有效列名。

  • options 表示由分号 (;) 分隔的名称/值对字符串列表。值可以包括 runtime_binded_options 中指定的 %1 ... %N

  • runtime_binded_options 表示列和选项的逗号分隔列表。这些列和选项的值是在各个查询执行期间进行求值和解析。

另请参见下面的其他 FORECAST 函数选项。

OUTLIER

OUTLIER((product, company), (billed_quantity, revenue), 'isOutlier', 'algorithm=kmeans')

使用 K-平均值 (K-Means)、分层聚类或多元非正常值检测算法并基于一个或多个输入表达式将一条记录分类为非正常值。

OUTLIER((dimension_expr1 , ... dimension_exprN), (expr1, ... exprN), output_column_name, options, [runtime_binded_options])

REGR

REGR(revenue, (discount_amount), (product_type, brand), 'fitted', '')

拟合线性模型,并返回拟合值或模型。此函数可用于拟合两个度量的线性曲线。

REGR(y_axis_measure_expr, (x_axis_expr), (category_expr1, ..., category_exprN), output_column_name, options, [runtime_binded_options])

TRENDLINE

TRENDLINE(revenue, (calendar_year, calendar_quarter, calendar_month) BY (product), 'LINEAR', 'VALUE')

Oracle 建议您在查看可视化时使用添加统计信息属性应用趋势线。请参见调整可视化属性

拟合线性、多项式或指数模型,并返回拟合值或模型。numeric_expr 代表趋势的 Y 值,series(时间列)代表 X 值。

TRENDLINE(numeric_expr, ([series]) BY ([partitionBy]), model_type, result_type)

FORECAST 函数选项 下表列出了可在 FORECAST 函数中使用的选项。

选项名称 说明
numPeriods 整数 要预测的期间数。
predictionInterval 0 到 100,其中值越大表示置信度越高 预测的置信度级别。
modelType

ETS(Exponential Smoothing,指数平滑)

SeasonalArima

ARIMA

要用于预测的模型。
useBoxCox

TRUE

FALSE

如果为 TRUE,则使用 Box-Cox 转换。
lambdaValue 不适用

Box-Cox 转换参数。

如果为 NULL 或 useBoxCoxFALSE,则忽略。

否则,在估计模型之前对数据进行转换。

trendDamp

TRUE

FALSE

此项特定于指数平滑模型。

如果为 TRUE,则使用阻尼趋势。如果为 FALSE 或 NULL,则使用非阻尼趋势。

errorType

不适用

此项特定于指数平滑模型。
trendType

N(无)

A(相加)

M(相乘)

Z(自动选择)

此项特定于指数平滑模型。
seasonType

N(无)

A(相加)

M(相乘)

Z(自动选择)

此项特定于指数平滑模型。
modelParamIC

ic_auto

ic_aicc

ic_bic

ic_auto(这是默认值)

在模型选择中使用的信息标准 (information criterion, IC)。

转换函数

转换函数可将值从一种形式转换为另一种形式。

函数 示例 说明 语法

CAST

CAST(hiredate AS CHAR(40)) FROM employee

更改表达式的数据类型,或者将空值文字更改为其他数据类型。例如,可以转换 customer_name(一种 CHARVARCHAR 数据类型)或 birthdate(日期时间文字)。

CAST(expr AS type)

IFNULL

IFNULL(Sales, 0)

测试表达式的求值结果是否为空值,如果是,则会为该表达式分配指定值。

IFNULL(expr, value)

INDEXCOL

SELECT INDEXCOL(VALUEOF (NQ_SESSION.GEOGRAPHY_LEVEL), Country, State, City), Revenue FROM Sales

使用外部信息返回要查看的已登录用户的适当列。

INDEXCOL([integer literal], [expr1] [, [expr2], ?-])

NULLIF

SELECT e.last_name, NULLIF(e.job_id, j.job_id) "Old Job ID" FROM employees e, job_history j WHERE e.employee_id = j.employee_id ORDER BY last_name, "Old Job ID";

比较两个表达式。如果它们相等,则该函数返回空值。如果它们不相等,则此函数返回第一个表达式。不能为第一个表达式指定文字 "NULL"。

NULLIF([expression], [expression])

To_DateTime

SELECT To_DateTime ('2009-03-0301:01:00', 'yyyy-mm-dd hh:mi:ss') FROM sales

DateTime 格式的字符串文字转换为 DateTime 数据类型。

To_DateTime([expression], [literal])

VALUEOF

SalesSubjectArea.Customer.Region = VALUEOF("Region Security"."REGION")

在筛选器中引用语义模型变量的值。

expr 变量用作 VALUEOF 函数的参数。可以按名称引用静态语义模型变量。

VALUEOF(expr)

日期和时间函数

日期和时间函数根据 DATEDATETIME 处理数据。

函数 示例 说明 语法

CURRENT_Date

CURRENT_DATE

返回当前日期。

该日期由运行 Oracle BI 的系统确定。

CURRENT_DATE

CURRENT_TIME

CURRENT_TIME(3)

根据指定的精度位数返回当前时间,例如:HH:MM:SS.SSS

如果未指定参数,该函数返回默认精度。

CURRENT_TIME(expr)

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP(3)

根据指定的精度位数返回当前日期/时间戳。

CURRENT_TIMESTAMP(expr)

DAYNAME

DAYNAME(Order_Date)

返回指定日期表达式所在星期几的名称。

DAYNAME(expr)

DAYOFMONTH

DAYOFMONTH(Order_Date)

返回数字,该数字对应于指定日期表达式是一个月中的第几天。

DAYOFMONTH(expr)

DAYOFWEEK

DAYOFWEEK(Order_Date)

返回一个介于 1 和 7 之间的数字,该数字对应于指定日期表达式是一周中的星期几。例如,1 始终与星期日对应,2 始终与星期一对应,依此类推到星期六,此时返回 7。

DAYOFWEEK(expr)

DAYOFYEAR

DAYOFYEAR(Order_Date)

返回一个介于 1 和 366 之间的数字,该数字对应于指定日期表达式是一年中的第几天。

DAYOFYEAR(expr)

DAY_OF_QUARTER

DAY_OF_QUARTER(Order_Date)

返回一个介于 1 和 92 之间的数字,该数字对应于指定日期表达式是一个季度中的第几天。

DAY_OF_QUARTER(expr)

HOUR

HOUR(Order_Time)

返回一个介于 0 和 23 之间的数字,该数字对应于指定时间表达式的小时。例如,0 代表中午 12 点,而 23 对应于晚上 11 点。

HOUR(expr)

MINUTE

MINUTE(Order_Time)

返回一个介于 0 和 59 之间的数字,该数字对应于指定时间表达式的分钟。

MINUTE(expr)

MONTH

MONTH(Order_Time)

返回一个介于 1 和 12 之间的数字,该数字对应于指定日期表达式所在的月份。

MONTH(expr)

MONTHNAME

MONTHNAME(Order_Time)

返回指定日期表达式所在的月份名称。

MONTHNAME(expr)

MONTH_OF_QUARTER

MONTH_OF_QUARTER(Order_Date)

返回一个介于 1 和 3 之间的数字,该数字对应于指定日期表达式是一个季度中的第几月。

MONTH_OF_QUARTER(expr)

NOW

NOW()

返回当前时间戳。NOW 函数等同于 CURRENT_TIMESTAMP 函数。

NOW()

QUARTER_OF_YEAR

QUARTER_OF_YEAR(Order_Date)

返回一个介于 1 和 4 之间的数字,该数字对应于指定日期表达式在一年中的哪一季度。

QUARTER_OF_YEAR(expr)

SECOND

SECOND(Order_Time)

返回一个介于 0 和 59 之间的数字,该数字对应于指定时间表达式的秒。

SECOND(expr)

TIMESTAMPADD

TIMESTAMPADD(SQL_TSI_MONTH, 12,Time."Order Date")

将指定的时间间隔数添加到时间戳,并返回单个时间戳。

时间间隔选项包括:SQL_TSI_SECONDSQL_TSI_MINUTESQL_TSI_HOURSQL_TSI_DAYSQL_TSI_WEEKSQL_TSI_MONTHSQL_TSI_QUARTERSQL_TSI_YEAR

TIMESTAMPADD(interval, expr, timestamp)

TIMESTAMPDIFF

TIMESTAMPDIFF(SQL_TSI_MONTH, Time."Order Date",CURRENT_DATE)

返回两个时间戳之间的指定时间间隔的总数。

使用与 TIMESTAMPADD 相同的时间间隔。

TIMESTAMPDIFF(interval, expr, timestamp2)

WEEK_OF_QUARTER

WEEK_OF_QUARTER(Order_Date)

返回一个介于 1 和 13 之间的数字,该数字对应于指定日期表达式是一个季度中的第几周。

WEEK_OF_QUARTER(expr)

WEEK_OF_YEAR

WEEK_OF_YEAR(Order_Date)

返回一个介于 1 和 53 之间的数字,该数字对应于指定日期表达式是一年中的第几周。

WEEK_OF_YEAR(expr)

YEAR

YEAR(Order_Date)

返回指定日期表达式所在的年份。

YEAR(expr)

日期提取函数

这些函数计算时间戳值或将时间戳值向下舍入到指定的最近时段,例如小时、日期、星期、月份和季度。

您可以使用计算的时间戳按不同的粒度聚合数据。例如,您可以将 EXTRACTDAY() 函数应用于销售订单日期来计算下单那天午夜的时间戳,以便可以按天聚合数据。

函数 示例 说明 语法

提取日期

EXTRACTDAY("Order Date")
  • 2/22/1967 3:02:01 AM 返回 2/22/1967 12:00:00 AM
  • 9/2/2022 10:38:21 AM 返回 9/2/2022 12:00:00 AM

返回输入值出现那天午夜 (12 AM) 的时间戳。例如,如果输入时间戳为 2 月 22 日 3:02:01 AM,则该函数返回的时间戳为 2 月 22 日 12:00:00 AM。

EXTRACTDAY(expr)

提取小时

EXTRACTHOUR("Order Date")
  • 2/22/1967 3:02:01 AM 返回 2/22/1967 3:00:00 AM
  • 6/17/1999 11:18:30 PM 返回 6/17/1999 11:00:00 PM

返回输入值出现时的小时开始时间的时间戳。例如,如果输入时间戳为 11:18:30 PM,则该函数返回的时间戳为 11:00:00 PM。

EXTRACTHOUR (expr)

提取几点钟

EXTRACTHOUROFDAY("Order Date")
  • 2014/09/24 10:58:00 返回 2000/01/01 10:00:00
  • 2014/08/13 11:10:00 返回 2000/01/01 11:00:00

返回如下时间戳:小时等于输入值中的小时,年、月、日、分钟和秒为默认值。

EXTRACTHOUROFDAY(expr)

提取毫秒

EXTRACTMILLISECOND("Order Date")
  • 1997/01/07 15:32:02.150 返回 1997/01/07 15:32:02.150
  • 1997/01/07 18:42:01.265 返回 1997/01/07 18:42:01.265
返回包含输入值中的毫秒的时间戳。例如,如果输入时间戳为 15:32:02.150,则该函数返回的时间戳为 15:32:02.150。

EXTRACTMILLISECOND(expr)

提取分钟

EXTRACTMINUTE("Order Date")
  • 6/17/1999 11:18:00 PM 返回 6/17/1999 11:18:00 PM
  • 9/2/2022 10:38:21 AM 返回 9/2/2022 10:38:00 AM

返回输入值出现时的分钟开始时间的时间戳。例如,如果输入时间戳为 11:38:21 AM,则该函数返回的时间戳为 11:38:00 AM。

EXTRACTMINUTE (expr)

提取月份

EXTRACTMONTH("Order Date")
  • 2/22/1967 3:02:01 AM 返回 2/1/1967 12:00:00 AM
  • 6/17/1999 11:18:00 PM 返回 6/1/1999 12:00:00 AM

返回输入值出现那个月第一天的时间戳。例如,如果输入时间戳为 2 月 22 日,则该函数返回的时间戳为 2 月 1 日。

EXTRACTMONTH(expr)

提取季度

EXTRACTQUARTER("Order Date")
  • 2/22/1967 3:02:01 AM 返回 1/1/1967 12:00:00 AM,即第一个财政季度的第一天。
  • 6/17/1999 11:18:00 PM 返回 4/1/1999 12:00:00 AM,即第二个财政季度的第一天。

  • 9/2/2022 10:38:21 AM 返回 7/1/2022 12:00:00 AM,即第三个财政季度的第一天。

    提示:可使用 QUARTER (expr) 根据返回的时间戳计算序数形式的季度。

返回输入值出现那个季度第一天的时间戳。例如,如果输入时间戳是在第三个财政季度,则该函数返回的时间戳为 7 月 1 日。

EXTRACTQUARTER(expr)

提取秒

EXTRACTSECOND("Order Date")
  • 1997/01/07 15:32:02.150 返回 1997/01/07 15:32:02
  • 1997/01/07 20:44:18.163 返回 1997/01/07 20:44:18

返回输入值的时间戳。例如,如果输入时间戳为 15:32:02.150,则该函数返回的时间戳为 15:32:02。

EXTRACTSECOND(expr)

提取星期

EXTRACTWEEK("Order Date")
  • 2014/09/24 10:58:00 返回 2014/09/21

  • 2014/08/13 11:10:00 返回 2014/08/10

返回输入值出现那一周第一天(星期日)的日期。例如,如果输入时间戳为 9 月 24 日星期三,则该函数返回的时间戳为 9 月 21 日星期日。

EXTRACTWEEK(expr)

提取年份

EXTRACTYEAR("Order Date")
  • 1967/02/22 03:02:01 返回 1967/01/01 00:00:00
  • 1999/06/17 23:18:00 返回 1999/01/01 00:00:00

返回输入值出现那一年 1 月 1 日的时间戳。例如,如果输入时间戳是在 1967 年,则该函数返回的时间戳为 1967 年 1 月 1 日。

EXTRACTYEAR (expr)

显示函数

显示在查询结果集上执行操作的函数。

函数 示例 说明 语法

BottomN

BottomN(Sales, 10)

返回表达式最低的 n 个值,按照从高到低的顺序排列。

BottomN([NumericExpression], [integer])

FILTER

FILTER(Sales USING Product = 'widget')

使用指定的预聚合过滤器计算表达式。

FILTER(measure USING filter_expr)

MAVG

MAVG(Sales, 10)

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

MAVG([NumericExpression], [integer])

MSUM

SELECT Month, Revenue, MSUM(Revenue, 3) as 3_MO_SUM FROM Sales

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

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

MSUM([NumericExpression], [integer])

NTILE

NTILE(Sales, 100)

根据用户指定的范围确定值的排名。它返回整数,表示任意排名范围。示例中显示了从 1 到 100 的范围,最低销售额 = 1,最高销售额 = 100。

NTILE([NumericExpresssion], [integer])

PERCENTILE

PERCENTILE(Sales)

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

PERCENTILE([NumericExpression])

RANK

RANK(Sales)

计算符合数值表达式参数要求的每个值的排名。排名 1 分配给最大的数字,下一个连续的整数(2、3、4...)依次分配给后续的每个排名。如果某些值相等,则分配相同的排名(例如,1、1、1、4、5、5、7...)。

RANK([NumericExpression])

RCOUNT

SELECT month, profit, RCOUNT(profit) FROM sales WHERE profit > 200

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

RCOUNT([NumericExpression])

RMAX

SELECT month, profit, RMAX(profit) FROM sales

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

RMAX([NumericExpression])

RMIN

SELECT month, profit, RMIN(profit) FROM sales

采用记录集作为输入,并根据迄今为止出现的记录显示最小值。指定数据类型必须是可排序的数据类型。

RMIN([NumericExpression])

RSUM

SELECT month, revenue, RSUM(revenue) as RUNNING_SUM FROM sales

根据迄今为止出现的记录来计算运行总和。

第一行的总和等于第一行的数值表达式。第二行的总和通过计算前两行数据的总和得出,依此类推。

RSUM([NumericExpression])

TOPN

TOPN(Sales, 10)

返回表达式最高的 n 个值,按照从低到高的顺序排列。

TOPN([NumericExpression], [integer])

有关使用显示函数的提示

  • FILTER — 如果要使用主题区域构建报表,请使用主题区域中定义的层次,而不是直接在计算中筛选层次列。换言之,如果主题区域具有时间\财政年度\财政季度的层次,则避免使用:

    filter (<measure> using fiscal_quarter = 'Q4')

    filter (<measure> using fiscal_quarter = 'Q3')

    filter (<measure> using fiscal_year = 'FY24')

求值函数

求值函数是可用于通过表达式传递来获取高级计算的数据库函数。

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

函数 示例 说明 语法

EVALUATE

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

将包含作为参数的可选引用列的指定数据库函数传递给数据库,以供求值时使用。

EVALUATE([string expression], [comma separated expressions])

EVALUATE_AGGR

EVALUATE_AGGR('REGR_SLOPE(%1, %2)', sales.quantity, market.marketkey)

将包含作为参数的可选引用列的指定数据库函数传递给数据库,以供求值时使用。此函数专门用于带有 GROUP BY 子句的聚合函数。

EVALUATE_AGGR('db_agg_function(%1...%N)' [AS datatype] [, column1, columnN])

数学函数

本部分中介绍的数学函数执行数学运算。

函数 示例 说明 语法

ABS

ABS(Profit)

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

expr 是求值结果为数值的任意表达式。

ABS(expr)

ACOS

ACOS(1)

计算数值表达式的反余弦。

expr 是求值结果为数值的任意表达式。

ACOS(expr)

ASIN

ASIN(1)

计算数值表达式的反正弦。

expr 是求值结果为数值的任意表达式。

ASIN(expr)

ATAN

ATAN(1)

计算数值表达式的反正切。

expr 是求值结果为数值的任意表达式。

ATAN(expr)

ATAN2

ATAN2(1, 2)

计算 y /x 的反正切,其中,y 是第一个数值表达式,x 是第二个数值表达式。

ATAN2(expr1, expr2)

CEILING

CEILING(Profit)

将一个非整数数值表达式的值舍入到最近的最大整数。如果数值表达式的求值结果是整数,则 CEILING 函数返回该整数。

CEILING(expr)

COS

COS(1)

计算数值表达式的余弦。

expr 是求值结果为数值的任意表达式。

COS(expr)

COT

COT(1)

计算数值表达式的余切。

expr 是求值结果为数值的任意表达式。

COT(expr)

DEGREES

DEGREES(1)

将表达式的值从弧度转换为角度。

expr 是求值结果为数值的任意表达式。

DEGREES(expr)

EXP

EXP(4)

以值为底计算指定的幂。计算 e 的 n 次幂,其中 e 是自然对数的底。

EXP(expr)

ExtractBit

Int ExtractBit(1, 5)

检索特定位置的位,以整数表示。它返回与该位所在位置相对应的整数 0 或 1。

ExtractBit([Source Number], [Digits])

FLOOR

FLOOR(Profit)

将一个非整数数值表达式的值舍入到最近的最小整数。如果数值表达式的求值结果为整数,则 FLOOR 函数返回该整数。

FLOOR(expr)

LOG

LOG(1)

计算表达式的自然对数。

expr 是求值结果为数值的任意表达式。

LOG(expr)

LOG10

LOG10(1)

计算以 10 为底的对数表达式。

expr 是求值结果为数值的任意表达式。

LOG10(expr)

MOD

MOD(10, 3)

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

MOD(expr1, expr2)

PI

PI()

返回 pi 的常数值。

PI()

POWER

POWER(Profit, 2)

求出第一个数值表达式的值,并将该值用作第二个数值表达式中指定的幂。

POWER(expr1, expr2)

RADIANS

RADIANS(30)

将表达式的值从角度转换为弧度。

expr 是求值结果为数值的任意表达式。

RADIANS(expr)

RAND

RAND()

返回 0 至 1 之间的伪随机数。

RAND()

RANDFromSeed

RAND(2)

返回基于种子值的伪随机数。如果给定种子值,将生成相同的一组随机数。

RAND(expr)

ROUND

ROUND(2.166000, 2)

将数值表达式舍入精确到 n 位。

expr 是求值结果为数值的任意表达式。

integer 是任意正整数,它表示精度的位数。

ROUND(expr, integer)

SIGN

SIGN(Profit)

返回以下值:

  • 如果数值表达式的求值结果为正数,则为 1

  • 如果数值表达式的求值结果为负数,则为 -1

  • 如果数值表达式的求值结果为零,则为 0

SIGN(expr)

SIN

SIN(1)

计算数值表达式的正弦。

SIN(expr)

SQRT

SQRT(7)

计算数值表达式参数的平方根。数值表达式的求值结果必须为非负数。

SQRT(expr)

TAN

TAN(1)

计算数值表达式的正切。

expr 是求值结果为数值的任意表达式。

TAN(expr)

TRUNCATE

TRUNCATE(45.12345, 2)

截断小数,以返回从小数点开始算起的指定位数。

expr 是求值结果为数值的任意表达式。

integer 是任意正整数,它表示从小数点位置右侧返回的字符数。

TRUNCATE(expr, integer)

运行聚合函数

运行聚合函数会对多个值执行运算以创建概要结果。

函数 示例 说明 语法

MAVG

 

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

expr 是求值结果为数值的任意表达式。integer 是任意正整数。它表示最后 n 行数据的平均值。

MAVG(expr, integer)

MSUM

select month, revenue, MSUM(revenue, 3) as 3_MO_SUM from sales_subject_area

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

expr 是求值结果为数值的任意表达式。integer 是任意正整数。表示最后 n 行数据的和。

MSUM(expr, integer)

RSUM

SELECT month, revenue, RSUM(revenue) as RUNNING_SUM from sales_subject_area

根据迄今为止出现的记录来计算运行总和。

expr 是求值结果为数值的任意表达式。

RSUM(expr)

RCOUNT

select month, profit, RCOUNT(profit) from sales_subject_area where profit > 200

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

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

RCOUNT(expr)

RMAX

SELECT month, profit,RMAX(profit) from sales_subject_area

采用记录集作为输入,并根据迄今为止出现的记录显示最大值。

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

RMAX(expr)

RMIN

select month, profit,RMIN(profit) from sales_subject_area

采用记录集作为输入,并根据迄今为止出现的记录显示最小值。

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

RMIN(expr)

字符串函数

字符串函数执行各种字符操纵功能。这些函数对字符串进行操作。

函数 示例 说明 语法

ASCII

ASCII('a')

将单个字符串转换成介于 0 与 255 之间的相应 ASCII 代码。如果字符表达式求值结果为多个字符,将返回与表达式中第一个字符对应的 ASCII 代码。

expr 是求值结果为字符串的任意表达式。

ASCII(expr)

BIT_LENGTH

BIT_LENGTH('abcdef')

返回指定字符串的长度,以位为单位。每个 Unicode 字符长度为 2 个字节(相当于 16 位)。

expr 是求值结果为字符串的任意表达式。

BIT_LENGTH(expr)

CHAR

CHAR(35)

将介于 0 与 255 之间的数值转换成与 ASCII 代码相对应的字符值。

expr 是求值结果为介于 0 和 255 之间数值的任意表达式。

CHAR(expr)

CHAR_LENGTH

CHAR_LENGTH(Customer_Name)

返回指定字符串的长度,以字符数为单位。字符串的长度不包括前导和尾随空白字符。

expr 是求值结果为字符串的任意表达式。

CHAR_LENGTH(expr)

CONCAT

SELECT DISTINCT CONCAT ('abc', 'def') FROM employee

连接两个字符串。

exprs 是求值结果为逗号分隔字符串的表达式。

CONCAT 中必须使用原始数据,而不是已格式化的数据。

CONCAT(expr1, expr2)

INSERT

SELECT INSERT('123456', 2, 3, 'abcd') FROM table

将指定的字符串插入到另一个字符串的指定位置。

expr1 是求值结果为字符串的任意表达式。它标识目标字符串。

integer1 是任意正整数,它表示从目标字符串开头数起的第几个字符处插入第二个字符串。

integer2 是任意正整数,它表示目标字符串中由第二个字符串替换的字符数。

expr2 是求值结果为字符串的任意表达式。它标识要插入到目标字符串中的字符串。

INSERT(expr1, integer1, integer2, expr2)

LEFT

SELECT LEFT('123456', 3) FROM table

返回从字符串左侧算起的指定字符数。

expr 是求值结果为字符串的任意表达式

integer 是任意正整数,它表示从字符串左侧开始返回的字符数。

LEFT(expr, integer)

LENGTH

LENGTH(Customer_Name)

返回指定字符串的长度,以字符数为单位。返回的长度不包括任何尾随空白字符。

expr 是求值结果为字符串的任意表达式。

LENGTH(expr)

LOCATE

LOCATE('d' 'abcdef')

返回字符串在另一个字符串中的位置,以数字表示。如果在要在其中执行搜索的字符串中未找到要搜索的字符串,该函数将返回值 0。

expr1 是求值结果为字符串的任意表达式。它标识要搜索的字符串。

expr2 是求值结果为字符串的任意表达式。

它标识要在其中执行搜索的字符串。

LOCATE(expr1, expr2)

LOCATEN

LOCATEN('d' 'abcdef', 3)

与 LOCATE 类似,返回字符串在另一个字符串中的位置,以数字表示。LOCATEN 包括整数参数,用于指定开始搜索的起始位置。

expr1 是求值结果为字符串的任意表达式。它标识要搜索的字符串。

expr2 是求值结果为字符串的任意表达式。它标识要在其中执行搜索的字符串。

integer 是任意非零正整数,它表示开始搜索字符串的位置。

LOCATEN(expr1, expr2, integer)

LOWER

LOWER(Customer_Name)

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

expr 是求值结果为字符串的任意表达式。

LOWER(expr)

OCTET_LENGTH

OCTET_LENGTH('abcdef')

返回指定字符串的字节数。

expr 是求值结果为字符串的任意表达式。

OCTET_LENGTH(expr)

POSITION

POSITION('d', 'abcdef')

返回 strExpr1 在字符串表达式中的位置,以数字表示。如果未找到 strExpr1,该函数将返回 0。

expr1 是求值结果为字符串的任意表达式。它标识要在目标字符串中搜索的字符串。例如 "d"。

expr2 是求值结果为字符串的任意表达式。它标识要在其中执行搜索的目标字符串。例如 "abcdef"。

POSITION(expr1, expr2)

REPEAT

REPEAT('abc', 4)

将指定的表达式重复 n 次。

expr 是求值结果为字符串的任意表达式

integer 是任意正整数,它表示字符串的重复次数。

REPEAT(expr, integer)

REPLACE

REPLACE('abcd1234', '123', 'zz')

将指定字符表达式中的一个或多个字符替换为一个或多个其他字符。

expr1 是求值结果为字符串的任意表达式。这是要替换其中字符的字符串。

expr2 是求值结果为字符串的任意表达式。第二个字符串标识要从第一个字符串中替换掉的字符。

expr3 是求值结果为字符串的任意表达式。第三个字符串指定要替换到第一个字符串中的字符。

REPLACE(expr1, expr2, expr3)

RIGHT

SELECT RIGHT('123456', 3) FROM table

返回从字符串右侧算起的指定字符数。

expr 是求值结果为字符串的任意表达式。

integer 是任意正整数,它表示从字符串右侧开始返回的字符数。

RIGHT(expr, integer)

SPACE

SPACE(2)

插入空格。

integer 是任意正整数,它指示要插入的空格数。

SPACE(expr)

SUBSTRING

SUBSTRING('abcdef' FROM 2)

从固定字符数开始在原始字符串中创建新字符串。

expr 是求值结果为字符串的任意表达式。

startPos 是任意正整数,它表示从字符串左侧数起的第几个字符处开始生成结果。

SUBSTRING([SourceString] FROM [StartPostition])

SUBSTRINGN

SUBSTRING('abcdef' FROM 2 FOR 3)

与 SUBSTRING 类似,从原始字符串的固定字符数开始,创建一个新字符串。

SUBSTRINGN 包括一个整数参数,可用于指定新字符串的长度,以字符数为单位。

expr 是求值结果为字符串的任意表达式。

startPos 是任意正整数,它表示从字符串左侧数起的第几个字符处开始生成结果。

SUBSTRING(expr FROM startPos FOR length)

TrimBoth

Trim(BOTH '_' FROM '_abcdef_')

从字符串中删除指定的前导和尾随字符。

char 是任意单个字符。如果忽略此规范 (以及所需的单引号),则使用空白字符作为默认值。

expr 是求值结果为字符串的任意表达式。

TRIM(BOTH char FROM expr)

TRIMLEADING

TRIM(LEADING '_' FROM '_abcdef')

从字符串中删除指定的前导字符。

char 是任意单个字符。如果忽略此规范 (以及所需的单引号),则使用空白字符作为默认值。

expr 是求值结果为字符串的任意表达式。

TRIM(LEADING char FROM expr)

TRIMTRAILING

TRIM(TRAILING '_' FROM 'abcdef_')

从字符串中删除指定的尾随字符。

char 是任意单个字符。如果忽略此规范 (以及所需的单引号),则使用空白字符作为默认值。

expr 是求值结果为字符串的任意表达式。

TRIM(TRAILING char FROM expr)

UPPER

UPPER(Customer_Name)

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

expr 是求值结果为字符串的任意表达式。

UPPER(expr)

系统函数

USER 系统函数返回与会话相关的值。例如,用于登录的用户名。

函数 示例 说明 语法

DATABASE

 

返回您登录到的主题区域的名称。

DATABASE()

USER

 

返回您登录的语义模型的用户名。

USER()

时间序列函数

使用时间序列函数,您可以基于时间维聚合和预测数据。例如,您可以使用 AGO 函数计算一年前的收入。

时间维成员不能高于函数的级别。因此,必须在查询中投影唯一标识位于给定级别或在给定级别之下的成员的一个或多个列。

函数 示例 说明 语法

AGO

SELECT Year_ID, AGO(sales, year, 1)

计算某个度量在指定的过去时段内的聚合值。例如,要计算一年前的每月收入,可使用 AGO(Revenue, Year, 1, SHIP_MONTH)。要计算上个季度的季度收入,可使用 AGO(Revenue, Quarter, 1)

AGO(MEASURE, TIME_LEVEL, OFFSET)

其中:

  • MEASURE 表示要计算的度量,例如收入。
  • TIME_LEVEL 表示时间间隔,必须为 Year、Quarter、Month、Week 或 Day。
  • OFFSET 表示要往回计算的时间间隔数,例如 1 表示一年。

PERIODROLLING

SELECT Month_ID, PERIODROLLING (monthly_sales, -1, 1)

计算在距当前时间 x 个时间单位(开始时间)到 y 个时间单位(结束时间)这一时段内的度量聚合。例如,使用 PERIODROLLING 可以计算在当前季度前的某个季度开始到当前季度后的某个季度结束这一时段内的销售额。

PERIODROLLING(measure, x [,y])

其中:

  • MEASURE 表示度量列的名称。
  • X 是一个整数,表示距当前时间的偏移时间。
  • Y 是一个整数,表示该函数计算所用的时间单位数。
  • HIERARCHY 是一个可选参数,表示在时间维中要用于计算时间窗口的层次的名称,例如 YRMONDAY

TODATE

SELECT Year_ID, Month_ID, TODATE (sales, year)

计算某个度量从某个时段的开始到最新时段的聚合值,例如,年初至今的计算。

例如,要计算年初至今销售额,可使用 TODATE(sales, year)

TODATE(MEASURE, TIME_LEVEL)

其中:

  • MEASURE 表示至少引用一个度量列的表达式,例如 sales。
  • TIME_LEVEL 表示时间间隔,必须为 Year、Quarter、Month、Week 或 Day。

常数

您可以在工作簿和报表中使用常数来包含特定的固定日期和时间。

常数 示例 说明 语法

DATE

DATE '2026-04-09'

在计算或表达式中创建特定日期。

DATE 'yyyy-mm-dd'

TIME

TIME '12:00:00'

在计算或表达式中创建特定时间。

TIME 'hh:mi:ss'

TIMESTAMP

TIMESTAMP '2026-04-09 12:00:00'

在计算或表达式中创建特定时间戳。

TIMESTAMP 'yyyy-mm-dd hh:mi:ss'

类型

可以在表达式中使用数据类型,例如,CHARINTNUMERIC

例如,在创建将表达式的数据类型或空值文字更改为其他数据类型的 CAST 表达式时,可以使用类型。