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

问题描述 投票:1回答:1

我在birt报告中使用mongo db。我有数据集,其中包含图片中的对象数组。

enter image description here

deviceStatus是一个包含status对象,erroCode,deviceName等子对象的数组。

我想在创建组时在报表中为deviceName创建组,它是以这种形式创建的:

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

我希望它以破碎的形式分组,如:

CardReader
CashAcceptor
CashDispenser ..

errorCode也是从数据集中以这种形式出现的:

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

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

CardReader  97080301
CashAcceptor 97080302,97080303
CashDispenser 

我是新来的,请有人帮忙。提前致谢。

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

1:enter image description here

2 :

enter image description here

java eclipse mongodb birt
1个回答
1
投票

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

数据:

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 Explorer - 转到数据集 - 新数据集 - 选择数据源 - 输入数据集名称 - 单击下一步

enter image description here

2.Input collection name - devicestatus - 列出所有字段 - 从命令类型下拉列表中选择Aggregate选项 - 单击Expression

enter image description here

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

enter image description here

下面的表达式$unwind将数组展平,将devicestatus数组分解为文件,然后用$project 保存所需的字段。

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

要么

下面的表达式遍历devicestatus数组和$map$project所需的字段,然后是$unwind以展平以将数组分解为文档。

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

要么

4.确认刷新 - 单击是

enter image description here

5.将所有可用字段移动到所选的多选项下拉框 - 单击“完成”

enter image description here

6.预览结果

{"className":"store", "deviceStatus":{"deviceName":"CardReader","errorCode":"97080301"}}
{"className":"store", "deviceStatus":{ "deviceName":"CashAcceptor","errorCode":"97080302,97080303"}}
{"className":"store","deviceStatus":{"deviceName":"CashDispenser","errorCode":""}}
© www.soinside.com 2019 - 2024. All rights reserved.