在 birt 中创建组并分析数组列表中的数据

creating group and analyzing data from array list in birt

我在 birt 报告中使用 mongo 数据库。我有一个数据集,其中包含如图所示的对象数组。

deviceStatus 是一个包含状态、错误代码、设备名称等子对象的数组

我想在创建组时在报告中为 deviceName 创建组,它是按以下形式创建的:

[ "CardReader" , "CashAcceptor" , "CashDispenser" , "ChequeAcceptor" , "EmiratesIdScanner" , "PinPad" , "JournalPrinter" , "ReceiptPrinter" , "StatementPrinter" , "SignpadScanner"]

我希望它以损坏的形式分组,例如:

CardReader
CashAcceptor
CashDispenser ..

错误代码也以这种形式来自数据集:

[ "97080301" , "97080302,97080303" , "" , "" , "" , "" , "" , "" , "" , ""]

我想以同样的方式将错误代码和状态代码从数组形式分解为每个设备名称的每一行。

CardReader  97080301
CashAcceptor 97080302,97080303
CashDispenser 

我是新手,请大家帮忙。提前致谢。

应用 Veeram 的答案后,errorCode 未显示在报告中,但在预览结果中显示:

1 :

2 :

请按照以下步骤获得所需的回复。

数据:

db.devicestatus.insert([
  {
    "_id": "0001",
    "className":"store",
    "deviceStatus": [ {
    "deviceName": "CardReader",
    "errorCode": "97080301",
    "status": "Bad"
  },
  {
    "deviceName": "CashAcceptor",
    "errorCode": "97080302,97080303",
    "status": "Bad"
  },
  {
    "deviceName": "CashDispenser",
    "errorCode": "",
    "status": "Good"
  }]
  }
])

1.Data资源管理器-转到数据集-新建数据集-Select数据源-输入数据集名称-点击下一步

2.Input 集合名称 - 设备状态 - 列出所有字段 - Select 命令类型下拉列表中的聚合选项 - 单击表达式

3.Add 表达式构建器提示中的以下表达式 - 单击“确定”

下面的表达式 $unwind to flatten the array to decompose devicestatus array into documents followed by $project 保留必填字段。

[
  {"$unwind":"$deviceStatus"},
  {"$project":{
    "_id":0,
    "className":1,
   "deviceStatus.deviceName":1,
   "deviceStatus.errorCode":1
   }
  }
]

下面的表达式遍历 devicestatus 数组和 $map and $project the required fields followed by $unwind 以展平以将数组分解为文档。

[{
  "$project":{
    "_id":0,
    "className":1, 
    "deviceStatus":{
      "$map":{
        "input":"$deviceStatus",
        "as":"result",
        "in":{
          "deviceName":"$$result.deviceName",
          "errorCode":"$$result.errorCode"
        }
      }
    }
   }
 },
 {"$unwind":"$deviceStatus"}
]

4.Confirm 刷新 - 单击是

5.Move selected multi select 下拉框的所有可用字段 - 单击完成

6.Preview 结果

{"className":"store", "deviceStatus":{"deviceName":"CardReader","errorCode":"97080301"}}
{"className":"store", "deviceStatus":{ "deviceName":"CashAcceptor","errorCode":"97080302,97080303"}}
{"className":"store","deviceStatus":{"deviceName":"CashDispenser","errorCode":""}}