特性规则表达式说明


特性规则的表达式用于定义不同特性之间的逻辑关系,映射单个模型或多个模型之间的特性数值。


例如,当前模型中已包含 GenActivePWCapacity 特性,需要添加一个新特性 GenActivePWRatioGenActivePWRatio 的数值可以通过 GenActivePWCapacity 计算而来,则可以为 GenActivePWRatio 配置以下特性表达式:


“GenActivePW” * 100 / “Capacity”


特性表达式由特性(包含属性,测点),操作符和函数 3 个部分组成。

特性


插入特性时,需要插入特性标识符,使用半角双引号包含,且大小写敏感。


../_images/reference_1.png

操作符


分类

操作符

示例

说明

四则运算

3 + 2

加法

四则运算

3 - 2

减法

四则运算

3 * 2

乘法

四则运算

/

3 / 2.0

除法

四则运算

%

3 % 2

求余

逻辑运算

>

3 > 2

大于

逻辑运算

>=

3 >= 2

大于等于

逻辑运算

<

3 < 2

小于

逻辑运算

<=

3 <= 2

小于等于

逻辑运算

=

3 = 2

等于

逻辑运算

!=

3 != 2

不等于

逻辑运算

and

a > 1 and b > 2

并且

逻辑运算

or

a > 1 or b > 2

条件判断

CASE
WHEN <when expression_0> THEN <then expression_0>
WHEN <when expression_1> THEN <then expression_1>

WHEN <when expression_N> THEN <then expression_N>
ELSE \
END

CASE
WHEN 1 = 2 THEN 1
ELSE 2
END

三元表达式

条件判断

COALESCE

COALESCE(NULL, ‘a’, ‘b’)

返回第一个非空参数

函数

计算函数


分类

函数

示例

说明

数值处理函数

ABS

ABS(-2)

返回绝对值

数值处理函数

EXP

EXP(2)

返回无理数 e 的幂

数值处理函数

FLOOR

FLOOR(3.6)

向下取整

数值处理函数

ROUND

ROUND(1.5)

四舍五入

数值处理函数

CEILING

CEILING(1.01)

向上取整

数值处理函数

LN

LN(2.7)

返回以无理数 e 为底的对数,e 约等于 2.71828

数值处理函数

LOG10

LOG10(100)

返回以 10 为底的对数

数值处理函数

SQRT

SQRT(3)

返回平方根

数值处理函数

POWER

POWER(2, 3)

幂运算

数值处理函数

RAND

RAND()

返回 0-1 之间的随机数

字符串处理函数

LENGTH

LENGTH(‘abc’)

返回字符串的字符数

字符串处理函数

CONCAT

CONCAT(‘a’, ‘b’, ‘c’)

字符串拼接,任一参数为空,则返回空

字符串处理函数

LOWER

LOWER(‘A’)

将字符串转为小写

字符串处理函数

UPPER

UPPER(‘a’)

将字符串转为大写

字符串处理函数

TRIM

TRIM(’ a ‘)

删除字符串开头结尾的空格

字符串处理函数

REPLACE

REPLACE(‘acb’, ‘cb’, ‘e’)

字符串替换,例如 REPLACE(‘acb’, ‘cb’, ‘e’) 表示将 acb 中的 cb 替换为 e,将返回 ae

字符串处理函数

SUBSTRING

SUBSTRING(‘abc’, 1, 2)

返回子字符串,1, 2 表示子字符串的起始位置是第 1 个字符,提取的长度是 2 个字符,包括区间端点

时间处理函数

CURRENT_DATE

CURRENT_DATE

返回当前日期

时间处理函数

CURRENT_TIME

CURRENT_TIME

返回当前时间

时间处理函数

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP

返回当前时间戳

时间处理函数

YEAR

YEAR(CURRENT_TIMESTAMP)

返回年份

时间处理函数

QUARTER

QUARTER(CURRENT_TIMESTAMP)

返回季度

时间处理函数

MONTH

MONTH(CURRENT_TIMESTAMP)

返回月份

时间处理函数

WEEK

WEEK(CURRENT_TIMESTAMP)

返回周,值为数字 1-53

时间处理函数

HOUR

HOUR(CURRENT_TIMESTAMP)

返回小时

时间处理函数

MINUTE

MINUTE(CURRENT_TIMESTAMP)

返回分钟

时间处理函数

SECOND

SECOND(CURRENT_TIMESTAMP)

返回秒

时间处理函数

CONVERT_TZ

CONVERT_TZ(‘2024-03-01 16:20:20’, ‘Asia/Shanghai’, ‘America/Los_Angeles’)

时区转换,将第一个参数从一个时区转换到另一个时区

时间处理函数

FORMAT_DATE

FORMAT_DATE(CURRENT_DATE, ‘yyyy-MM’)

日期格式化

时间处理函数

FORMAT_TIME

FORMAT_TIME(CURRENT_TIME, ‘HH:mm’)

时间格式化

时间处理函数

FORMAT_DATETIME

FORMAT_DATETIME(CURRENT_TIMESTAMP, ‘yyyy-MM-dd HH:mm’)

日期时间格式化

时间处理函数

ADD_DATETIME

ADD_DATETIME(‘QUARTER’, 1, ‘2024-03-01 16:20:20’)

时间偏移

JSON 处理函数

JSON_VALUE

JSON_VALUE(‘{“foo”: 100}’, ‘$.foo’)

JSON_VALUE(‘[1, 2, {“x”: 3}]’, ‘$[2].x’)

从 JSON 字符串中提取指定路径的表达式

数组处理函数

SPLIT_TO_STR_ARRAY

SPLIT_TO_STR_ARRAY(‘1,2,3’, ‘,’)

将字符串切分成字符串数组,默认按逗号分割

数组处理函数

SPLIT_TO_INT_ARRAY

SPLIT_TO_INT_ARRAY(‘1,2,3’, ‘,’)

将字符串切分成整型数组,默认按逗号分割

数组处理函数

ARRAY_SIZE

ARRAY_SIZE(SPLIT_TO_STR_ARRAY(‘1,2,3’))

计算数组长度

数组处理函数

ARRAY_REMOVE

ARRAY_REMOVE(SPLIT_TO_INT_ARRAY(‘1,2,3’), ‘>=’, 2)

从数组中按条件移除元素,其中支持以下运算符:=,!=,<,<=,>,>=

数组处理函数

ARRAY_CONTAINS

ARRAY_CONTAINS(SPLIT_TO_INT_ARRAY(‘1,2,3’), 3)

查询数组中是否包含指定元素

数组处理函数

ARRAY_MAX

ARRAY_MAX(SPLIT_TO_STR_ARRAY(‘1,2,3’, ‘,’))

求数组最大值

数组处理函数

ARRAY_MIN

ARRAY_MIN(SPLIT_TO_INT_ARRAY(‘1,2,3’, ‘,’))

求数组最小值

聚合函数


聚合函数仅支持测点类型的特性表达式。

函数

示例

说明

SUM

SUM(2)

求和

AVG

AVG(2)

求平均

MIN

MIN(2)

求最小值

MAX

MAX(2)

求最大值

COUNT

COUNT(2)

求记录数

常用表达式模板


以下列出常用的表达式模板。

数值判断


该模板常用于判断表达式的因子及相互之间的关系是否符合业务逻辑,并在不符合业务逻辑时输出一个默认值或空值。

sum("INV.AcPower") > sum("INV.DcPower") 时,输出空值,否则输出 (sum("INV.AcPower") * 100) / sum("INV.DcPower")


CASE WHEN (sum("INV.AcPower") > sum("INV.DcPower"))
THEN null
ELSE ((sum("INV.AcPower") * 100) / sum("INV.DcPower")) END

空值转换


该模板常用于多个因子连加的场景中,避免单个加数为空值导致的整个指标输出为空值的情况。

COALESCE 语句将返回第一个非空参数。对于 COALESCE(sum("INV.RecoverableProduction"), 0),如果 sum("INV.RecoverableProduction") 为空,则返回 0,否则返回 sum("INV.RecoverableProduction") 的值。


(COALESCE(sum("INV.RecoverableProduction"), 0) + COALESCE(sum("INV.ActualProdLoss"), 0))

强制聚合方式


该模板常用于表达式中指标计算存在多重聚合的场景,采用强制求和的聚合方式,而忽略原有指标的默认聚合方式。

即使原始指标 “SITE.Radiation2ACC” 和 “SITE.ConvertedCapacity” 有其他的聚合方式,在 SUM 表达式中也会先计算 “SITE.Radiation2ACC” * “SITE.ConvertedCapacity”,然后求和。


SUM("SITE.Radiation2ACC" * "SITE.ConvertedCapacity") / SUM("SITE.ConvertedCapacity")

聚合过滤


该模板用于多个数值聚合时过滤空值的场景。如果单个对象有一个或以上的因子为空,则不参与多对象的聚合计算。如果不使用该语法,则默认表示仅当单个对象的全部因子都为空时才不参与多对象的聚合计算。


SUM(CASE
        WHEN "Radiation2ACC" IS NULL OR "ConvertedCapacity" IS NULL
        THEN NULL
        ELSE "Radiation2ACC" * "ConvertedCapacity"
    END)
/
SUM(CASE
        WHEN "Radiation2ACC" IS NULL OR "ConvertedCapacity" IS NULL
        THEN NULL
        ELSE "ConvertedCapacity"
    END)

JSON 解析


该模板可从 JSON 数据中提取指定字段的值,例如从逆变器的状态属性数据中提取 ‘DELIVERY’ 的值,判断该设备当前是否处于已安装(Delivered)的状态,并返回相应的标识值(1 或 0)。


CASE WHEN (json_value(max("INV.StateAttr"),'DELIVERY') != 0)
THEN 1
ELSE 0
END

上期


该模板可用于查询某一数据的上一期数据,当查询时段为 Day(1)~Day(N),则实际查询时段将转换为 Day(1-N)~Day(0)。假设指标的查询时段为 2024 年 4 月 1 日至 4 月 5 日,增加 LP 后,查询时段将更新为 2024 年 3 月 27 日至 3 月 31 日。


LP(sum("ActiveProduction"))

环比


该模板表示(当期指标/上期指标)× 100,乘以 100 便于搭配界面上的百分号“%”直接展示。


((sum("ActiveProduction") / LP(sum("ActiveProduction"))) * 100)

环比增长


该模板通过当期指标减去上期指标,得出环比增长的数值。


(sum("ActiveProduction") - LP(sum("ActiveProduction")))

环比增长率


该模板表示(当期指标 - 上期指标)/ 上期指标 × 100,乘以 100 便于搭配界面上的百分号“%”直接展示。


(((sum("ActiveProduction") - LP(sum("ActiveProduction"))) / LP(sum("ActiveProduction"))) * 100)

去年同期


该模板可用于查询某一数据的去年同期数据,当查询时段为 Day(1)~Day(N),则实际查询时段将转换为去年的 Day(1)~Day(N)。假设指标的查询时段为 2024 年 4 月 1 日至 4 月 5 日,增加 SPLY 后,查询时段将更新为 2023 年 4 月 1 日至 4 月 5 日。


SPLY(sum("ActiveProduction"))

年同比


该模板表示(当期指标 / 去年同期指标)× 100,乘以 100 便于搭配界面上的百分号“%”直接展示。


((sum("ActiveProduction") / SPLY(sum("ActiveProduction"))) * 100)

年同比增长


该模板将当期指标减去去年同期指标,得到年同比增长数值。


(sum("ActiveProduction") - SPLY(sum("ActiveProduction")))

年同比增长率


该模板表示(当期指标 - 去年同期指标)/ 上期指标 × 100,乘以 100 便于搭配界面上的百分号“%”直接展示。


(((sum("ActiveProduction") - SPLY(sum("ActiveProduction"))) / SPLY(sum("ActiveProduction"))) * 100)

上月同期


该模板可用于查询某一数据的上月同期数据,当查询时段为 Day(1)~Day(N),则实际查询时段将转换为上个月的 Day(1)~Day(N)。假设指标的查询时段为 2024 年 4 月 1 日至 4 月 5 日,增加 SPLM 后,查询时段将更新为 2024 年 3 月 1 日至 3 月 5 日。


SPLM(sum("ActiveProduction"))

月同比


该模板表示(当期指标 / 上月同期指标)× 100,乘以 100 便于搭配界面上的百分号“%”直接展示。


((sum("ActiveProduction") / SPLM(sum("ActiveProduction"))) * 100)

月同比增长


该模板表示当期指标减去上月同期指标,得到月同比增长值。


(sum("ActiveProduction") - SPLM(sum("ActiveProduction")))

月同比增长率


该模板表示(当期指标 - 上月同期指标)/ 上期指标 × 100,乘以 100 便于搭配界面上的百分号“%”直接展示。


(((sum("ActiveProduction") - SPLM(sum("ActiveProduction"))) / SPLM(sum("ActiveProduction"))) * 100)