Skip to content
导航栏

分析图表

分析图表(Chart) 主要用于编排数据统计分析查询逻辑,支持使用 JavaScript 脚本处理各查询节点结果,可在数据管理后台直接查阅分析图表,亦可作为处理器 (process) 来使用,引用方式为 charts.<分析图表名称>。分析图表(Chart)支持基于 ElasticSearchMySQL 实现的数据分析引擎用于各种业务场景。

数据看板、数据大屏页面亦可采用同样方式编写。

1 命名规范

分析图表描述文件是以 小写英文字母 + .chart.json 扩展名命名的 JSON 文本文件, <name>.chart.json; 结果处理脚本文件是以 分析图表名称 + . + 脚本名称 + .js 扩展名,命名的 JavaScript 脚本文件 <name>.<script>.js

数据看板扩展名为 .kan.json, 数据大屏扩展名为 .scr.json

文件夹 (相对分析图表根目录)文件名分析图表名称脚本名称Process (在 API /Flow 中引用)API 路由地址
/name.chart.jsonnamecharts.name/api/xiang/chart/name/查询接口
/name.count.jsnamecount--
/groupname.chart.jsongroup.namecharts.group.name/api/xiang/chart/group.name/查询接口
/groupname.count.jsgorup.namecount--
/group1/group2name.chart.jsongroup1.group2.namecharts.group1.group2.name/api/xiang/chart/group1.group2.name/查询接口
/group1/group2name.count.jsgroup1.group2.namecount--

2 文档结构

分析图表编排文档由基础信息、查询节点、输出数据和分析页面渲染参数构成。 查看完整示例

json
{
  "lang": "gou",
  "label": "最新信息",
  "version": "1.0.0",
  "description": "最新信息",
  "nodes": [],
  "output": {},
  "apis": {},
  "filters": {},
  "page": {}
}
字段类型说明必填项
langString数据查询条件描述语言。 许可值 gou 适用基于数据库实现的数据分析引擎。tai 适用基于 ElasticSearch 实现的分析引擎(单独挂载)。 默认值为gou
labelString分析图表呈现名称,用于开发平台呈现
versionString版本号,用于依赖关系校验和开发平台呈现
descriptionString分析图表介绍,用于开发平台呈现
nodesArray<Object Node>查询节点
outputObject | String输出结果定义, 同业务逻辑编排(flow) output
apis[key:String]:Object API分析图表查询 API, 可通过设置同 key 设置关闭接口、设置鉴权方式和默认值选项。
filters[key:String]:Object Filter查询过滤器设置。 同数据表格(talbe) fliters
pageObject Page分析图表查询页设置。

2.1 查询节点 nodes

json
{
  "nodes": [
    {
      "name": "行业分布",
      "query": {
        "model": "service",
        "select": ["city", ":COUNT(id) as cnt", "@industries.$ as industry"],
        "wheres": [
          { "column": "created_at", "value": "{{$query.from}}", "op": "ge" },
          { "column": "created_at", "value": "{{$query.to}}", "op": "le" }
        ],
        "order": ["cnt.desc"],
        "limit": 100,
        "group": ["@industries.$", "city"]
      }
    },
    {
      "name": "计费方式",
      "query": {
        "model": "service",
        "select": ["city", ":COUNT(id) as cnt", "@price_options.$ as option"],
        "wheres": [
          { "column": "created_at", "value": "{{$query.from}}", "op": "ge" },
          { "column": "created_at", "value": "{{$query.to}}", "op": "le" }
        ],
        "order": ["cnt.desc"],
        "limit": 100,
        "group": ["@price_options.$", "city"]
      }
    },
    {
      "name": "合并结果",
      "process": "xiang.chart.MergeData",
      "args": [
        ["城市", "行业", "计费"],
        {
          "行业": { "key": "city", "values": "{{$res.行业分布[*].industry}}" },
          "计费": { "key": "city", "values": "{{$res.计费方式[*].option}}" }
        }
      ]
    }
  ]
}

一个分析图表查询编排(Chart)可以有多个查询节点, 每个查询节点,也写设置对应数据引擎的 query 查询参数, 也可以调用一个处理器(process), 可以指定结果处理脚本和返回值,在查询节点用可以引用上下文信息。上下文数据引用、结果处理脚本具体与与业务逻辑编排(Flow)一致.

Object Node 数据结构

字段类型说明必填项
nameString查询节点名称
queryQuery DSL查询语言 查看完整说明
processString调用处理器 process queryprocess 任选其一。 如同时存在忽略 process 设置。
argsArray<Any>处理器参数表.可以引用输入输出或上下文数据,与 flow 相同。 查看完整说明
scriptString结果处理脚本,支持 ES5,与 flow 相同。 查看完整说明
outsArray<String>查询节点结果输出.使用 引用处理器返回结果,与 flow 相同。如不设置,返回值等于处理器返回结果。 查看完整说明
nextObject Next当查询结果符合设定条件时跳转至指定查询节点(尚未实现)

数据分析查询语法 Query DSL

数据分析引擎说明
gouGou Query DSL(Domain Specific Language) 用来描述数据查询条件,适用基于数据库实现的数据分析引擎。
taiTai Query DSL(Domain Specific Language) 用来描述数据查询条件,适用基于 ElasticSearch 的数据分析引擎。

2.2 查询页 page

json
{
  "page": {
    "primary": "城市",
    "layout": {
      "filters": [
        { "name": "开始时间", "width": 6 },
        { "name": "结束时间", "width": 6 }
      ],
      "charts": [
        { "type": "line", "props": {} },
        { "type": "bar", "props": {} }
      ]
    }
  }
}

布局 (layout)

字段类型说明
chartsArray<Object Render | String >可使用的图表组件
filtersArray<Object FilterInstance | String >可呈现的查询过滤器
Object FilterInstance 数据结构
字段类型说明必填项
nameString字段名称。必须已在查询过滤器方式(filters)中定义。
widthInteger列宽度。使用栅格系统,有效值 1-24。默认值为 6

2.3 分析图表查询接口 apis

分析图表默认开启数据和配置查询接口, 可通过设置同 key 设置关闭接口、设置鉴权方式和默认值选项。

json
{
  "apis": {
    "data": {
      "disable": true,
      "guard": "bearer-jwt",
      "default": {}
    },
    "setting": {
      "guard": "-",
      "default": {}
    }
  }
}
字段类型说明必填项
disableBool关闭接口。 true 关闭接口
guardString接口鉴权中间件, 多个用 , 分割, 设置为 - 不设置鉴权中间件, 不设置继承默认鉴权方式。
defaultObject参数表默认值, {"from":"2021-08-28"}

接口列表

管理接口(key)请求方式路由(相对)说明
dataGET/data返回查询结果 查看完整说明
settingGET/setting读取分析图表配置信息, 用于前端界面渲染 查看完整说明

3 完整示例

完整示例保存在 examples 目录,查看完整示例

json
{
  "lang": "gou",
  "label": "指标对比",
  "version": "1.0.0",
  "decription": "指标对比",
  "nodes": [
    {
      "name": "行业分布",
      "process": "models.service.get",
      "query": {
        "select": ["city", ":COUNT(id) as cnt", "@industries.$ as industry"],
        "wheres": [
          { "column": "created_at", "value": "{{$query.from}}", "op": "ge" },
          { "column": "created_at", "value": "{{$query.to}}", "op": "le" }
        ],
        "order": ["cnt.desc"],
        "limit": 100,
        "group": ["@industries.$", "city"]
      }
    },
    {
      "name": "计费方式",
      "process": "models.service.get",
      "query": {
        "select": ["city", ":COUNT(id) as cnt", "@price_options.$ as option"],
        "wheres": [
          { "column": "created_at", "value": "{{$query.from}}", "op": "ge" },
          { "column": "created_at", "value": "{{$query.to}}", "op": "le" }
        ],
        "order": ["cnt.desc"],
        "limit": 100,
        "group": ["@price_options.$", "city"]
      }
    },
    {
      "name": "合并结果",
      "process": "xiang.chart.MergeData",
      "args": [
        ["城市", "行业", "计费"],
        {
          "行业": { "key": "city", "values": "{{$res.行业分布[*].industry}}" },
          "计费": { "key": "city", "values": "{{$res.计费方式[*].option}}" }
        }
      ]
    }
  ],
  "output": "{{$res.合并结果}}",
  "apis": {
    "data": {
      "guard": "-"
    },
    "setting": {
      "guard": "-"
    }
  },
  "filters": {},
  "page": {
    "primary": "城市",
    "layout": {
      "filters": [
        { "name": "开始时间", "width": 6 },
        { "name": "结束时间", "width": 6 }
      ],
      "charts": [
        { "type": "line", "props": {} },
        { "type": "bar", "props": {} }
      ]
    }
  }
}