Невозможно выполнить запрос с параметром SSRS в iHistorian - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь заставить iHistorian принять запрос от SSRS, используя параметр для Date с OLEDB.

Запрос похож на этот в наборе данных построителя отчетов

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

Это выдает сообщение об ошибке от построителя отчетов при запуске предварительного просмотра отчета:

iHOLEDB.iHistorian.1'не удалось получить сообщение об ошибке, код результата: E_INVALIDARG (0x80070057)

Кто-нибудь знает, как получить параметр из запроса SSRS для работы с iHistorian?

1 Ответ

0 голосов
/ 09 октября 2019

Лучший способ, который я нашел для запроса Proficy Historian через OLEDB с параметрами, - это создать хранимую процедуру и сделать так, чтобы отчет использовал хранимую процедуру в качестве источника, передавая необходимые параметры.

Ниже приведен пример использования параметра timestamp для фильтрации данных Historian. Вы также можете довольно легко расширить хранимый процесс, передав параметры SamplingMode, DateFrom, DateTo и т. Д.

Шаг 1 Используйте справочную документацию для установки OLEDBдрайвера на ваш экземпляр SQL Server и создайте связанный сервер, указывающий на ваш Historian.

Шаг 2 Убедитесь, что драйвер OLEDB и связанный сервер существуют. Они должны выглядеть примерно так:

OLEDB Linked Server config

Шаг 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 или аналогичного:

Test Stored Proc

Шаг 5 Сконфигурируйте ваш набор данных SSRS для запроса через сохраненный процесс, передавая параметры по мере необходимости. Вот пошаговое руководство для настройки того, что если вы еще этого не сделали, это очень просто ...

...