2009-02-27 7 views
8

Ich habe einen Bericht und eine Datenquelle, wo eine der Spalten vom Typ TimeSpan ist. Der TimeSpan-Wert scheint korrekt im Bericht angezeigt zu werden, wenn ich Fields!TheTime.Value verwende, kein Problem.SSRS: Summing TimeSpan Werte in einem Bericht

  • 07:02:00
  • 05:41:00

Aber ich würde eine Summe auf diesen Werten zu tun, die Gesamtzeit einer Gruppe zu erhalten. In C# und so kann ich natürlich einen TimeSpan + einen anderen TimeSpan machen, also weiß ich, dass sie hinzugefügt werden können. Ich habe versucht

=Sum(Fields!TheTime.Value) 

Aber es landet als eine lange Anzahl von einer Art ausdrucken. Zum Beispiel würde ich für die oben ausgegebenen Zeiten 457800000000 als Summe erhalten. Und was soll das eigentlich sein?

Wie auch immer, wie kann ich Zeitspannenwerte in einem Bericht zusammenfassen? Für die oben genannten Zeitspannen würde ich gerne mit 12:43:00 als Summe enden. Es sei denn, mein Kopf versagte mir noch einmal in Mathe ... aber Sie bekommen die Idee: p

+1

Wie Sie im Folgenden kurz erkennen, ist der summierte Wert der "Tick" -Wert. Sie können dies auch sehen, indem Sie die Anzahl der Sekunden in den obigen Zeiten berechnen: 07:02:00 = 25320s und 05:41:00 = 20460s. 25320 + 20460 = 45780. – Dan

Antwort

14

Seufzer die Lösung annoyingly einfach ... Warum konnte ich nicht habe gerade versucht, dass in erster Linie? Na ja ... vielleicht, weil ich nicht erkennen, habe ich Zugang zu TimeSpan Klasse hatte ... vielleicht, weil ich gedacht hatte mir blinde ... Aber egal, hier ist es:

=TimeSpan.FromTicks(Sum(Fields!TheTime.Value)) 

D'oh!

+1

Ich musste mit 'System' - zB. = System.TimeSpan.FromTicks (Sum (Fields! Hours.Value)) –

+0

@David: Dann hatten Sie wahrscheinlich nicht 'using System;' in Ihrer Codedatei – Svish

0

Was wahrscheinlich passiert ist, dass wenn Sie Felder anzeigen! TheTime.Value, SSRS ist intelligent genug zu wissen, um das als DateTime anzuzeigen Feld

, wenn Sie die Summe dort hinzufügen, es denkt, dass es ein numerischer Typ-Feld und zeigt sie als solche (dh es wird die Anzahl der „Ticks“ in jedem Zeitraum Feld Summieren)

speziell versuchen Formatierung der summierte Wert als Datetime in den Feldeigenschaften und es wird wahrscheinlich korrekt angezeigt

1

@Svish - Ich löschte mein Previ Post, weil ich eine gewisse Unsicherheit über meine Antwort hatte, aber ich stimme mit @funk überein.

Ich habe endlich SSRS zurück und hatte ein Spiel herum und es sieht sicherlich wie Ihre große Zahl ist die Anzahl der Ticks, so dass es aussieht wie ein bisschen Formatierung des Ergebnisses wird für Sie arbeiten.

Interessanterweise war meine vorherige verschachtelte Antwort eine Problemumgehung für das Summieren von DateTime-Werten (mit SQL Server DATETIME-Datentyp in meiner Abfrage), die Sie in SSRS (und SQL) nicht ausführen können, da Sie eine DATETIME nicht addieren können. Ich werde es hier für zukünftige Referenz wieder aufnehmen, aber ich glaube, war auf einer kleinen Tangens früher :)

Der folgende Code konvertiert ein DateTime-Feld in ein Double, summiert das Ergebnis und konvertiert es dann zurück in DateTime und Formate es für hh: mm: ss

=Date.FromOADate(Sum(Fields!TheTime.Value.ToOADate())).ToString("hh:mm:ss") 
+0

Wo finde ich die Funktionen Date.FromOADate und ToOADate()? Der Code funktioniert nicht. Macht im Visual Studio eine rote Unterstreichung, obwohl ich kompilieren kann.Aber wenn ich es leite, bekomme ich #Error in diesen Bereichen. – Svish

+0

Die FromOADate und ToOADate sind Methoden der DateTime-Klasse und nicht der TimeSpan-Klasse und ich denke, Ihre war TimeSpan. Gute Nachrichten zu Ihrer Lösung - lieben Sie es nicht, wenn es eine einfache Antwort ist :) –