2015-01-28 4 views
0

나는 Cognos에서 FromDate와 Todate라는 두 개의 날짜 프롬프트를 가지고 있습니다. FromDate는 항상 첫 번째 주 (즉, 월요일)이고 ToDate는 그 주 마지막 날 (예 : 일요일)이어야합니다. 어떤 도움을 주시면 감사하겠습니다. 감사Cognos에서 구현하는 첫 주 첫날과 마지막 날

답변

0

FROMDATE

다음 표현식은 지난 주 월요일을 반환합니다

다음 FROMDATE 값 다음 일요일 거기에서 당신이 얻을 수있는

_add_days(current_date, (-1 * _day_of_week(current_date,2)) - 7) 

TODATE

_add_days([FromDate],6) 

유일한 문제는 월요일에 보고서를 실행할 때 원하는 범위입니다. 위의 표현을 사용하면 보고서는 월요일에 실행될 때 추가 주간으로 돌아갑니다. 이전 월요일 FROMDATE 이전 월요일되며 TODATE 그냥 현재 전 일요일 될 것이 표현식을 사용하여 월요일에 실행하면

CASE _day_of_week(current_date,1) 
WHEN 1 THEN _add_days(current_date, -1 * _day_of_week(current_date,2)) 
ELSE _add_days(current_date, (-1 * _day_of_week(current_date,2)) - 7) 
END 

: 당신이 그에 따라 FROMDATE 식을 월요일 테스트하고 변경할 수 있습니다이 문제를 얻으려면 날짜.

+0

답변 해 주셔서 감사합니다. 그러나 우리는 이것을 Value Prompt에만 사용할 수 있다고 생각합니다. 두 개의 데이터 항목으로 쿼리를 만들고 논리를 사용했습니다. 이 작품. 그러나 우리는 이것을 Date Prompts에 사용할 수 있습니다. 이 날짜 프롬프트를 사용할 수 있으면 기본 월요일 및 일요일을 볼 수 있으며 원하는 경우 다른 날짜를 선택할 수도 있습니다. 하지만 지금은 그렇게 일어나지 않습니다. 값 프롬프트에서 다른 날짜를 선택할 수 없습니다 .Pl advice –

+0

날짜 프롬프트를 동적으로 설정하는 유일한 방법은 JavaScript를 사용하는 것입니다. 10.2부터 Cognos는 지원되는 JavaScript API를 제공하여 기본값을 설정하는 데 사용할 수 있습니다. 다음 URL을 문서화합니다. http://www-01.ibm.com/support/knowledgecenter/SSEP7J_10.2.0/com.ibm.swg.ba.cognos.ug_cr_rptstd.10.2.0.doc/c_prmpt_api_overview.html. 시간을 좀주세요. 코드를 포함하는 또 다른 대답을 추가하겠습니다. – Johnsonium

0

날짜 프롬프트에 대해 프롬프트 기본값을 동적으로 설정하는 유일한 방법은 JavaScript를 사용하는 것입니다. 고맙게도 Cognos는 버전 10.2.1 이상에서 완벽하게 지원되는 JavaScript 프롬프트 API를 제공했습니다.

프롬프트 개체를 Cognos JavaScript API를 통해 참조하려면 프롬프트에 고유 한 이름을 지정해야합니다. 다음 코드에서는 "FromDate"프롬프트의 이름이 "FromDate"이고 "ToDate"프롬프트의 이름이 "ToDate"라고 가정했습니다.

새 HTML 개체에 다음 코드를 삽입하십시오. 프롬프트 개체 뒤에 HTML 개체가 나타나는지 확인하십시오.

<script> 
var report = cognos.Report.getReport('_THIS_'); 
var FromDate = report.prompt.getControlByName('FromDate'); 
var ToDate = report.prompt.getControlByName('ToDate'); 

var today = new Date(); 
var fromdate = new Date(); 
var todate = new Date(); 

fromdate.setDate(today.getDate() - (today.getDay() + 6)); 
todate.setDate(today.getDate() - today.getDay()); 

var fromdatestring = fromdate.getFullYear() + '-' + ("0" + (fromdate.getMonth() + 1)).slice(-2) + '-' + ("0" + fromdate.getDate()).slice(-2); 
var todatestring = todate.getFullYear() + '-' + ("0" + (todate.getMonth() + 1)).slice(-2) + '-' + ("0" + todate.getDate()).slice(-2); 

FromDate.addValues([{'use':fromdatestring}]); 
ToDate.addValues([{'use':todatestring}]); 
</script> 
+0

대단히 감사합니다. 이것은 나의 요구 사항을 충족시킨다. 지금 (20/03/2015)이 보고서를 실행하면 FromDate를 (01/26/2015)로, ToDate를 (02/01/2015)으로 볼 수 있습니다. 다음주에이 보고서를 실행하면 전 날짜로 생각합니다. 2011 년 2 월 10 일에 FromDate가 2012 년 2 월 2 일이어야하고 ToDate가 2015 년 2 월 8 일이어야한다고 가정합니다. 내가 틀렸다면 나를 바로 잡아주세요. 감사합니다 –

+0

그것은 자동으로 조정해야합니다. 보고서를 일요일에 실행하면 최신 월요일을 시작일로 선택하고 현재 날짜를 종료일로 선택합니다. 예를 들어, 2015-02-08에 실행하면 2015-02-02가 "시작 날짜"로, 2015-02-08이 "종료 날짜"로 반환됩니다. 이것은 당신이 원하는 것일 수도 아닐 수도 있습니다. 이 경우 다른 주에 돌아가려면 일요일에 실행될 때 각 날짜에 대해 추가로 7 일을 빼기 위해 수식을 수정하는 로직을 사용해야합니다. – Johnsonium

+0

그것은 자동으로 주 월요일과 일요일 right.I에 다음 주 (02/09 ~ 02/15)에 다음주 보고서를 열면, 내가 기본적으로 FromDate로 볼 수 있기를 바랍니다./2015) 및 ToDate (20/02/2015). 나는 그날부터 단지 지난주의를 원한다. –

관련 문제