我在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中表格的结果:
这可能是什么问题? *唯一一个具有负值的人可能会强迫一轮吗?我应该使用不同格式的东西吗?
让我疯了,无法找到错误。我试着改变格式并且是一样的,你能帮帮我吗?因为这件事让我不能在晚上睡觉,所以我开始做噩梦。
我使用SQL Server 2012,以及报告MS Visual Studio Shell 2010。
答案 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透明?
我希望有人可以解释一下,谢谢那些花时间阅读和帮助的人。