0

我试图让 iHistorian 接受来自 SSRS 的查询,使用日期参数和 OLEDB。

查询在报表生成器数据集中是这样的

SELECT timestamp, tagname, value
FROM     ihrawdata
WHERE timestamp LIKE '@date' 

这会在运行报表预览时从报表生成器发出错误消息:

iHOLEDB.iHistorian.1' 失败,没有可用的错误消息,结果代码:E_INVALIDARG(0x80070057)

任何人都知道如何从 SSRS 查询中获取参数以与 iHistorian 一起使用?

4

1 回答 1

0

我发现通过带有参数的 OLEDB 查询 Proficy Historian 的最佳方法是创建一个存储过程并让报告使用该存储过程作为其源,并传递您需要的参数。

这是一个使用您的时间戳参数示例过滤 Historian 数据的示例。您还可以很容易地扩展存储过程,以传递 SamplingMode、DateFrom、DateTo 等参数

步骤 1使用帮助文档将 OLEDB 驱动程序安装到您的 SQL Server 实例上,并创建指向 Historian 的链接服务器。

步骤 2验证 OLEDB 驱动程序和链接服务器是否存在。它们应该看起来像这样:

OLEDB 链接服务器配置

步骤 3在使用新链接服务器的数据库中创建存储过程:

CREATE PROCEDURE [Historian_GetDataByTimestamp]
    @HistorianLinkedServer NVARCHAR(100),
    @Timestamp DATETIME

AS

BEGIN
    DECLARE @SQL NVARCHAR(4000);
    DECLARE @Result TABLE
       (TagName NVARCHAR(100) NOT NULL,
        [Timestamp] DATETIME NOT NULL,
        [Value] NVARCHAR(100) NOT NULL,
        Quality NVARCHAR(100) NOT NULL);

    SET @SQL = 'SELECT tagname, timestamp, value, quality
                FROM OPENQUERY ("' + @HistorianLinkedServer + '",
               ''SET SamplingMode = RawByTime
                 SELECT tagname, timestamp, value, quality
                 FROM ihRawData
                 WHERE Timestamp = "' + CONVERT(nvarchar, @Timestamp, 20) + '"'')';

      INSERT INTO @Result EXEC sp_executesql @SQL

      SELECT Tagname, [Timestamp], [Value], Quality
      FROM @Result
      ORDER BY TagName DESC, [Timestamp]
END;

第 4 步从 SSMS 或类似工具测试您的存储过程:

测试存储过程

第 5 步将您的 SSRS 数据集配置为通过存储的过程进行查询,并根据需要传递参数。这是配置的分步指南,如果您以前没有这样做过,它非常简单......

于 2019-10-09T01:04:30.870 回答