SSRS中的空白值但SQL QUERY中的数据

时间:2017-04-19 19:36:57

标签: reporting-services sql-server-2012 ssrs-2008 ssrs-2012 ssrs-tablix

我在SSRS的解决方案中工作,它让我发疯,我会先解释一下,然后再告诉你我的问题:

使用参数@startDate = yeterday 6am和@EndDate =今天早上6点从具有模拟输入数据(来自电流,电压,压力等标签)的表中选择25个数据值。现在我们有一个表格,其中包含来自不同tagID的早上6点到早上6点的25个值。

我的问题在只有一个tagId为16时启动,它在SSRS表示值0.0000中显示我在Sql输出中显示我-0.00548 ... 对于实际的用户,我将使用2个tagIds(MSF_PDI_003,MSF_PDI_004)

这里是SQL查询:

declare @startDate  datetime2 = '2017-04-19 11:00',
        @endDate    datetime2 = '2017-04-20 11:00';

SELECT InstaTime,
    MSF_PDI_003,
    MSF_PDI_004
FROM (
    SELECT 
        DATEADD(HH,-5,H.time) AS InstaTime,
        SUM(
            CASE
                WHEN t.tagName = 'analog.MSF_PDI_003.curval'
                    Then H.value
                ELSE 0
            END) as MSF_PDI_003,
        SUM(
            CASE
                WHEN t.tagName = 'analog.MSF_PDI_004.curval'
                    Then H.value
                ELSE 0
            END) as MSF_PDI_004
    FROM hour H
    INNER JOIN tag T 
        ON T.tagId = H.tagId 
    WHERE T.tagName IN 
        ('analog.MSF_PDI_003.curval', 'analog.MSF_PDI_004.curval')
        AND H.time >= @startDate
        And H.time <= @endDate

  GROUP BY time
    ) QueryData

order by InstaTime desc

这是查询的结果:

SQL QUERY RESULT IN SQL-SERVER

这些是我在SSRS的tablix的文本框中使用的表达式(我使用了此查询的测试数据集:summary_prueba)

=Fields!InstaTime.Value         
=Fields!MSF_PDI_003.Value           
=Fields!MSF_PDI_004.Value

这里是SSRS中表格的结果:

CLICK IMAGE: SAMPLE2 SRSS

这可能是什么问题?  *唯一一个具有负值的人可能会强迫一轮吗?我应该使用不同格式的东西吗?

让我疯了,无法找到错误。我试着改变格式并且是一样的,你能帮帮我吗?因为这件事让我不能在晚上睡觉,所以我开始做噩梦。

我使用SQL Server 2012,以及报告MS Visual Studio Shell 2010。

2 个答案:

答案 0 :(得分:0)

让我们首先将您的查询合并到一个语句中,而不是UNION并将您现在单独的SELECT SUM(...)分开:

declare @startDate  datetime2 = '2017-04-18 11:00',
        @endDate    datetime2 = '2017-04-19 11:00';

SELECT InstaTime,
    MSF_PDI_003,
    MSF_PDI_004
FROM (
    SELECT 
        DATEADD(HH,-5,H.time) AS InstaTime,
        SUM(
            CASE
                WHEN t.tagName = 'analog.MSF_PDI_003.curval'
                    Then H.value
                ELSE 0
            END) as MSF_PDI_003,
        SUM(
            CASE
                WHEN t.tagName = 'analog.MSF_PDI_004.curval'
                    Then H.value
                ELSE 0
            END) as MSF_PDI_004
    FROM hour H
    INNER JOIN tag T 
        ON T.tagId = H.tagId 
    WHERE T.tagName IN 
        ('analog.MSF_PDI_003.curval', 'analog.MSF_PDI_004.curval')
        AND H.time >= @startDate
        And H.time <= @endDate
    GROUP BY InstaTime
    ) QueryData
order by InstaTime desc

现在,如果没有匹配的004或003值,它们将报告为零而不是空白。试试这个,看看这是否符合你的需要。

答案 1 :(得分:0)

好吧我找到了解决方案但没有问题,因为我仍然不明白为什么如果在sql server中我可以看到数据并且在SSRS的QueryDesigner中我仍然有0.00值。

这是一个关系数据库,我使用2个表,来自同一个数据库 DB:时间序列 表1:小时,从这里我使用value,time,tagId 表2:标签,从这里我使用tagName,tagId

两者都有共同的tagId,但我只是意识到exaclty只是这个信号MSF_PDI_004它与表标签中的tagName无关。(创建该信号时必须出错)

我更改了Query而不是使用tagName我使用了tagId,一切都很好,我可以在SSRS中看到与在SQL SERVER中看到的相同的值。

我仍然认为这很奇怪,因为如果查询适用于SQL SERVER,为什么不应该对SSRS透明?

我希望有人可以解释一下,谢谢那些花时间阅读和帮助的人。