Question

J'écris des rapports sur SQL Server Reporting Server qui ont un certain nombre d'heures groupées par, par exemple, l'utilisateur, et un total calculé sur la somme des valeurs.

À l'heure actuelle ma requête exécute une procédure stockée qui renvoie les heures comme au format HH: MM, plutôt que les heures de décimales, comme nos utilisateurs trouvent plus intuitive. Le problème se produit lorsque je tente et ajouter la colonne en utilisant une expression SSRS, parce que la fonction SOMME est pas assez intelligent pour gérer l'addition fois dans ce format.

Est-il possible à:

  1. Afficher un intervalle de temps (en minutes ou heures) à HH: MM tout en ayant le format il calculé sous forme décimale
  2. Ou diviser et calculer le total des HH: MM valeurs de texte pour arriver à un total comme une expression
  3. ?

Je voudrais éviter d'avoir à écrire / exécuter une seconde requête juste pour obtenir le total.

Était-ce utile?

La solution

Répondre à mon # 1:

  1. Faites votre requête retourne plusieurs minutes (noté TimeSpent ci-dessous).
  2. Définissez le format de votre zone de texte à « Général » si elle est pas déjà
  3. Utilisez l'expression suivante comme valeur: =FLOOR(Fields!TimeSpent.Value / 60) & ":" & RIGHT("0" & (Fields!TimeSpent.Value MOD 60), 2)
  4. Pour la zone de texte somme, utilisez l'expression suivante: =FLOOR(Sum(Fields!TimeSpent.Value) / 60) & ":" & RIGHT("0" & (Sum(Fields!TimeSpent.Value) MOD 60), 2)

Autres conseils

Vous pouvez également essayer de mettre cette fonction dans le code personnalisé de votre rapport.

Function secondsToString(seconds As int64) As String
Dim myTS As New TimeSpan(seconds * 10000000)
Return String.Format("{0:00}:{1:00}:{2:00}",myTS.Hours, myTS.Minutes, myTS.Seconds)
End Function

Mon retour généralement du temps SPs en quelques secondes et cela me empêche d'avoir à penser trop dur si je dois retourner HH: MM: SS en plus d'un endroit. De plus, vous pouvez faire toutes vos agrégations normalement et les envelopper dans ce pour obtenir un format assez.

Je ne peux pas prendre le crédit pour ce que je sais que je suis tombé sur sur le web il y a quelque temps, mais je ne me souviens pas où.

Dans votre cas, ses minutes si vous avez besoin de convertir en quelques secondes, vous pouvez essayer d'utiliser le code ci-dessous:

= Format (DateAdd ( "s", (Paramètres ReportParameter1.Value * 60), "00:00:00"), "HH: mm: ss"!)

Hope this helps

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top