1. 报表数据源脚本使用说明

1.1. 文档说明

1.2. 数据源脚本示例

{
    "sheet1":    [
        {
            "sequence":"cellData",
            "position":{"from":"A_1","to":""},
            "source":"Statos_detail",
            "format_function":"",
            "condition":{
                "start":"date('Y-m-d 07:00:00',time())",
                "end":"date('Y-m-d 08:00:00',time())",
                "object_id":1010,
                "project_id":1
            },
            "field":"data|1"
        },
        {
            "sequence":"columnData",
            "position":{"from":"A_2","to":"A_11"},
            "source":"Statos",
            "format_function":"",
            "condition":{
                 "where_and":"[[\"object_id\",\"=\",\"1010\"],[\"project_id\",\"=\",\"1\"]]",
                "type":1
            },
            "field":"data|1"
        },
        {
            "sequence":"rowData",
            "position":{
                "from":"B_2",
                "to":"H_2"
            },
            "source":"Statos",
            "format_function":"",
            "condition":{
                "where_and":"[[\"object_id\",\"=\",\"1010\"],[\"project_id\",\"=\",\"1\"]]",
                "type":1
            },
            "field":"data|1"
        },
        {
            "sequence":"columnTableData",
            "position":{"from":"B_3,B_4,B_5","to":"H_3,H_4,H_5"},
            "source":"Statos",
            "format_function":"",
            "condition":{
                "where_and":"[[\"object_id\",\"=\",\"1010\"],[\"project_id\",\"=\",\"1\"]]",
                "type":1
            },
            "field":"id,created,data|1"
        },
        {
            "sequence":"rowTableData",
            "position":{"from":"A_8,C_8,D_8","to":"H_18,I_18,G_18"},
            "source":"Statos",
            "format_function":"",
            "condition":{
                "where_and":"[[\"object_id\",\"=\",\"1010\"],[\"project_id\",\"=\",\"1\"]]",
                "type":1
            },
            "field":"id,created,data|1"
        },
        {
            "sequence":"cellData",
            "position":{
                "from":"B_1",
                "to":""
            },
            "source":"Statos_last_item",
            "format_function":"",
            "condition":{
                "type":1,
                "project_id":1,
                "object_id":1010
            },
            "field":"data|1"
        }
    ]
}

1.3. 层级说明

由上述脚本示例可知,json中的第一层主体格式为key-value格式;其中,key为每一个excel的工作簿(sheet)的名称,value则为需要在此工作簿中渲染的数据对象。

注:value是很多object类型数据的列表,其中,每一个object都填充自己内部声明指定的单元格,具体规则在字段解释章节进行说明

综上,如果一个模板包含多个工作簿(sheet),则数据源脚本格式应如下设置:

{
    "工作簿1名称":[
        {
            "sequence":"cellData",
            "position":{
                "from":"A_1",
                "to":""
            },
            "source":"Statos_detail",
            "format_function":"",
            "condition":{
                "start":"date('Y-m-d 07:00:00',time())",
                "end":"date('Y-m-d 08:00:00',time())",
                "object_id":1010,
                "project_id":1
            },
            "field":"data|1"
        }
    ],
    "工作簿2名称":[
        {
            "sequence":"cellData",
            "position":{
                "from":"A_1",
                "to":""
            },
            "source":"Statos_detail",
            "format_function":"",
            "condition":{
                "start":"date('Y-m-d 07:00:00',time())",
                "end":"date('Y-m-d 08:00:00',time())",
                "object_id":1010,
                "project_id":1
            },
            "field":"data|1"
        }
    ]
}

1.4. 字段解释

我们只拿一个工作簿的字段进行具体讲解(多工作簿的脚本同理)。

1.4.1. 字段概要

每个工作簿中,每个对象的主要属性如下:

属性 说明
sequence 需要渲染的单元格的格式
position 配合sequence属性,规范起始单元格到终止单元格
source 数据源来源标识,相当于过去的api地址
format_function 格式化函数,在自定义接口时使用,不用则可置空
condition 请求api需要传递的参数集合
field 需要从api返回结果解析到单元格的字段

1.4.2. 具体解释

  • sequence
可选值 说明
cellData 只渲染一个单元格的数据
columnData 渲染一列单元格的数据
rowData 渲染一行单元格的数据
columnTableData 以列为单位,渲染一块区域单元格的数据
rowTableData 以行为单位,渲染一块区域单元格的数据
  • position

position是一个对象,只有from和to属性

  • from:从哪个单元格开始
  • to:到哪个单元格结束

"position":{"from":"A_2","to":"A_11"}

注:这个参数是配合sequence属性选择数据范围的

可选值 说明 position举例
sequence是cellData情况下 只渲染一个单元格的数据 {"from":"A_1", "to":""}
sequence是columnData 渲染一列单元格的数据 {"from":"A_2", "to":"A_11"}
sequence是rowData 渲染一行单元格的数据 {"from":"B_2", "to":"H_2"}
sequence是columnTableData 以列为单位,渲染一块区域单元格的数据 {"from":"B_3,B_4,B_5", "to":"H_3,H_4,H_5"}
sequence是rowTableData 以行为单位,渲染一块区域单元格的数据 {"from":"A_8,B_8,C_8", "to":"A_18,B_18,C_18"}
  • source

这个属性就相当于过去的api接口地址,不同的标识代表不同的api地址,api地址与标识的映射关系需要去hapif这个block中查看

以下是已经实现的(未实现的暂时不支持使用)统计计算的api接口地址与标识的映射关系:

api地址 说明 对应标识
/statos/getLastItem 查询最新记录 Statos_last_item
/statos/getItem 查询指定记录 Statos_detail
/statos/getList 获取统计结果列表 Statos
  • format_function

source为非自定义接口的时候,此属性保留且为空就好;source为自定义接口的时候,需要填写自定义解析api返回结果函数,当然这个我也会提前告知你们写什么的。

  • condition

首先,condition是一个key-value的一维对象,里边的key是根据接口要求设置的,这个要看source属性的具体参数要求。

其次,我们基于source已经提供的接口要求基础上又扩展了一些能力,便于更灵活的设置请求参数的值。

1.4.2.1. 时间类型的参数

目前,统计计算接口中已经支持时间属性有4个,分别是 "start"、"end"、"id"、"created";他们均支持写php的date函数来定义接口传参所需的时间,比如:

start:"date('Y-m-d 07:00:00',time())", // start为每天 07:00:00
end:"date('Y-m-d 08:00:00',time())", // end为每天 07:00:00
where_and:"[[\"created\",\"=\",\"date('Y-m-d H:i:s', strtotime(date('Y-m', time()) . '-01 00:00:00'))\"]]", // created为每个月1号

具体写法可参考 php 取时间

1.4.2.2. 关于mapping_id

在过去版本的报表中,我们可以在pre_request中写mapping_id,我们在当下的版本中也延续了这个能力,并且更加细化了对mapping_id的处理方式。

因为mapping_id可以映射多个object_id,并根据每个object_id生成一张对应的报表,所以在本系统中,应满足以下前置设置:

  • 外面的帽子的属性报表生成模式,需要勾选多报表
  • 外面的帽子属性设置mapping_id,需要填写一个有效的mapping_id
  • 在报表数据源脚本中设置的mapping_id要与外面的帽子属性的mapping_id保持一致,才能受理本次报表任务

满足以上设置后,即可在脚本的任意一处可填写object_id的地方,填写mapping_id,比如:

"condition":{
    "where_and":"[[\"mapping_id\",\"=\",\"1002\"],[\"project_id\",\"=\",\"1\"]]",
    "where_or":"[[\"mapping_id\",\"=\",\"1002\"],[\"project_id\",\"=\",\"1\"]]",
    "type":1
    },
  • field

field参数是需要解析的api接口返回的字段,如果是一个字段,则直接输入对应字段名称即可,比如:

field:"data"

如果多列|行单元格的时候,可以以英文逗号分隔字段设置,比如:

field:"id,created,data"

但有时统计计算返回的data属性(或者任意一个名字都可以)并不是一个字符串,而是一个数组,而我们想取数组下某一个元素时,此时可如下设置:

// data的值 ["360.00","198.99"]
// data|0 则取data的第一个元素=》"360.00" ,data|1 则取data的第二个元素=》"198.99",以此类推
field:"id,created,data|0
© Mixlinker all right reserved,powered by Gitbook文件修订时间: 2021-03-05 16:09:24

results matching ""

    No results matching ""