注册虚拟指标


虚拟指标是基于原始指标和配置公式计算得到的标准指标,它与原始指标并不是一一对应关系。

注解

  • 通用数据服务会在查询时实时计算并返回虚拟指标,但不会进行数据库存储,因此虚拟指标只适用于加减乘除和一些特殊语法的轻量计算场景。有关目前支持的特殊语法,参见虚拟指标表达式案例章节。
  • 对于表达式需多层嵌套的复杂计算场景,建议在数据源中进行预计算后再注册到通用数据服务以保证数据查询性能。

虚拟指标配置规则


注册虚拟指标是在注册标准指标时定义以下特殊配置的过程:


  • 是否虚拟指标 需填写 Y

  • 指标表达式 可参照 Spring 表达式,基于一个或多个原始指标,结合属性或常量进行自定义。

    • 原始指标引用格式:#{Metric['原始指标APIKey@@同环比标识符@@原始指标字段Key']。其中,同环比标识符@@ 仅适用于 注册同/环比指标 的场景,不需要可省略。
    • 属性引用格式:Attribute['属性标识符']

    注解

    为保证性能,建议一个表达式引用的原始指标数量不超过3个。

    更多信息,参见 虚拟指标表达式案例

虚拟指标表达式案例


配置虚拟指标表达式的典型案例见下表。


使用场景 表达式语法 样例指标 样例指标表达式 样例表达式含义
指标相除 表达式语法为:A/B。A 和 B 均为指标。 发电量计划完成率 #{Metric[‘GSSCAPI@@production’] * 100 / Metric[‘GSSCAPI@@production_plan’]} 发电量/计划发电量,并转化为百分数分子
指标属性相除 表达式语法为:A/B。A 为指标,B 为属性。 发电小时数 #{Metric[‘WindAPI@@WENL_GENERAL_REPORT_SUM.PRODUCTION_ACTIVE’] / 1000 / Attribute[‘capacity’]} 发电量/容量
数值判断 表达式语法为:A?B:C。A 为判别式,如果结果为 true 则输出 B,如果为 false 则输出 C。该语法常用于判断表达式的因子及相互之间的关系是否符合业务逻辑,并在不符合业务逻辑时输出一个默认值或空值。 系统效率 #{Metric[‘SolarAPI@@INV.PR’] >0 ? Metric[‘SolarAPI@@INV.PR’] * 100 : null} 如果逆变器 PR(Performance Ratio,系统效率)大于零,则返回逆变器 PR 的百分数分子,否则返回空值
空值转换 表达式语法为:A?B。A 为基础表达式。该语法含义为:如果 A 为空值则输出 B,如果非空值则输出 A。该语法常用于多个指标连加的场景中,避免出现单个加数为空值而导致整个指标输出空值的情况。 应发电量 #{(Metric[‘SolarAPI@@SITE.RecoverableProduction’]?:0) + (Metric[‘SolarAPI@@SITE.ActualProdLoss’]?:0)} 实际发电量+可挽回发电量,如果加数为空值,转化为 0 处理
强制聚合方式 表达式语法为:SUM#(A#)。A 为基础表达式。该语法优先级高于指标固有的聚合方式,语法含义为:通用数据服务在对 A 进行多对象聚合计算时会强制采用求和的方式,而忽略 A 原有的聚合方式。如果表达式 A 中涉及了多个指标因子,通用数据服务会先计算单个对象的 A,再通过求和计算多对象的聚合指标。 辐照量(按容量加权平均) #{SUM#(Metric[‘SolarAPI@@SITE.Radiation2ACC’]*Metric[‘SolarAPI@@SITE.ConvertedCapacity’]#)/SUM#(Metric[‘SolarAPI@@SITE.ConvertedCapacity’]#)} SUM(辐照量×容量) / SUM(容量),仅当单个对象的辐照量和容量全为空值时,该对象才不参与聚合计算
聚合过滤 表达式语法为:/*anynull*/A。A 为基础表达式。该语法含义为:如果单个对象有一个或一个以上的因子为空,则不参与多对象的聚合计算。若不使用该语法,则默认表示:仅当单个对象的全部因子都为空时,才不参与多对象的聚合计算。 辐照量(按容量加权平均) #{/*anynull*/SUM#(Metric[‘SolarAPI@@SITE.Radiation2ACC’]*Metric[‘SolarAPI@@SITE.ConvertedCapacity’]#)/SUM#(Metric[‘SolarAPI@@SITE.ConvertedCapacity’]#)} SUM(发电量×容量) / SUM(容量),单个对象的辐照量和容量全为空值时,或者二者中的任一个为空值时,该对象都不参与聚合计算
JSON 解析 表达式语法为:#jsonPath(A,’KEY’)。A 为指标、测点或属性。该语法含义为:从 A 中提取键(key)为 KEY 的值(value)。 逆变器接入状态 #{#jsonPath(Point[‘INV.StateAttr’],’DELIVERY’)!=0 ? 1 : 0} 对字符型测点 INV.StateAttr(内容格式为 JSON)进行数据解析,识别 DELIVERY key 对应的 value,并判断其数值是否为 0,为 0 则输出 0,否则输出 1