2009-02-27 6 views
8

J'ai un rapport et une source de données où l'une des colonnes est de type TimeSpan. La valeur TimeSpan semble s'afficher correctement dans le rapport lorsque j'utilise Fields!TheTime.Value, cela ne pose aucun problème.SSRS: somme des valeurs TimeSpan dans un rapport

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

Mais je voudrais faire une somme sur ces valeurs pour obtenir le temps total d'un groupe. En C# et comme je peux bien sûr faire un TimeSpan + un autre TimeSpan, je sais qu'ils peuvent être ajoutés. J'ai essayé

=Sum(Fields!TheTime.Value) 

Mais cela finit par s'imprimer en tant que numéro long. Par exemple pour les temps de sortie ci-dessus, j'obtiendrais 457800000000 comme somme. Et qu'est-ce que c'est censé être?

Quoi qu'il en soit, comment puis-je additionner les valeurs de timespan dans un rapport? Pour les périodes ci-dessus je voudrais finir avec 12:43:00 comme somme. À moins que ma tête ne m'ait à nouveau manqué en maths ... mais vous avez l'idée: p

+1

Comme vous l'avez déduit ci-dessous, la valeur additionnée est la valeur "tick". Vous pouvez également voir cela en calculant le nombre de secondes dans les temps ci-dessus: 07:02:00 = 25320s et 05:41:00 = 20460s. 25320 + 20460 = 45780. – Dan

Répondre

14

soupir la solution fâcheusement simple, ... Pourquoi ne pouvais-je juste essayé en premier lieu? Eh bien ... peut-être parce que je ne savais pas que j'avais accès à TimeSpan classe ... peut-être parce que je me croyais aveugle ... Mais de toute façon, la voici:

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

D'oh!

+1

J'avais besoin de préfixer avec 'System' - par exemple. = System.TimeSpan.FromTicks (Sum (Fields! Hours.Value)) –

+0

@David: Alors vous n'avez probablement pas 'using System;' dans votre fichier de code – Svish

0

Ce qui se passe probablement, c'est que lorsque vous affichez Fields! TheTime.Value, SSRS est assez intelligent pour savoir que l'afficher en tant que DateTime champ de type

lorsque vous ajoutez la somme là, il pense qu'il est un champ de type numérique et il affiche en tant que tel (par exemple, il est l'addition du nombre de « tiques » dans chaque champ timespan)

essayer de formater spécifiquement la valeur résumée en tant que datetime dans les propriétés du champ et il affichera probablement correctement

1

@Svish - J'ai effacé ma previ Je ne suis pas d'accord parce que j'avais une incertitude quant à ma réponse, mais je suis d'accord avec @pfunk. J'ai finalement obtenu SSRS back up et a eu un jeu autour et il semble certainement que votre grand nombre est le nombre de ticks donc il semble qu'un peu de formatage du résultat fonctionnera pour vous. Fait intéressant, ma précédente réponse alambiquée était une solution de contournement pour additionner les valeurs DateTime (en utilisant le type de données SQL Server DATETIME dans ma requête) que vous ne pouvez pas faire dans SSRS (et SQL) parce que vous ne pouvez pas additionner un DATETIME. Je vais l'inclure ici pour référence future, mais je pense que c'était un peu plus tôt :)

Le code ci-dessous convertit un champ DateTime en un double, résume le résultat, puis le convertit en DateTime et les formats pour hh: mm: ss

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

Où puis-je trouver les fonctions Date.FromOADate et ToOADate()? Le code ne fonctionne pas. Fait un soulignement rouge dans le studio visuel, bien que je puisse compiler.Mais quand je l'exécute, j'obtiens juste #Error dans ces champs. – Svish

+0

Les méthodes FromOADate et ToOADate sont des méthodes de la classe DateTime et non de la classe TimeSpan. Bonnes nouvelles sur votre solution - n'aimez-vous pas quand c'est une réponse simple :) –

Questions connexes