Форматирование промежутков времени в Business Objects Desktop Intelligence (BO Deski) - PullRequest
0 голосов
/ 10 марта 2009

Может кто-нибудь сказать мне, как отформатировать определенное количество секунд (например, 16742 секунды) в удобочитаемой форме (например, 1d 5h 2m 13s)

  • с использованием формулы поля BO
    или
  • из оператора SELECT T-SQL (где Длительность в секундах из агрегата SUM)?

Ответы [ 2 ]

1 голос
/ 08 июля 2009

Я сделал это, используя Deski и четыре переменные. Начните с измерения часов, создайте несколько переменных, в следующем году моя переменная year - vYears, моя переменная Month - vMonths, моя переменная days - vDays, а моя переменная hours - vHours.

vYears использует следующий расчет:

=Floor(Sum(<Hours Billed by Date Billed>/24)/365.25)

vWeeks использует следующий расчет:

=Floor(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7)

vDays использует следующий расчет:

=Floor(Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365.25)-<vYears>)*365.25/7-<vWeeks>)*52/24)

vHours использует следующий расчет:

=Truncate(Sum((Sum(Sum((Sum(<Hours Billed by Date Billed>/24)/365)-<vYears>)*365/7-<vWeeks>)*52/24-<vDays>)*24) , 2)

I Затем можно вывести эти переменные, выполнив следующие действия:

=<vYears>+" Years "+<vWeeks>+" Weeks "+<vDays>+" Days "+<vHours>+" Hours"

Если вам нужна дополнительная информация, пожалуйста, не стесняйтесь спрашивать.

Спасибо

Мэтт

1 голос
/ 18 марта 2009

Лично я бы сделал для этого функцию TSQL. Ниже приведен пример, который вы можете адаптировать:

IF(OBJECT_ID('FN_STRING_TO_TIME', 'FN') IS NOT NULL)
    DROP FUNCTION FN_STRING_TO_TIME
GO

CREATE FUNCTION dbo.FN_STRING_TO_TIME( 

    -- Seconds to convert
    @pSeconds   INT
)
RETURNS VARCHAR(12)
---------------------------------------------------------------------------------------
-- Developer:       Linus Brimstedt
-- Date:        2009-03-17
--
-- Function:        Returns the given seconds in H:MM:SS format
--          
-- Output:          String in format H:MM:SS
--          
---------------------------------------------------------------------------------------
BEGIN

-----------------------------
-- Variables
-----------------------------

    DECLARE @output     VARCHAR(30) -- Describe the variables

    DECLARE @minutes    INT
    DECLARE @hours      INT

-----------------------------
-- Implementation
-----------------------------

    SET @minutes = @pSeconds / 60
    SET @pSeconds = @pSeconds % 60

    SET @hours = @minutes / 60
    SET @minutes = @minutes % 60

-----------------------------
-- Return output
-----------------------------
    RETURN  CAST(@hours AS VARCHAR) + ':'
    +   dbo.FN_STRING_LPAD(@minutes, 2, '0') + ':'
    +   dbo.FN_STRING_LPAD(@pSeconds, 2, '0') 
END
GO

-- Test
DECLARE @seconds    INT
,   @got        VARCHAR(12)
,   @expected   VARCHAR(12)

SELECT  @seconds = 67
,   @expected = '0:01:07'
SET @got = dbo.FN_STRING_TO_TIME(@seconds)

IF(@got != @expected)
    RAISERROR('FN_STRING_TO_TIME(%d) returned bad value: Expected: %s, got %s', 11, 11, @seconds, @expected, @got)

SELECT  @seconds = 60 * 60 * 7 + 60 * 14 + 34
,   @expected = '7:14:34'
SET @got = dbo.FN_STRING_TO_TIME(@seconds)

IF(@got != @expected)
    RAISERROR('FN_STRING_TO_TIME(%d) returned bad value: Expected: %s, got %s', 11, 11, @seconds, @expected, @got)

Приветствие / Л

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...