SSDT SSRS Как показать значения отчета больше нуля

У меня есть значение с плавающей запятой производительности, которое вычисление: Sum (Fields! TotalMinutes.Value) / Sum (Fields! ProductiveHours.Value * 60)

У этого значения есть несколько нулей: Производительность с нулями Есть ли способ в SSDT Visual Studio отфильтровать их? Или я должен использовать выражение?

Я попробовал следующее в поле выражения: =switch(Sum(Fields!TotalMinutes.Value)/Sum(Fields!ProductiveHours.Value*60)>0, Fields!GLProgramName.Value)

Но пространство имен программ все еще там, с пустыми пробелами... Моя цель - отфильтровать программы с нулевыми значениями.

Спасибо!

1 ответ

Вы можете отфильтровать сгруппированные нулевые значения в CTE (обычное табличное выражение) в своем выражении SQL.

WITH
sample_data
AS
(
    SELECT tbl.* FROM (VALUES
      ( 'Program1', 30, 2)
    , ( 'Program1', 45, 1)
    , ( 'Program3', 15, 5)
    , ( 'Program3', 10, 7)
    , ( 'Program5', 0, 8)
    ) tbl ([GLProgramName], [TotalMinutes], [ProductiveHours]) 
)
, 
group_sample_data
AS
(
    SELECT 
          [GLProgramName]
    FROM 
        sample_data
    GROUP BY
        [GLProgramName]
    HAVING  
        SUM([TotalMinutes]) / SUM([ProductiveHours]) * 60 != 0 
)
SELECT * FROM sample_data WHERE [GLProgramName] IN(SELECT [GLProgramName] FROM group_sample_data)

Кроме того, я бы порекомендовал выполнять ваши вычисления для продуктивных минут в SQL или создавать их как представление для последующего использования в ваших отчетах.

WITH
sample_data
AS
(
    SELECT tbl.* FROM (VALUES
      ( 'Program1', 30, 2)
    , ( 'Program1', 45, 1)
    , ( 'Program3', 15, 5)
    , ( 'Program3', 10, 7)
    , ( 'Program5', 0, 8)
    ) tbl ([GLProgramName], [TotalMinutes], [ProductiveHours]) 
)
SELECT 
      [GLProgramName]
    , [TotalMinutes] = ISNULL([TotalMinutes], 0)
    , [ProductiveHours] = ISNULL([ProductiveHours], 0)
    , [ProductiveMinutes] = ISNULL([ProductiveHours], 0) * 60
FROM 
    sample_data
Другие вопросы по тегам