2013-12-16 3 views
0

У меня есть Crystal Reports, который вытягивает данные по диапазону дат и группирует их по НЕДЕЛЕ. Также данные отображаются в таблице. Все работает нормально. Однако я столкнулся с одной проблемой.Показать дату Окончание в группе и отчеты Crystal Crystal

Когда я группирую по НЕДЕЛЕ, он отображает дату начала как в группе, так и в диаграмме. Я хотел бы показать дату окончания. Я написал формулу, чтобы заботиться об этом, однако, по какой-то причине даты выключены:

totext(cdate(dateadd("d",6,date({CallDate}))),"MM/dd/yyyy") 

Например, я диапазон дат между 11/10/2013 - 11/23/2013. Если я запускаю это без него формула группы, как это:

11/10/2013

11/17/2013

Я хочу, чтобы отобразить

11/16/2013

11/23/2013

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

11/20/2013

11/27/2013

Я m даже не уверен, как они вычисляют формулы 20 и 26. Любые предложения по устранению этой проблемы?

ответ

0

Это немного сложно. CR предполагает, что воскресенье будет первым днем ​​недели, если не указано иное.Так, например, чтобы получить первый день недели понедельник (номер 2 в CR по умолчанию недели), эта формула даст вам первый день недели:

If DayOfWeek({@Today}) = 2 Then 
{@Today} 
Else If DayOfWeek({@Today}) = 3 Then 
dateadd ("d",-1,{@Today}) 
Else If DayOfWeek({@Today}) = 4 Then 
dateadd ("d",-2,{@Today}) 
Else If DayOfWeek({@Today}) = 5 Then 
dateadd ("d",-3,{@Today}) 
Else If DayOfWeek({@Today}) = 6 Then 
dateadd ("d",-4,{@Today}) 
Else If DayOfWeek({@Today}) = 7 Then 
dateadd ("d",-5,{@Today}) 
Else If DayOfWeek({@Today}) = 1 Then 
dateadd ("d",-6,{@Today}) 

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

If DayOfWeek({@Today}) = 1 Then 
dateadd("d", +6, {@Today}) 
Else If DayOfWeek({@Today}) = 2 Then 
dateadd("d", +5, {@Today}) 
Else If DayOfWeek({@Today}) = 3 Then 
dateadd("d", +4, {@Today}) 
Else If DayOfWeek({@Today}) = 4 Then 
dateadd ("d",+3,{@Today}) 
Else If DayOfWeek({@Today}) = 5 Then 
dateadd ("d",+2,{@Today}) 
Else If DayOfWeek({@Today}) = 6 Then 
dateadd ("d",+1,{@Today}) 
Else If DayOfWeek({@Today}) = 7 Then 
{@Today} 

Так что ваши дни:

воскресенье (1)

понедельник (2)

вторник (3)

среда (4)

четверг (5)

пятницу (6)

субботу (7)

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

totext(cdate(dateadd("d",+6,date({CallDate}))),"MM/dd/yyyy") 
+0

Я на самом деле был в состоянии группы, используя формулу я отправил выше. Единственное, что я добавил, что это было исправлено, было то, что для этого потребовался групповой экспорт. Сортировка даты по возрастанию. Тогда группировка отлично работает. Единственная проблема, оставленная там, например, мои данные начинаются 11/06/2013, поэтому дата окончания должна быть 11/09/2013. Он добавляет к нему 6 дней, а дата окончания для первой строки всегда начинается с даты + 6. Я хочу, чтобы она была стандартной с воскресенья по субботу. – smr5

+0

Затем вы используете мою формулу выше. Вы проверяете DayOfWeek и затем добавляете соответственно, чтобы добраться до вашей субботы. –

+0

Должен ли я заменить @Today полем CallDate или фактической сегодняшней датой? – smr5

0

Казалось бы, проще конвертировать дату в числовое значение недели, а затем добавить количество дней, которое нужно довести до конца недели.

Modified from Source:

dateadd("ww",datepart("ww",{Command.REPORTDATE})-1,date(year({Command.REPORTDATE}),01,01)-dayofweek(date(year({Command.REPORTDATE}),01,01)))+7

Отрегулировать +7 в конце формулы, если вы хотите, чтобы закончить неделю на другой день.

WeekEndingSaturday

Proof sample report

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