2010-01-28 3 views
0

Компания, в которой я работаю, использует MacolaES для системы ERP. База данных SQL Server структурирована таким образом, что когда вещи больше не считаются активными, они перемещаются из набора «активных» таблиц в набор «исторических» таблиц. Это помогает сохранить «активные» таблицы достаточно маленькими, чтобы запросы быстро возвращались. С другой стороны, таблицы истории огромны. Соответствующие столбцы индексируются в этих таблицах, и если вы запрашиваете что-то конкретное, оно быстро возвращается.Запрошенные параметрические отчеты Crystal Reports

Проблема заключается в том, что вы создаете Crystal Report, который запрашивает у пользователя параметр. По неизвестным мне причинам параметры Crystal не переводятся в параметры SQL, поэтому вы получаете запросы, выбирающие все из таблицы истории заголовков заказов, соединенных со всем в таблице истории строк заказов, что приводит к более чем 8 миллионам строк.

Есть ли способ получить Crystal Reports для использования параметров в SQL-запросе вместо загрузки всех записей и фильтрации после факта? Я где-то читал, что хранимая процедура должна работать, но мне любопытно, возможен ли обычный параметризованный запрос в интересах экономии моего времени.

Вот формула выбора:

(
    trim({Orderheader.ord_no}) = {?Order No} 
) 
and 
(
    {Orderheader.ord_type} = 'O' 
) 
and 
(
    {orderlines.ord_type} = 'O' 
)
+0

Это зависит от типа формулы выбора записи и может быть преобразовано в предложение sql where. Используете ли вы какие-либо специальные операторы, которые не переходят на sql, например 'if' или любую функцию кристалла? – dotjoe

+0

Нет, просто используя логическое И. – Scott

+0

Вы пытались удалить отделку из своей формулы? –

ответ

3

В Crystal Reports Жмём Report/Формулы Выбор/запись ... Там же можно добавить формулу, аналогичную:

{table.field1} = {?Parameter1} and {table.field2} = {?Parameter2} 

Это добавит условие к инструкции where запроса SQL, которую отчет будет использовать для вытягивания строк.

Чтобы проверить, что является условием оператора where, используемого для вывода данных, вы можете перейти в базу данных меню/Показать инструкцию SQL. Таким образом, вы можете убедиться, что отчет использует параметры в фильтре.

Crystal Reports Руководство 8,5 пользователя упомянуть следующие советы:

Чтобы оттолкнуть запись выбор, вы должны выбрать «Использовать индексы или сервер для скорости» в диалоговом окне Параметры отчета окно (доступно на Меню «Файл»).

В формулах выбора записей избегайте данных преобразований типов в полях, которые являются не полями параметров. Например, избегает использования ToText() для преобразования поля числовой базы данных в строку базы данных .

Вы можете нажать несколько формул выбора записи , которые используют постоянные выражения.

Ваша формула имеет функцию TRIM в поле. Функция против поля не позволяет Crystal выталкивать формулу в базу данных, поскольку она не является постоянным выражением.

Если вам действительно нужно обрезать поле номера заказа, вы должны сделать это, используя SQL Expressions.

Литература: Отъезд article.

+0

У меня есть параметр, но он не отображается в инструкции SQL. – Scott

+0

Я проверил тест в своих Crystal Reports и поставил условия в оператор where. Я использую Crystal 9. Какую версию Crystal вы используете? Я пошел в Параметры файла/отчета, и это отмечено в моем отчете: Сервер базы данных не зависит от регистра, индексы пользователей или сервер для скорости, создайте дерево групп. Какие из них вы проверили? –

+0

Мы используем версию 8.5. На экране «Параметры отчета» есть следующее: Конвертировать значение NULL в значение по умолчанию, переводить строки DOS, переводить DOS-записки, использовать индексы или сервер для скорости, больше сообщений об ошибках в командной строке, нечувствительные к регистру данные SQL, выбирать различные данные для просмотра, создать дерево групп и отобразить предупреждения при обновлении. – Scott

Смежные вопросы