SSRS случайным образом получает ошибку для параметра — решение состоит в том, чтобы перестроить отчет…затем это происходит снова

#reporting-services

Вопрос:

Я довольно опытен в SSRS, я делаю это уже довольно давно, поэтому я знаю, когда вижу ошибку:

«Во время обработки отчета произошла ошибка. (rsProcessingAborted) Была предпринята попытка установить параметр набора данных «@SiteID», который не определен в этом наборе данных. (rsunknowndatasetпараметр)»

Я знаю, что вызывает эту ошибку, и могу ее исправить. Однако эта ошибка случайным образом возникает время от времени. В итоге я просто перестраиваю проект и повторно развертываю его, и в течение нескольких дней все хорошо, а затем внезапно снова появится та же ошибка.

Я знаю, что с параметром нет проблем, так как у меня есть параметр @SiteID, как показано на рисунке:

введите описание изображения здесь

Поэтому, когда я получаю электронное письмо от пользователя о том, что «Отчет не работает», я просто захожу в свой отчет, перестраиваю и переиздаю, и ошибка исчезает без КАКИХ-либо других изменений. Через несколько дней, когда они захотят снова запустить отчет, произойдет та же ошибка. Что заставляет эту проблему возвращаться снова и снова. Мы запускаем SQL Server 2016 с SSRS. Это происходит с ЛЮБЫМ из моих отчетов на сервере отчетов. Это не конкретный проект, это случайно происходит в любом проекте.

Редактировать

Что я заметил, так это то, что когда пользователь сообщает об этой проблеме, я перехожу в раздел «Управление» отчетом по URL-адресу сервера отчетов. В этой области вы найдете свойства, источники данных и параметры. Когда я нажимаю параметры, я вижу эту ошибку:

введите описание изображения здесь

Поэтому очевидно, что что — то разрушает параметры-вот где я не понимаю, что является причиной этого. Вероятно, именно поэтому я получаю сообщение об ошибке. Итак, повторяю, отчет публикуется…внезапно параметры пропадают. Отчеты пользователей «отчет больше не работает» Я перестраиваю и повторно развертываю report…it затем снова работает в течение дня или около того, может быть, больше, чем день, я никогда не исследовал, сколько времени требуется, чтобы он снова сломался (так как это не срочные отчеты). Несколько дней спустя пользователь говорит, что отчет снова мертв…если я перейду на сервер отчетов, используя URL-адрес сервера отчетов, и нажму «Управление», а затем по какой-то причине нажму «Параметры», параметры исчезнут…что приведет к повторному развертыванию. Это происходит снова, и снова, и снова. Это никогда не кончается…

Комментарии:

1. Это очень странно. Используете ли вы хранимую процедуру для своего набора данных?

2. @Diego — Да, я использую хранимую процедуру, и этот набор данных (по крайней мере, для сайтов с рисунка выше) является общим набором данных, вызывающим sproc. Я повторно использую этот набор данных во многих своих отчетах, потому что он является общим для наших имен сайтов.

3. Я только что заметил твою правку. Отображаются ли параметры в свойствах набора данных?

4. @Диего, я хотел сказать, что ты видишь мою edit…So что-то ежедневно разрушает эти параметры. Например, если я перестрою отчет и опубликую их там…если я подожду несколько дней, а затем проверю параметры, они внезапно исчезнут. Смотрите мою правку в вопросе, показывающем вам ошибку.

5. Я думаю, мы все согласились с тем, что ничего подобного мы раньше не видели. Если бы это был я, как я уже говорил, я бы сделал копию таблиц каталога и наборов данных, когда отчеты работают, а затем снова, как только они сломаются. Сравнение их «может» помочь вам сосредоточиться на чем-то, что изменилось, но помимо этого я не уверен, что еще сказать…

Ответ №1:

Короче говоря, у вас не может быть одного и того же общего имени набора данных в разных проектах SSRS, которые находятся на одном сервере SSRS.

Таким образом, в нашем «репозитории» SSRS у нас есть несколько различных проектов SSRS. Оба проекта очень специфичны для определенной функциональности. Что я заметил, так это то, что каждый раз, когда я развертывал один из этих проектов SSRS, отчеты по другому проекту прекращали работать.

Когда от пользователя придет электронное письмо с сообщением о том, что отчеты приложения А не работают, я перейду в проект SSRS приложения А и повторно разверну его, и это устранит проблему. Несколько дней спустя другой пользователь сказал, что отчеты приложения B не работают, поэтому я бы повторно развернул приложение B. Не зная, что, когда я разверну отчеты A, отчеты B сломаются, и наоборот, развертывание B сломало A.

Приходите, чтобы узнать….у обоих проектов был общий набор данных с одинаковым ИМЕНЕМ (dsEmployees). Одно и то же имя, однако эти наборы данных указывали на разные sprocs с разными параметрами. Хорошо, когда вы развертываете и просматриваете базу данных на заднем конце Catalog , в таблице есть только одна запись для dsEmployees. Каждый раз, когда я перераспределял, это перезаписывалось другим набором данных, так как имена были одинаковыми.

Урок, извлеченный из разных проектов SSRS, будьте осторожны с общим именем набора данных, они должны отличаться. Я смог заметить разницу, выполнив следующий запрос:

 SELECT 
    c.Name,
    c2.*,
    c2.Parameter
FROM 
    DataSets d 
INNER JOIN
    [Catalog] c
ON
    c.ItemID = d.ItemID
INNER JOIN
    [Catalog] c2
ON
    c2.ItemID = d.LinkID
WHERE
    --one specific report for now
    d.ItemID='C3008EF4-E544-48F3-92C1-2222C6148B13'
 

Когда в отчете было указано, что он не работает. Затем я бы повторно развернул отчет и повторил ту инструкцию sql, которую я написал, и выгрузил строки на лист excel для сравнения. Одна из этих колонок Parameters , и я заметил, что параметры немного отличались. Я сразу же на что-то наткнулся, и все закончилось именно так. Спасибо за комментарий, опубликованный, это помогло мне снова взглянуть на это! Это не давало мне покоя в течение многих лет!

Комментарии:

1. Рад, что вы решили этот вопрос. Я не думал о дублирующихся именах наборов данных, хотя я знал, что они являются общими по имени, развертывание по умолчанию от VS заключается в том, что общие наборы данных (и источники данных) не перезаписываются по умолчанию именно по этой причине. По крайней мере, это беспокоило меня всего один день! 🙂

2. @AlanSchofield вы бы подумали, что они будут однозначно идентифицировать имена наборов данных, а не выделять текст? Я знаю, что есть идентификатор элемента, но если у вас есть один набор данных с именем dsEmployees в одном проекте и с тем же именем в другом, он будет перезаписан. Для меня это нехорошо, и поэтому это случилось со мной. Мне следовало бы знать лучше и поискать немного больше.