2016-07-26 1 views
17

Когда мы используем SSRS для создания отчетов, мы можем использовать окно запроса в окне Dataset для создания пользовательских запросов. Но в локальных отчетах (.RDLC), когда мы хотим создавать отчеты, мы должны установить для Dataset заданный набор данных.Использование набора данных для отчетов Microsoft

enter image description here

Проблема заключается в том, когда мы имеем 100 отчетов мы также должны иметь 100 Datasets.Currently мы используем Dataset с этими полями (F1, F2, F3, ..., F100) и перед переплетом наш DataTable к отчетам мы меняем имя столбцов данных. но его читаемость низкая.

Я хочу спросить, есть ли лучший способ решить эту проблему?

Благодаря

+0

Вы в порядке с решением, которое создает dynmaic наборов данных во время выполнения и установить его в качестве источника данных для отчетов? – lokusking

+0

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

ответ

1

мне может понадобиться дополнительная информация для того, чтобы помочь - вы действительно говорят, что у вас есть наборам данных полей помеченных F1, F2, F3, ... и что теперь нужно привязать к фактические таблицы с столбцами, помеченными (например) Id, CustType, IsActive, ...?

Если это так, я бы предложил использовать Views, чтобы псевдоним каждого имени поля был F1, F2, ... Это может звучать так же, как и ваша оригинальная проблема, но все может быть автоматизировано.

Создание этих 100 представлений может быть достигнуто с помощью сценария. Этот скрипт может быть создан путем запуска некоторого интеллектуального T-SQL, который получает данные схемы, хранящиеся в SQL Server, и выводит требуемый сценарий.

Посмотрите на How can I get column names from a table in SQL Server?, чтобы начать.

Возможно, вам понадобится использовать курсоры в вашем T-SQL для циклического преобразования данных схемы и вывода сценария для создания представлений.

Наконец, если вам необходимо изменить каждый из 100 отчетов SSRS таким же образом, не забудьте, что каждый хранится в языке определения отчетов (XML), чтобы вы могли написать небольшую утилиту, которая читает каждый XML-файл и вносит необходимые изменения. Не забудьте сделать резервную копию этих файлов, прежде чем разрешить им новую утилиту.

Надеюсь, все это поможет и ответ не наступил слишком поздно.

+0

Спасибо, но я знаю Все, что вы сказали, и я попробую некоторые из них. Поэтому я ищу лучшее решение – Arian

3

Его лучшим решением является группировка наборов данных. Вы можете объединить набор данных с помощью своего бизнеса. Например, POLICY.xsd, USER.xsd, INVOICE.xsd и добавьте в другой набор данных в файл xsd.

Например, в визуальной студии вы видите 10 файлов набора данных. Но каждый элемент имеет разные типы данных.

Второе обновление - вы напишете лучше t-sql. Когда вы вообще выберите свой столбец для аналогичного отчета, вы будете использовать одни и те же данные.

Например Отчет включает 5 columsn A1, A2, A3, A4, A5 отчет B включает 6 колонок A1, A2, A3, A4, A5, A6

для них отчет вы будете использовать B отчета DataTable

0

Должен признаться, я до конца не понимаю проблему с предоставленной информацией, но вот решение, которое может быть для вас огромной выгодой.

Вы пытались создать свои отчеты из хранимых процедур?Таким образом, ваш файл RDLC не будет содержать запрос, вместо этого он будет искать определение запроса в хранимой процедуре и создает набор данных в файле RDLC. Затем во время выполнения вы выполняете хранимую процедуру в коде и передаете возвращенные данные в файл RDLC для выполнения.

Преимущества этого способа заключаются в том, что запросы инкапсулируются как объекты базы данных, вы не получаете миллион наборов данных в своем проекте, и вы можете отменить запрос из отчета, поэтому, если вы было 6 версий одного и того же отчета, в которых все использовались одни и те же поля, но, например, использовались различные предложения WHERE, вы могли использовать только один отдельный отчет (и вызывать соответствующий сохраненный процесс во время выполнения).

0

Хотя было бы неплохо увидеть Minimal, Complete, and Verifiable example Я также дам ему шанс.

Что вы можете сделать, создавая таблицу в своем db, поместите необходимые вам данные с каждым DataSet и пропустите эти данные.

т.е.

ID ............. Поля ........................ .................. QueryType .............. SqlQuery/StoredProcedure

1 ......... ...... ProducID, ProductName ............ 0 ............................ ..SP_GetBasicProductInfo

2 ............... OrderID, ProductId ..................... 0 .. ............................ SP_GetOrderIdsByProduct

3 ... ............ CustomerID, CustomerName .... 1 .............................. Выберите CustomerID, CUSTOMERNAME От Northwind.Customers

т.д.

Таким образом, вы можете получить поля, которые будут отображаться в и SQL-запрос будет выполняться. Вы можете в конце передать эту информацию своему Data Access Layer, чтобы выполнить запрос и заполнить требуемый DataSet.

Вы можете попробовать преобразовать все в строку или даже использовать разделитель для каждого типа, такого как int|ProductID,string|ProductName