Mixiot 报表的机制很简单,将需要的报表设计一个 Excel 模板,然后填充数据生成实际报表。其中,如何填充数据是脚本配置的。

报表脚本示例

{
    "工作簿1名称":[
        {
            "field":"data",
            "block_id":"apim",
            "position":{
                "to":"",
                "from":"A_1"
            },
            "sequence":"cellData",
            "condition":{
                "action":"get_last_statistics",
                "script_uid":"STATISTICS1410094400003"
            },
            "format_function":""
        },
        {
            "field":"data",
            "block_id":"apim",
            "position":{
                "to":"B_10",
                "from":"B_1"
            },
            "sequence":"columnData",
            "condition":{
                "items":10000,
                "action":"get_statistics_list",
                "end_time":"2021-06-30 00:00:00",
                "object_id":"OBJ1343477200007",
                "mapping_id":"",
                "script_uid":"",
                "start_time":"2021-03-29 00:00:00"
            },
            "format_function":""
        },
        {
            "field":"data",
            "block_id":"apim",
            "position":{
                "to":"H_1",
                "from":"C_1"
            },
            "sequence":"rowData",
            "condition":{
                "items":10000,
                "action":"get_statistics_list",
                "end_time":"2021-06-30 00:00:00",
                "object_id":"OBJ1343477200007",
                "mapping_id":"",
                "script_uid":"",
                "start_time":"2021-03-29 00:00:00"
            },
            "format_function":""
        },
        {
            "field":"id,data,created",
            "block_id":"apim",
            "position":{
                "to":"H_3,H_4,H_5",
                "from":"B_3,B_4,B_5"
            },
            "sequence":"columnTableData",
            "condition":{
                "items":10000,
                "action":"get_statistics_list",
                "end_time":"2021-06-30 00:00:00",
                "object_id":"OBJ1343477200007",
                "mapping_id":"",
                "script_uid":"",
                "start_time":"2021-03-29 00:00:00"
            },
            "format_function":""
        },
        {
            "field":"id,data,created",
            "block_id":"apim",
            "position":{
                "to":"A_18,B_18,C_18",
                "from":"A_8,B_8,C_8"
            },
            "sequence":"rowTableData",
            "condition":{
                "items":10000,
                "action":"get_statistics_list",
                "end_time":"2021-06-30 00:00:00",
                "object_id":"OBJ1343477200007",
                "mapping_id":"",
                "script_uid":"",
                "start_time":"2021-03-29 00:00:00"
            },
            "format_function":""
        }
    ]
}

报表脚本说明

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

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

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

{
    "工作簿1名称":[
       {
            "field":"data",
            "remark":"上月数据",
            "block_id":"apim",
            "position":{
                "from":"A_1",
                "to":""
            },
            "sequence":"rowTableData",
            "condition":{
                "start":"date('Y-m-01 00:00:01',strtotime('-1 months'))",
                "end":  "date('Y-m-01 00:00:00', time())",
                "action":"get_statistics_list",
                "order_by":"[\"created\", \"asc\"]",
                "object_id":"A161205_20",
                "script_uid":"ST_ProduceSteam_Day"
            },
            "format_function":""
        }
    ],
    "工作簿2名称":[
         {
            "field":"data",
            "block_id":"apim",
            "position":{
                "from":"A_1",
                "to":""
            },
            "sequence":"rowTableData",
            "condition":{
                "action":"get_last_statistics",
                "script_uid":"STATISTICS1410094400003"
            },
            "format_function":""
        }
    ]
}

报表脚本字段解释

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

字段概要

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

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

sequence

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

position

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

  • from:从哪个单元格开始,列_行,如A_2
  • to: 到哪个单元格结束,列_行,如A_2

"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”}

1.3.4. format_function

如果需要对请求block的返回结果进行二次处理,则需要在此填写函数名,模板如下:

"format_function":"[{\"from\":\"start_time\",\"function\":\"format_date\",\"to\":\"start_time\"}]"

说明

  • format_functoin参数值为json字符串(字符串解析后为数组,需要用方括号括起来)
    • from 来源字段
    • function 执行的函数名
    • to 输出字段

function 当前实现的有:

format_month 输出 2022-06
format_date  输出 2022-06-23
format_hour  输出 12:00
format_week  输出 26    //第几周

condition

condition是一个key-value的一维对象,里边的key是根据接口要求设置的,具体详见block接口文档。

时间类型的参数

目前,统计计算接口中已经支持时间属性有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为每天 08:00:00
where_and:"[[\"created\",\"=\",\"date('Y-m-d H:i:s', strtotime(date('Y-m', time()) . '-01 00:00:00'))\"]]", // created为每个月1

具体写法可参考 php 取时间

常用php时间段

时间段 start end
当日 date(‘Y-m-d 00:00:01’, time()) date(‘Y-m-d 00:00:00’, strtotime(‘+1 day’, time()))
昨日 date(‘Y-m-d 00:00:01’, strtotime(‘-1 day’, time())) date(‘Y-m-d 00:00:00’, time())
- - -
当月 date(‘Y-m-01 00:00:01’, time()) date(‘Y-m-01 00:00:00’, strtotime(“+1 month”,time()))
上月 date(‘Y-m-01 00:00:01’, strtotime(“-1 month”,time())) date(‘Y-m-01 00:00:00’, time())
- - -
当年 date(‘Y-01-01 00:00:01’, time()) date(‘Y-12-31 23:59:59’, time())
去年 date(‘Y-01-01 00:00:01’, strtotime(‘-1 year’, time())) date(‘Y-12-31 23:59:59’, strtotime(‘-1 year’, time()))

start ≤ end_time ≤ end ; end_time为 apim get_statistics_list接口返回值

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

block

block参数代表需要被访问的数据源的block标识,具体参考mixiot的block_id的枚举。

tableman报表脚本示例

对于插入tableman的数据,需要首先在tableman系统中创建表格,然后脚本才能正常执行。

tableman的脚本跟excel脚本有部分差异:

{
    "report_table1":[
        {
            "block_id":"apim",
            "condition":{
                "items":5,
                "action":"get_statistics_list",
                "object_id":"OBJ1684490200006"
            },
            "field":"data,start_time,end_time",
            "table_field":"data1,data2,data3",
            "format_function":""
        }
    ],
    "report_table2":[
        {
            "block_id":"apim",
            "condition":{
                "items":5,
                "action":"get_statistics_list",
                "object_id":"OBJ1684490200006"
            },
            "field":"data,start_time,end_time",
            "table_field":"value1,value2,value3",
            "format_function":""
        }
    ]
}

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

属性 说明
block_id 需要获取数据源的block
condition 请求 api 需要传递的参数集合
field 需要从 api 返回结果解析到单元格的字段
table_field 预期要插入到对应表的什么字段,和field中的字段一一对应
format_function 格式化函数,在自定义接口时使用,不用则可置空

对于 field 和 table_field 的对应关系,这里详细说明一下:

上面的脚本表示:

接口获取的数据包含 data, start_time, end_time 字段,

希望将 data 放到 report_table1表的 data1,

start_time 放到 report_table1 表的 data2,

end_time 放到 report_table1 表的 data3。

report_table2 的情况相同。

文档更新时间: 2024-07-10 20:37   作者:Mixiot