【问题标题】:BLANK VALUE IN SSRS BUT DATA IN SQL QUERYSSRS 中的空白值,但 SQL 查询中的数据
【发布时间】:2017-04-19 19:36:57
【问题描述】:

我正在研究 SSRS 中的一个解决方案,它让我发疯,我会在向您展示我的问题之前解释一下:

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

我的问题从只有一个 16 的 tagId 开始,它在 SSRS 表示值中显示为 0.0000,而在 Sql 输出中显示为 -0.00548... 出于实际目的,我将只使用 2 个 tagId(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。

【问题讨论】:

  • 为什么你的表情中有First?也许第一个值总是空白。创建一个简单的列表报告并列出所有数据值,而不使用First。你看到了什么?
  • 您好,感谢您的回复,我使用的是第一个,因为对于那个文本框,我只需要当天早上 6:00 的值,所以它的顺序 desc 和第一天将是早上 6 点。我可以看到查询的结果,并且没有空格或空值。
  • 好的,这是@Laughing Vergil 在 sql 和 ssrs 中进行的新查询的结果。 i.imgur.com/GET2Y0N.pngi.imgur.com/iGEk2s7.png

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


【解决方案1】:

让我们首先将您的查询合并到一个语句中,而不是您现在拥有的 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 值,它们将报告为零而不是空白。试试这个,看看这是否符合你的需要。

【讨论】:

  • 感谢您的回复,我明天在工作时尝试一下,因为我这里没有 SRSS,该查询看起来更好更干净,MSF_PDI_004 是唯一一个有负小数的人,查询后,我通常可以看到 SQL -0.0449 中的输出...但是当我想将其发布在 SSRS 空白文本框中时,所有其他的都带有正常数据。无论如何,我会尝试并让您知道,非常感谢!
  • 好的,我更改了查询,SQL 中的结果是相同的,但现在在 SSRS 中,我可以在所有值中看到 0.00。我使用该查询创建了一个新数据集,新数据集的红色方块和旧的蓝色方块的结果。 [SQL] (i.imgur.com/GET2Y0N.png) [SSRS] (i.imgur.com/GbY992s.png) [SSRS 优先] (i.imgur.com/oLWxFKr.png)
  • 嗯。真是奇怪。我想让你做一个测试。在我上面提供的查询中,请将每个 Then H.value 更改为 Then H.value * -1,然后重新运行 [SSRS] 进程并显示其输出。我正在查看是否负数在 MSF_PDI_003 列中显示为零,正数在 SSRS 的 MSF_PDI_004 列中显示为数字。
  • 奇怪!我按照您的建议对 SQL 查询进行了更改,它显示正常的负小数,但另一个仍然相同 0,不显示数据。 image
  • 我在 SQL Query 中创建了一个 aux 列什么是 MSF_PDI_003 + (MSF_PDI_004) 作为 aux,我可以在 SQL SERVER 中看到正常结果,Result 并尝试在 SSRS 中查看它和向我显示与 MSF_PDI_003 Result SRSS 相同的值,并且 aux 列与 MSF_PDI_003 相同,因此 SQL 查询它正在执行正确的结果,正如我在 SQL SERVER 中看到的那样,但 SSRS 它被忽略,因为 MSF_PDI_004 是 SSRS 中实际显示的 0.00。
【解决方案2】:

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

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

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

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

我还是觉得很奇怪,因为如果查询在 SQL SERVER 上工作,为什么不应该对 SSRS 透明?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-09
    • 1970-01-01
    相关资源
    最近更新 更多