11
votes

Comment afficher une période de quelques secondes dans HH: MM: Format SS dans les services de rapport

Dans MS Reporting Services 2008, j'ai un champ une durée stockée en secondes. Y a-t-il un moyen slick de l'obtenir dans le format HH: MM: SS dans une section de groupe du rapport?


0 commentaires

5 Réponses :


21
votes

Si vous voulez simplement l'afficher, convertissez une expression pour la valeur de la zone de texte: xxx pré>

Si vous souhaitez effectuer des calculs dessus, convertissez les secondes sur une date d'heure dans votre base de données. Utilisation de SQL: P>

var qry = from Q in t.TimeList
    select new
    {
        SecondsAsDateTime = DateTime.Today.AddSeconds(Q.MySecondsField) 
    };


2 commentaires

Votre "00:00:00" peut être changé en seulement 0.


Cela fonctionne parfaitement pour les épisodes simples mais ne fonctionne pas lorsque vous souhaitez agréger les résultats.



14
votes

Si vous avez besoin de travailler avec des temps plus de 24 heures (la solution de Chris Latta s'enveloppants dans ces cas), alors il y a deux solutions.

Formule simple strong> p> Si vous voulez simplement utiliser une formule sur le terrain tels les éléments suivants ce fil , (qui relie également de cette question)! p>

=code.ConvertSecondsToHourMinSec(Fields!MyField.Value)


0 commentaires

1
votes

Utilisez une fonction comme ceci:

Public Function ConvertTsToHMS(myValue As long) As String
    'Dim ts as TimeSpan = TimeSpan.FromTicks(myValue)
    Dim ts as TimeSpan = TimeSpan.FromSeconds(myValue)

    return Int(ts.TotalHours).ToString("00") + ":" + Int(ts.Minutes).ToString("00") + ":" + ts.Seconds.ToString("00")

End Function


0 commentaires

2
votes

Utilisez l'expression ci-dessous, remplacez-la audacieuse avec votre champ contenant la variable de secondes.

= daadd (dateInterval.second, Somme (champs! TotalDuration.Value) , CDTE ("1900-01-01 00:00:00"))

J'applique toujours la formation dans les propriétés de la zone de texte -

h "h" m "m" s "s" montrera comme "2h 16m 5s"


0 commentaires

0
votes

J'ai utilisé l'idée de Xan récemment et que le nombre de secondes que j'ai est assez grand - j'ai manqué de limite de type entier. Par conséquent, j'ai conçu une approche différente - peut-être que de toute personne trouvera utile :)

Je devais créer des champs calculés pendant des heures, des minutes et des secondes - utilisé après les formules suivantes:

  • xxxnumberofhours = int (champs! TimeInSec.Value / 3600)
  • xxxnumberofminutes = int ((champs! TimeInSec.Value MOD 3600) / 60)
  • xxxnumberfseconds = = ((((champs! TimeInSec.Value MOD 3600) MOX 60)

    Puis j'ai créé une expression pour afficher les secondes de HH: MM: SS (sans jours - ne nécessitait pas cela) Format:

    1. (somme (champs! Lwtnumberofhours.value) + int ((somme (champ (champs! Lwtnumberofminutes.value) + int (Somme (Fields! Lwtnumberfseconds.Value) / 60)) / 60))
    2. & ":" &
    3. droite ("0" & ​​(somme (champ (champs! lwtnumberofminutes.value) + int (Somme (champs! Lwtnumberofseconds.value) / 60, 2)
    4. & ":" &
    5. droite ("0" et somme (champs! lwtnumberofseconds.value) MOX 60, 2)

      Dans les lignes ci-dessus, vous pouvez voir que la ligne (1) calcule le nombre d'heures, la ligne (3) calculer le nombre de minutes et de ligne (5) calcule le nombre de secondes. Bien sûr, vous pouvez remarquer que des calculs supplémentaires sont faits pour obtenir le nombre de minutes complètes sur XXNumberfsecondes et les mêmes s'appliquent aux minutes / heures. Cela pourrait également être fait dans les champs calculés déjà (et peut-être qu'il aurait même plus de droit de le faire :)) - Cependant, j'ai préféré utiliser l'approche ci-dessus.

      De cette façon, j'ai pu encore formater de très grand nombre de secondes qui dépassent des types d'entier.


0 commentaires