SQL Server Reporting Services formato ore in ore: minuti
Domanda
Sto scrivendo rapporti su SQL Server Reporting Server che hanno un numero di ore raggruppati per esempio, l'utente, e un totale calcolato in base alla somma dei valori.
Al momento la mia query viene eseguita una stored procedure che restituisce le ore come in HH: MM, anziché in ore decimali, come i nostri utenti a trovare più intuitivo. Il problema si verifica quando provo e aggiungi la colonna utilizzando un'espressione SSRS, perché la funzione SUM non è abbastanza intelligente per gestire sommando i tempi in questo formato.
C'è un modo per:
- Visualizzazione di un intervallo di tempo (in minuti o ore) in HH: MM formato pur avendo calcolato in forma decimale
- o dividere e calcolare il totale del HH: MM valori di testo per arrivare a un totale come espressione ?
Vorrei evitare di dover scrivere / eseguire una seconda query solo per ottenere il totale.
Soluzione
Risposta mia # 1:
- Fai la tua interrogazione restituisca un numero di minuti (indicato con
TimeSpent
sotto). - Imposta il formato della vostra casella di testo a "Generale", se non è già
- Utilizza la seguente espressione come valore:
=FLOOR(Fields!TimeSpent.Value / 60) & ":" & RIGHT("0" & (Fields!TimeSpent.Value MOD 60), 2)
- Per la casella di testo somma, utilizzare la seguente espressione:
=FLOOR(Sum(Fields!TimeSpent.Value) / 60) & ":" & RIGHT("0" & (Sum(Fields!TimeSpent.Value) MOD 60), 2)
Altri suggerimenti
Si può anche provare a mettere questa funzione in codice personalizzato del vostro rapporto.
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
I miei SP generalmente tornare il tempo in secondi e questo mi impedisce di dover pensare troppo duro, se devo tornare HH: MM: SS in più di un posto. Inoltre, è possibile fare tutte le aggregazioni normalmente e avvolgerli in questo per ottenere un bel formato.
Non può prendersi il merito di questo come so mi sono imbattuto sul web qualche tempo fa, ma non riesco a ricordare dove.
Quindi nel tuo caso verbale quindi è necessario convertirlo in pochi secondi, si può provare a utilizzare il codice qui sotto:
= Format (DateAdd ( "s", (Parametri ReportParameter1.Value * 60), "00:00:00"), "HH: mm: ss"!)
Spero che questo aiuti