2016-08-29 4 views
0

Ich habe einen Performance-Tracker eines unserer Systeme mit SSRS und Datenbankabfragen erstellt. Im Moment wird es Karten und die Verarbeitungszeit summieren und SSRS wird es mit dem ProcessingDate pro Tag darstellen. Unsere Datenbank legt basierend auf DataBatchID eine neue Zeile in der Datenbank ab. Diese Methode zum Hinzufügen aller Karten und Hinzufügen der Verarbeitungszeit pro Tag berücksichtigt jedoch nicht korrekt Situationen, in denen Threads gleichzeitig ausgeführt wurden. Mit SSRS gibt es also eine Möglichkeit zu bestimmen, dass, wenn das ProcessingDate genau gleich ist, nur diese zu nehmen und die NumCardsPassed zu addieren und den Durchschnitt von ProcessingTime zu nehmen und diese Ergebnisse dann dem Rest für diesen Tag hinzuzufügen. Entschuldigung, wenn ich es nicht gut erklärt habe. Unten ist das Dataset-Beispiel, das von der Abfrage zurückgegeben wurde, so dass für alle, die um 10:24 kamen, die numCardsPassed und die ProcessingTime addiert werden und dann dasselbe für 10:25 gemacht wird. Danach grafisch alle diese Werte zusammen für den Tag von 8/26 Gerade jetzt, wie es grafisch ist, es macht es scheint, als ob alles nacheinander in Reihenfolge läuft und NICHT zusammen, was es manchmal tun kann:SSRS nehmen durchschnittliche IF-Wert eines anderen Feldes ist gleich

ProcessingDate DataBatchId NumCardsPassed ProcessingTime 
8/26/2016 7:39 10112  99314    485 
8/26/2016 8:51 10113  4971    29 
8/26/2016 9:14 10114  4971    34 
8/26/2016 10:20 10115  4957    38 
8/26/2016 10:23 10116  4961    104 
8/26/2016 10:24 10117  4979    144 
8/26/2016 10:24 10119  4979    182 
8/26/2016 10:24 10118  4982    161 
8/26/2016 10:24 10120  4987    219 
8/26/2016 10:24 10122  4982    243 
8/26/2016 10:24 10121  4981    236 
8/26/2016 10:24 10125  4949    262 
8/26/2016 10:24 1
8/26/2016 10:24 10127  4973    278 
8/26/2016 10:24 10124  4975    241 
8/26/2016 10:24 10128  4981    279 
8/26/2016 10:25 10129  4976    280 
8/26/2016 10:25 10126  4972    258 
8/26/2016 10:25 10130  4979    277 
8/26/2016 10:25 10132  4976    288 
8/26/2016 10:25 10131  4972    277 
8/26/2016 10:25 10133  4841    288 

Antwort

0

Sie können tun, dass in Ihrer Suchanfrage:

SELECT ProcessingDate, SUM(NumCardsPassed) AS NumCardsPassed, AVG(ProcessingTime) AS ProcessingTime 
FROM ProcessTable 
GROUP BY ProcessingDate 
ORDER BY ProcessingDate 

Beachten Sie, dass, wenn das Datum tatsächlich ein Datum genau zu Millisekunden und gibt es leichte Abweichungen in den Millisekunden, dann können Sie einige Runden tun müssen, oder Umwandlung des Datumsfeldes, um es richtig auf die Minute zu gruppieren.

Sie können das Datum Minuten runden das folgende SQL ein:

MySql (von this answer)

SELECT SEC_TO_TIME((TIME_TO_SEC(ProcessingDate) DIV 60) * 60) AS TimeInMinutes 

SQL Server

SELECT DateAdd(mi, DateDiff(mi, 0, ProcessingDate), 0) AS TimeInMinutes 
+0

, die außer einer Sache arbeitet . das processingDate geht auf die Millisekunden (00: 00: 00.000) zurück, was zu genau ist und so werden nur Werte, die bis auf die Millisekunde genau gleich sind, zusammen gruppiert. Gibt es eine Möglichkeit, nach Minuten zu gruppieren? Ich habe versucht, in der ProcessingDate-Spalte konvertieren, aber es tut es nicht. – Saif

+0

Hinzugefügt Rundung sql zu beantworten –

Verwandte Themen