更新时间:2024-03-28 11:06:52

本文包括如下内容:

1. 定义数据连接

2. JSON程序数据集

 

获取指标模型ID的方法参考 AnyRobot指标模型查询接口 章节。

1. 定义数据连接

新建了一个名为“ar_multi_model_demo”的数据连接,并填写了一个模型的访问地址和参数。在URL中填写两个指标模型的ID,并根据指标模型ID的数量来构建参数POST的内容。

2. JSON程序数据集

使用 JavaScript 脚本,将 JSON 对象转换为二维表。这种方式可以解决所有不能直接用 JSON 数据集的场景,可以根据用户自己的数据结构定制脚本,从而实现和报表的对接。 

1)新建JSON程序数据集

设计器中新建 JSON 程序数据集,如下图所示:

2)合并多个指标模型的数据

上面数据连接返回的数据是个数组,分属两个指标模型,在使用之前需要对数据进行合并。

注意:注意不是所有的指标模型数据都需要合并,也不是所有指标模型数据都能合并,是否合并数据看指标模型定义和查询的规则。比如两个指标本来就是同一个表中的两个属性,查询的条件和范围也一致, 使用的场景也是要把这个表的数据还原显示,这就存在合并数据的需求和基础。

数据合并主要是对两个列表数据进行字段对齐,逻辑和数据库连表操作类似,下面用2个表模拟一下合并过程:

表A:

code
status
a 0
b 1
c 1

表B:

code avg_rpo
a 21
b 33
c 32

合并数据后的列表:

code status avg_rpo
a 0 21
b 1 33
c 1 32

需要一个可以关联数据的字段方可完成合并数据的操作,上面示例中这个字段是code。但是,如果A表的数据在B表中找不到对应记录,此时应该如何处理数据呢?此种情况下,需要根据具体的业务逻辑进行数据处理,这与SQL中的连表查询操作一样,存有left join ,right join, inner join, outer join 四个逻辑的。

针对“ar_multi_model_demo”这个数据连接, 数据处理采用的是outer join的逻辑。脚本代码如下

function formatTime(t) {

       const h = parseInt(t / 60 / 60 % 24)

       const m = parseInt(t / 60 % 60)

       const s = parseInt(t % 60)

 

       if (h>0){

              return  h+"时"+m+"分"+s+"秒"

       }else if (m>0){

              return m+"分"+s+"秒"

       }else{

              return s+"秒"

       } 

}

 

var columns = ['name',   'avg_rpo','status'  ];

var orgValumnDict = new Object()

var org_codes = []

 

function set_default_item(org_code){

    if(!org_code){return false}; 

 

    if(org_codes.indexOf(org_code)!==-1){

        return true

    }

    org_codes.push(org_code)

     

    orgValumnDict[org_code] = new Object() 

    orgValumnDict[org_code]["name"] = org_code;  

    orgValumnDict[org_code]["avg_rpo"] ="";

    orgValumnDict[org_code]["status"] ="";  

 

    return true

}

 

$.forEach(function (item, modelIdx) { 

    if (modelIdx == 0){ 

        item['datas'].forEach(function (data) { 

            org_code = data.labels.org_code ;  

            if(!set_default_item(org_code))return; 

             

            orgValumnDict[org_code]["avg_rpo"] = formatTime(data.values[0])

        });

    }else if (modelIdx == 1){ 

          item['datas'].forEach(function (data) { 

              org_code = data.labels.org_code ;  

           if(!set_default_item(org_code))return; 

 

              if (data['values'][0]==1){

                  orgValumnDict[org_code]["status"] = "正常"

              }else{

                  orgValumnDict[org_code]["status"] = "异常"

              } 

           });

    } 

}); 

 

var table = []; 

org_codes.forEach(function (org_code) { 

    row = [];

    item = orgValumnDict[org_code]

 

    columns.forEach(function (column) { 

        row.push(item[column]);

    } );

    table.push(row);

});

return merge(table, columns);

点击预览按钮,查看取出来的 JSON 数据已经转换成了列表数据,如下所示: