SSDT SSRS如何显示大于零的报告值

时间:2018-02-13 21:22:13

标签: reporting-services filtering sql-server-data-tools

我有生产力浮动值,计算: Sum(Fields!TotalMinutes.Value)/ Sum(Fields!ProductiveHours.Value * 60)

此值有一些零: Productivity with zeroes 在SSDT Visual studio中有没有办法过滤掉它们? 或者我应该使用表达式?

我在表达式框中尝试了以下内容: =开关(萨姆(字段TotalMinutes.Value)/萨姆(字段ProductiveHours.Value * 60)>!0,  领域!GLProgramName.Value)

但程序名称空间仍然存在,空格为...... 我的目标是过滤掉零值的程序..

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以在SQL语句中过滤掉CTE(公用表表达式)中的分组零值。

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