Подведение итогов по группам и подгруппам - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть отчет о кристаллах, он имеет групповое утверждение на основе двух полей

  1. COMPANYNAME
  2. Тип учетной записи

Теперь Crystal Report работает и выполняет группировку по «имени компании», но не по «типу учетной записи». У меня есть два типа учетных записей, «Обычный и Премиум». У одной компании есть оба типа счетов с нами, и это тянет на регулярной и не премиум. Как вы думаете, это проблема.

Я новичок в отчете Crystal. Я знаком с SQL, хотя. Различия, которые я вижу, это

  • Для любого столбца не используется агрегатная функция - в SQL для получения значимого результата требуется поле агрегирования
  • В отчете около 10 полей, но группировка по используется только по двум полям - в SQL вы должны группировать по всем полям, если их больше двух
  • Группировка по полям находится посередине и в конце - опять же в SQL важен порядок полей группирования

В этом случае я сначала группируюсь по названию компании, а затем по статусу аккаунта. Любое понимание будет полезно.

Обратите внимание, что я сгенерировал эквивалентный оператор SQL из Crystal Report. Этот запрос был в порядке, за исключением того, что не было сгруппированных утверждений. Я добавил их и столбец агрегирования сам, и я получаю тот же результат, что и в Crystal (но отчет SQL более точный, поскольку он группирует по обоим полям, а не по одному).

Редактировать: пример даты. Каждая компания может иметь несколько учетных записей одного типа. Я хочу агрегировать для «Название компании» и «Тип счета», чтобы данные отображались следующим образом.

+----+--------------+-------------+------+
| ID | Company Name | AccountType | Sale |
+----+--------------+-------------+------+
| 1  | ABC          | I           | 500  |
| 2  | ABC          | I           | 600  |
| 3  | ABC          | O           | 1000 |
| 4  | ABC          | O           | 2000 |
| 5  | ABC          | O           | 3000 |
| 6  | XYZ          | O           | 2500 |
| 7  | LMN          | O           | 3400 |
+----+--------------+-------------+------+

Вывод, который я хочу получить из приведенной выше таблицы:

+--------------+-------------+------+
| Company Name | AccountType | Sale |
+--------------+-------------+------+
| ABC          | I           | 1100 |
| ABC          | O           | 6000 |
| XYZ          | O           | 2500 |
| LMN          | O           | 3400 |
+--------------+-------------+------+

1 Ответ

4 голосов
/ 03 ноября 2011

Обновление, включающее обсуждение комментариев и пересмотренный вопрос:

Существует два основных способа решения этой проблемы:

1) Пересмотрите SQL для выполнения желаемого агрегирования.

2) В Crystal добавьте две группы, одну для компании, затем одну для типа учетной записи.

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

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

Когда вы добавляете первую группу (Company), Crystal добавляет заголовок группы # 1 перед разделом Details и заголовок группы # 1 после раздела Details.

Если вы запустите отчет в этот момент, для каждой компании Crystal покажет заголовок группы перед каждой группой подробных записей, связанных с этой компанией, затем покажет все подробные записи для этой компании и, наконец, отобразит Нижний колонтитул группы для этой компании.

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

Аналогично, нижний колонтитул группы обычно используется для отображения сводной информации для всех подробных записей, отображаемых в этой группе.

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

Когда вторая группа добавлена, она выполнит подгруппу исходной группы.

Когда добавляется вторая группа, Crystal поместит верхний колонтитул группы № 2 под верхним колонтитулом группы № 1 и над деталями и поместит нижний колонтитул группы № 2 непосредственно под подробностями и над нижним колонтитулом группы № 1.

На данный момент у вас есть формат отчета, подобный следующему:

Group Header #1 (Company)
  Group Header #2 (Account Type)
    Details (the individual sale records)
  Group Footer #2
Group Header #1

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

Теперь, если все, что требуется, это показать итоги для каждого типа учетной записи в каждой компании, тогда единственный раздел, который нам нужно показать в отчете, это нижний колонтитул группы № 2. Все поля (компания, тип счета, совокупный объем продаж) доступны в этом нижнем колонтитуле, поэтому нам не нужны никакие дополнительные области.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...