gpt4 book ai didi

eclipse - 在 Birt 报告中获取左侧的重复行加入

转载 作者:可可西里 更新时间:2023-11-01 10:13:40 27 4
gpt4 key购买 nike

我正在加入 Birt 中的两个数据集。它是一个左外连接。以下是数据集的屏幕截图。

enter image description here

我需要左表所有行的原因是我正在对左表所有行的时间戳进行一些计算。如果终端 ID 与左表匹配,我需要计算右表中的优先级(发生了多少次)。

当我获取记录时,它会获取重复的记录,这会导致我的时间戳计算加倍。我不能进行内部联接,因为我需要从左表中进行时间戳计算。

两个表的多对多关系。我将举例说明我面临的问题是什么以及我想要实现的目标。例如。这是 DeviceEventObject 数据集的事件数据:

记录 1:

    "event" : "EXITED SUPERVISOR MODE",
"timestamp" : ISODate("2017-12-17T06:06:23.181Z"),
"terminal" : {
"terminalId" : "testterminal",
"branchId" : "test"
}

记录2:

 "event" : "ENTERED SUPERVISOR MODE",
"timestamp" : ISODate("2017-12-17T06:06:23.181Z"),
"terminal" : {
"terminalId" : "testterminal",
"branchId" : "test"
}

我根据每个事件的时间戳计算进入和退出事件之间的时间。

现在另一个数据集是DeviceStatusErrorCodePrioirtyLevel:例如。这是此数据集中的记录:

"status" : "Online",
"errorCode" : "123",
"priorityLevel" : "test",
"emailTypeCode" : "123",
"terminal" : {
"terminalId" : "testterminal",
"branchId" : "test"
}

现在我想计算 terminalId "testterminal"的优先级 "test"发生的次数。使用上述数据集计数将为 1。我在 terminalId 的基础上加入这两个数据集。

现在有了上面的数据集,我得到了重复的记录,这使我计算的时间翻了一番,而且我还得到了优先级 2 的计数。例如,这是我得到的:

"event" : "EXITED SUPERVISOR MODE",   "priorityLevel" : "test"
"event" : "ENTERED SUPERVISOR MODE", "priorityLevel" : "test"

我想要的是:

 "event" : "EXITED SUPERVISOR MODE",   "priorityLevel" : "test"
"event" : "ENTERED SUPERVISOR MODE",

birt 项目的附加信息:

enter image description here

来自两个数据集的示例数据:

DeviceStatusErrorCodePrioirtyLevel:

{
"_id" : ObjectId("5a36095f1854ad0b7096184b"),
"className" : "com.omnia.pie.cm.models.snapshot.terminal.v2.DeviceStatusErrorCodePrioirtyLevel",
"timestamp" : ISODate("2017-12-17T06:06:23.181Z"),
"deviceName" : "CardReader",
"status" : "Online",
"errorCode" : "123",
"priorityLevel" : "test",
"emailTypeCode" : "123",
"terminal" : {
"terminalId" : "testterminal",
"branchId" : "test"
}
}

DeviceEventObject:

{
"_id" : ObjectId("5a3608c61854ad0b70961846"),
"className" : "com.omnia.pie.cm.models.snapshot.terminal.v2.DeviceEventObject",
"event" : "EXITED SUPERVISOR MODE",
"value" : "True",
"timestamp" : ISODate("2017-12-17T06:03:50.901Z"),
"transactionData" : {
"transactionType" : "",
"transactionNumber" : "",
"sessionId" : ""
},
"terminal" : {
"terminalId" : "testterminal",
"branchId" : "test"
}
}

以下是我报告的链接,以防万一: https://drive.google.com/file/d/1dHOEneG2-fbeP9Mz86LUhuk0tSxnLZxi/view?usp=sharing

最佳答案

为 DeviceEventObject 添加一个新的数据集

在命令表达式构建器中添加以下聚合函数。

下面的函数$lookup基于terminalId的状态错误代码优先级的数据,然后是$unwind来展平数据。

$group terminalId 上的展平数据以累积终端 ID 的不同优先级。

$project 计算不同的优先级

[{$lookup:{
from: "devicestatuserrorcodeprioirtylevel", // name of the collection
localField: "terminal.terminalId",
foreignField: "terminal.terminalId",
as: "dsecpl"
}},
{$unwind:"$dsecpl"},
{$group:{
"_id":"$terminal.terminalId",
"prioritylevels":{"$addToSet":"$dsecpl.priorityLevel"},
"events":{"$push":"$event"}
}},
{"$project":{"prioritylevelcount":{"$size":"$prioritylevels"}, "events": 1} }
]

将所有可用字段移动到所选字段列。

预览结果。

关于eclipse - 在 Birt 报告中获取左侧的重复行加入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47808428/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com