2

Ich bin zwei Datensätze in Birt beitreten. Es ist eine linke äußere Verbindung. Unten sehen Sie den Screenshot der Datensätze. Erhalten doppelte Zeilen auf der linken Seite in Birt-Berichte

enter image description here

Der Grund, warum ich alle Zeilen der linken Tabelle muß, bin ich auf Zeitstempel einige Berechnungen mache für alle Zeilen der linken Tabelle. Ich muss die Prioritätsstufen (wie oft es aufgetreten ist) in der rechten Tabelle zählen, wenn Terminal-ID mit der linken Tabelle übereinstimmt.

Wenn ich die Datensätze bekomme, bekommt es die doppelten Datensätze, was dazu führt, dass meine Zeitstempel-Berechnungen verdoppelt werden. Ich kann Inner Join nicht tun, weil ich die Zeitstempel Berechnung aus der linken Tabelle für müssen.

Beziehung der beiden Tabellen in vielen zu vielen. Ich werde mit einem Beispiel erklären, mit welchem ​​Problem ich konfrontiert bin und was ich erreichen möchte. Zum Beispiel Das sind die Daten für die Ereignisse von DeviceEventObject Datensatz:

Datensatz 1:

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

Datensatz 2:

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

Aus dieser den Zeitstempel jedes Ereignisses ich die Zeit am Berechnung zwischen eingegeben und beendete Ereignisse.

Nun ist der andere Datensatz DeviceStatusErrorCodePrioirtyLevel: z. Dies ist die Datensätze in diesem Datensatz:

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

Jetzt habe ich die Anzahl der Male der Prioritätsstufe „Test“ für die TerminalID „testterminal“ aufgetreten berechnet werden soll. mit dem oben genannten Datensatz zählt 1. Ich bin die beiden Datensätze auf der Grundlage von TerminalId beitreten.

nun mit dem obigen Datensatz erhalte ich doppelte Datensätze, die meine Zeit verdoppelt, die ich Berechnung bin und ich erhalte auch die Zählung für die Prioritätsstufe 2. Zum Beispiel ist das, was ich bekommen:

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

Was ich will, ist:

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

Zusätzliche Informationen des Birt:

enter image description here

Beispieldaten aus beiden Datensätzen:

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

Hier ist der Link zu meinem Bericht bei: https://drive.google.com/file/d/1dHOEneG2-fbeP9Mz86LUhuk0tSxnLZxi/view?usp=sharing

+1

Ich kann einen Blick darauf werfen. Wie haben Sie das Birt-Reporting eingerichtet? Hast du ein Tutorial gelesen? – Veeram

+0

Ja, ich habe ein Tutorial zum Einrichten des Birt-Projekts verwendet, aber ich habe momentan keinen Link zum Tutorial. Wenn Sie irgendwelche Fragen haben, können Sie mich fragen .. Ich werde sehr dankbar sein, wenn Sie das beantworten können. – Talib

+0

@Veeram Ich habe eine andere Frage auch zu Birt und MongoDb und hat Kopfgeld drauf, wenn Sie schauen wollen: https://stackoverflow.com/questions/47752325/creating-group-and-analyzing-data- from-array-list-in-birt – Talib

Antwort

2

einen neuen Datensatz für DeviceEventObject set In

Fügen Sie die folgende Aggregatfunktion in der Builder für Befehlsausdrücke

Die folgende Funktion $lookup die Daten aus Status Fehlercode Prioritätsebene basierend auf TerminalId gefolgt von $unwind, um die Daten zu glätten.

$group die Daten auf terminalId abflachen, um die unterschiedlichen Prioritätsstufen für eine Terminal-ID zu akkumulieren.

$project die unterschiedlichen Prioritätsstufen

[{$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} } 
] 

Verschieben Sie alle verfügbaren Felder der ausgewählten Feldern Spalte zu zählen.

Vorschau Ergebnisse.

+0

danke @Veeram du bist ein Chef. – Talib

Verwandte Themen