Одна запись в нескольких группах в Crystal Reports XI - PullRequest
1 голос
/ 31 января 2012

Я пытаюсь создать отчет на основе системы тикетов. Цель состоит в том, чтобы иметь один график с несколькими строками, один для билетов, открытых по неделям, другая строка для билетов, закрытых по неделям.

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

Например. Билет 123456 Дата открытия: 01.01.2012 Дата закрытия: 1/12/2012

Этот билет был открыт в течение недели 1 и закрыт в течение недели 2. Проблема в том, что если вы группируете по открытой неделе, а затем по закрытой неделе, вторая группа фильтруется по первой.

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

Возможно, не лучшее описание, но это трудно описать? У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 22 мая 2012

Если бы я где вы, я бы изменил ваш SQL-оператор, добавив что-то вроде следующего:

WITH DateTable 
AS 
( 
    SELECT CAST((GETDATE() - 180) as Date) AS [DATE] 
    UNION ALL 
    SELECT DATEADD(dd, 1, [DATE]) FROM DateTable  
    WHERE DATEADD(dd, 1, [DATE]) < cast(GETDATE() as Date) 
) 

Приведенное выше создает временную таблицу со всеми датами за последние 180 дней. Затем добавьте новую строку, чтобы выбрать столбец «ДАТА» из этой таблицы в запрос SQL:

SELECT "DateTable"."DATE", ....

Затем после операторов SELECT используйте CROSS JOIN для объединения двух таблиц

CROSS JOIN "DateTable"

Это берет вас из результатов запроса, которые выглядят так:

OrderNum DueDate  CompletedDate
1        01/01/01 01/02/01
2        01/01/01 01/01/01
3        01/02/01 01/03/01
4        01/02/01 01/02/01

Для запроса результатов, которые выглядят так:

OrderNum DueDate  CompletedDate Date
1        01/01/01 01/02/01      01/01/01
2        01/01/01 01/01/01      01/01/01
3        01/02/01 01/03/01      01/01/01
4        01/02/01 01/02/01      01/01/01
1        01/01/01 01/02/01      01/02/01
2        01/01/01 01/01/01      01/02/01
3        01/02/01 01/03/01      01/02/01
4        01/02/01 01/02/01      01/02/01
1        01/01/01 01/02/01      01/03/01
2        01/01/01 01/01/01      01/03/01
3        01/02/01 01/03/01      01/03/01
4        01/02/01 01/02/01      01/03/01

Теперь вы можете использовать простое заявление о выборе записи Crystal, чтобы сократить результаты только до тех, которые открыты в эти дни:

{Ticket Open Date} < {Command.DATE} and
{Ticket Close Date} > {Command.DATE}

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

...