#sql #crystal-reports
#sql #crystal-отчеты
Вопрос:
Я использую Visual Studio 2008 и хотел бы представить следующий SQL-запрос в отчете:
select name, count(*) from mytable group by name;
Я могу достичь этого, создав набор данных, который по сути является приведенным выше запросом (состоящий из столбцов ‘name’ и ‘count’), однако создание дополнительного набора данных только для этого запроса кажется излишним. Я бы предпочел делать то, что я делал с другими отчетами в моем проекте, а именно иметь набор данных, который представляет собой всю таблицу:
select * from mytable;
А затем используйте функции Crystal Report для выполнения группировки. Однако я не могу найти способ выполнить эту группировку. Я предполагаю, что это возможно? Это позволило бы мне повторно использовать набор данных для других областей проекта вместо того, чтобы создавать уникальный набор данных для каждого отчета.
Ответ №1:
Группировка полей
Без написания SQL-запроса вы можете сгруппировать данные из таблицы.
В обозревателе полей вы можете найти «Поля имени группы», щелкнуть правой кнопкой мыши и выбрать «Эксперт группы».
После выбора вы получите диалоговое окно Group Expert, в котором отображаются поля, найденные в вашей таблице данных. Выберите имя поля, которое вы хотите сгруппировать. (Здесь я выбрал «Название проекта»)
Вы также можете создавать подгруппы в этом поле, группы будут классифицироваться как группа A, Группа B.
Теперь вы можете автоматически находить групповые поля, добавленные в ваш crystal report! Группировка выполнена!
Подсчет полей
Чтобы подсчитать количество записей или полей в отчете, вам необходимо добавить новые «Текущие итоговые поля»
Добавьте поле, которое вы хотите подсчитать.
После добавления поля Измените «Тип сводки» на Count и нажмите OK.
Добавьте это итоговое поле в свой отчет в той области, где вам нужно (желательно использовать нижний колонтитул группы).
Теперь найдите, что имя вашего поля сгруппировано и подсчитано без написания какого-либо SQL-запроса.
Надеюсь, это поможет вам, оставляйте комментарии, если таковые имеются!
Комментарии:
1. По некоторым причинам я не могу добавить Group Expert, как показано на первом изображении. Мой показывает только опцию обновления. Мне пришлось с самого начала использовать стандартный мастер создания отчетов, чтобы создать два групповых поля: (
Ответ №2:
В crystal reports добавьте группу по полю ‘name’ и вставьте туда сводку по любому полю из detail, изменив функцию summary на ‘count’.
Ответ №3:
Добавьте поле группы в crystal; в этом примере в поле name.
Вставьте сведения в нижний колонтитул группы.
Вставьте функцию подсчета в нижний колонтитул группы, рассчитывая уникальные идентификаторы записи. Также можно использовать отдельное количество, например, если у вас есть несколько вхождений с одним и тем же именем.
Ответ №4:
Для оптимальной производительности вам действительно следует использовать GROUP BY на стороне сервера.
Создайте представление, которое передает данные в ваш Crystal Report.
Вы можете выполнить группировку в Crystal, однако вы столкнетесь с проблемами производительности
по мере увеличения объема данных, запрашиваемых вашим отчетом.
Это дизайнерское решение, но оно экономит много времени и клиентскую обработку в долгосрочной перспективе.
Я обычно сначала разрабатываю представление (предложение WHERE, предложение GROUP BY, функции DB в SELECT)
, а затем отчет Crystal после того, как я подготовил данные на стороне базы данных.
Мой совет — начинать с конца.
Ответ №5:
Если возможно, создайте представление базы данных, которое группирует набор данных, а затем используйте это представление в отчете crystal. Это самая простая и наиболее читаемая реализация того, чего вы пытаетесь достичь в отчете.