2016년 12월 14일 수요일

Cognos 렌더링(Rendering) 변수 사용하기


1. 프롬프트를 생성하고 렌더링 변수를 적용할 데이터를 세팅해준다. 여기에서는 정적 선택항목을 이용하여 만들어줬다. 1일때  A 목록을 보여줬다가 2일때는 B 목록을 보여주는 식





 
 
 
 
 
2. 조건탐색기로 이동하여 부울변수를 추가해준다. 변수 부분에다가 끌어다 놓으면 만들어진다.

 
 
 
 
 
3. 다음과 같이 표현식 정의를 작성한다. 1번에서 만든 프롬프트 값을 가져오는 거다.
 
 
 
 
 
 
4. 값이 표시되는 곳 밑에 작은 생성 아이콘을 클릭하여 값을 추가해준다.
 
 
 
 
5. 마지막으로 A 목록이 포함된 블록을 선택하고 렌더링 변수에 방금 만든 변수를 선택한다. 1번이거나 3번일 때 나오도록 한다. 반대로 B 목록이 포함된 블록을 선택하고 마찬가지로 2번이나 3번일 때 나오도록 한다.
이렇게 하면 사용자가 선택한 값에 따라 A목록이 보였다 B 목록이 보였다 둘다 보였다 한다.
 
 
 
 
 

2016년 12월 13일 화요일

Cognos 동적 컬럼

1. 동적 컬럼을 추가하기 위한 프롬프트를 만들고 정적선택항목으로 만들던 쿼리로 만들던 보여줄 값을 지정해준다.

 
 
 
 
2. 동적으로 넣고 뺄 컬럼에 해당하는 쿼리 데이터 항목에 다음과 같이 표현식을 정의해준다.
대충 방금 생성한 파라미터 값에 따라 보여주던지 아닌지 하는 내용이다.
 
 
 
 
결과)
 
 
 

Cognos 계단식 프롬프트 만들기

예를들어 영업조직을 선택하면 선택한 조직의 상세지역을 하위 프롬프트에서 보여준다고 가정했을 때
 
1. 먼저 최상위 프롬프트를 생성하고 각자 원하는대로 쿼리, 값사용, 값표시, 매개변수를 세팅해준다.
 
 
 
 
 
2. 나머지 프롬프트도 원하는대로 만들어준다. 그 후 연결시킬때는 계단식 배열 소스에 상위 프롬프트의 파라미터명을 넣으면 된다. 그런식으로 계속 이어주면 3개고 4개고 만들 수 있다.
 
 
 
 
 
3. 필터링이 필요한 중간단계 프롬프트의 쿼리로 이동해서 필터조건을 추가해준다.
 
 
 
 
 
 

Cognos 날짜 프롬프트 Default 값 넣기

 
페이지 탐색기를 선택하고 프롬프트 페이지를 선택한다.
 
 
 
HTML 항목을 프롬프트 페이지에 끌어다 놓는다. 이 때 날짜 프롬프트 보다 아래쪽에 위치하도록 한다.
 
 
 
 
HTML 항목을 더블클릭 하여 다음과 같이 작성한다.
대충보면 자바함수를 이용해 오늘 날짜를 가져오고 YYYY-MM-DD 포맷으로 바꿔준 후 HP_YMD1 이라는 날짜 프롬프트에 값을 세팅해주는 내용이다.
(날짜 프롬프트의 값은 디폴트로 YYYY-MM-DD 형식으로 넣어줘야 제대로 나옴)
 
 
 
 
 
 
결과)
 
 

 

Cognos Report Studio 드릴스루 생성

 
드릴스루를 적용할 때는 파라미터를 넘겨줄 메인 보고서와 파라미터를 받을 서브 보고서가 필요하다.
 
 
 
Report Studio 에서 목록 또는 크로스탭을 생성한 후 드릴스루를 생성할 셀을 선택하고 마우스 우클릭 -> 드릴 스루 정의를 선택한다.
드릴 스루 정의 메뉴가 없을 시에는 상단 아이콘에서 잠금 아이콘을 해제하고 진행한다.
 
 
 
 
 
 
새 드릴 스루 정의를 클릭하여 드릴스루를 생성한 후 연결 할 대상 보고서를 선택하고 매개변수 편집을 클릭하여 매개변수를 정의해준다.
 
 
 
 
 
 
대상 보고서를 선택하면 그에 필요한 파라미터는 자동으로 보여진다.
필수 선택 파라미터를 지정해 주지 않으면 링크 선택 시 파라미터 페이지가 열리기 때문에 선택해 주어야 한다.
 
* 파라미터를 선택하는 방법
1) 값 사용안함 : 아무값도 넘겨주지 않음
2) 데이터 항목 값 전달 : 목록 또는 크로스탭에서 사용한 쿼리 데이터 항목을 넘겨줌
3) 매개변수 값 전달 : 현재 보고서에서 사용하고 있는 매개변수를 넘겨줌
 
 
 
 
 
다음과 같이 상수를 넘겨주고 싶을 때에는 쿼리에 데이터 항목을 추가하여 사용할 수 있다.
 
 
 
 
 
세번째 이미지의 프롬프트 페이지 표시를 선택한 후 확인을 누르고 보고서를 실행하면 다음과 같이 펙트셀에 링크가 생기고 클릭 시 상세 페이지로 이동된다.
펙트셀과 요약셀을 별도로 드릴스루를 생성해 줘야 하고 목록 열 부분에도 드릴 스루를 생성할 수 있다.
 
 
대상 보고서에서의 SQL 에서 조건에 넘겨받은 파라미터를 추가하여 필터조건을 넣는 방법도 있다.
 

Cognos Javascript


1. Cognos 프롬프트에서의 자바스크립트



자바스크립트는 프롬프트에서 다음과 같은 상황에서 사용된다.

1. 프롬프트 페이지를 보여주기 전에 프롬프트를 수정하고 싶을 때
2. 유효성 체크가 필요할 때
3. 사용자가 완료 버튼을 누른 후의 프롬프트 처리가 필요할 때

자바 스크립트는 프롬프트 페이지에 있는 한개 이상의 HTML 항목에 작성해야 한다. HTML 항목은 프롬프트가 위치한 후에 작성되어야 한다. 그리고 자바 스크립트는  <script> </script> 태그 사이에 작성되어야 한다. 또한 HTML 항목에는 버튼이나 다른 HTML 소스의 정의가 포함된다.

2.  프롬프트 가져오기


 
프롬프트를 가져오기 위해서는 먼저 전체 폼 객체를 가져와야 한다.

var form = getFormWarpRequest(); 

2.1 표준 프롬프트



표준 프롬프트 객체는 다음의 Naming 규칙을 따르는 formWarpRequest 객체의 속성으로 가져올 수 있다.

 
Text Edit Box       _textEditBox<prompt name>
List Box             _oLstChoices<prompt name>
Drop Down List       _oLstChoices<prompt name>
Radio Button Group   _oLstChoices<prompt name>
Check Box Group      _oLstChoices<prompt name>
Date Edit Box         txtDate<prompt name>


ex) ListBox 프롬프트를 가져오기 위한 코드

var form = getFormWarpRequest();
var listB  = form._oLstChoicesXYZ;

2.2  그 밖의 프롬프트



모든 그밖의 프롬프트 객체는 프롬프트에 이름을 지정한 <span> 태그를 감싸고 getElementById() 함수나 getElementsByTagName() 함수를 사용해서 span 태그에 접근함으로써 가져올 수 있다.

 

3. 프롬프트의 공통 동작


3.1 프롬프트 페이지 표시 전에 프롬프트 수정


 
프롬프트를 수정하기 위해서 HTML 항목을 만든 후 프롬프트를 가져오고 그 프롬프트의 값을 지정하는 스크립트를 작성한다..
XYZ라는 이름의 프롬프트에 대한 예제이다.

3.1.1 Text Box 에 값 지정하기


 
Text Box 프롬프트를 만들고 HTML 항목에 다음과 같은 스크립트를 작성한다.

var form = getFormWarpRequest();
var textB  = form._textEditBoxXYZ;
textB.value="First value";

canSubmitPrompt();

 

3.1.2 Multi Select List Box 에서 항목 선택하기


 
값 프롬프트를 생성한 후 Multi-Select 속성을 예로 변경한다. 이 예제는 리스트에서 3번째 값을 선택하는 예제이다.

 
var form = getFormWarpRequest();
var listB  = form._oLstChoicesXYZ;      
listB.options[2].selected=true;
canSubmitPrompt();

 

3.1.3 Drop Down List Box 에서 위에 두줄 지우기


 
값 프롬프트를 생성하면 Select UI 속성이 기본적으로 DropDownList 로 지정된다. 첫번째 행은 파라미터명, 두번째행은 대쉬(-)이고 실질적인 데이터는 세번째 행부터 시작된다. 그래서 어떤 사용자는 위에 두 행을 지우길 원한다.

var form = getFormWarpRequest();
var dropDownL  = form._oLstChoicesXYZ;

dropDownL.remove(1);
dropDownL.remove(0);

dropDownL.removeAttribute("hasLabel");  // Cognos 8.3/8.4 에서만 필요

canSubmitPrompt();

 

3.1.4 Finish 버튼 사용



Finish 버튼은 프롬프트가 있는 페이지에서 사용자가 모든 필수 프롬프트의 값을 선택 했을 때만 사용할 수 있다.

여기에는 스크립트로 프롬프트의 초기값이 지정하는 것에 대한 예제이다. 모든 프롬프트 값을 선택하고 난 후 canSubmitPrompt() 함수를 사용해서 Finish 버튼을 누른 기능을 사용할 수 있다.

 

ex) 2개 프롬프트가 있는 프롬프트 페이지 예제

 
ABC라는 이름의 Text Box 프롬프트가 "Hello" 라는 문자열로 초기화 되어야 할 때 DEF 라는 이름의 List Box 프롬프트의 첫번째 항목이 선택된 후 Finish 버튼이 선택되어야 할 때

var form = getFormWarpRequest();
var textB  = form._textEditBoxABC;
textB.value = "Hello";

var listB  = form._oLstChoicesDEF;
listB.options[0].selected=true;

canSubmitPrompt();

 * canSubmitPrompt() 가 호출되기 전에 모든 필수 프롬프트가 선택되어야 한다. 그렇지 않으면 에러 메시지가 나온다.


3.2 사용자가 Finish 버튼을 클릭한 후의 실행 스크립트


 
기본적으로 Finish 버튼을 누르면 선택된 프롬프트를 가지고 보고서가 실행된다. 사용자가 Finish 버튼을 눌렀을 때 보고서가 실행되기 전 부가적인 동작을 실행하기 위해서는 다음과 같은 맞춤형 Finish 버튼으로 대체해야 한다.

1. 동작을 수행하기 위한 자바스크립트를 정의한다.
2. 위의 기능을 수행하기 위한 새로운 버튼을 정의한다.
3. 기존의 완료 버튼을 지운다.

 
) 프롬프트 페이지에는 Text Box, List 프롬프트가 있다. 완료를 눌렀을 때 Text Box 프롬프트는 List Box 프롬프트에서 선택된 값으로 채운다. 프롬프트 페이지에는 List프롬프트, Text Box 프롬프트, 다음의 코드를 포함하는 HTML 항목이 있어야 한다.

 
<input type="BUTTON" class="clsPromptButton" onClick="fillTextBox()" value="Finish">

 
HTML 항목에 완료 버튼의 동작을 수행하는 promptButtonFinish() 함수를 다음과 같이 작성한다.

예제)  

<script>

function fillTextBox() {

var form = getFormWarpRequest();
var list = form._oLstChoicesABC;
var textBox = form._textEditBoxXYZ;

for (i = 0; i < list.length; i++) {
        if (list.options[i].selected) {
                textBox.value = list.options[i].value;
                break;
        }
}

promptButtonFinish();

}

</script>


Cognos 파라미터 & 자바 스크립트

1) 전체 포함된 조건 넣기
   DECODE(#prompt('P_SCRBR_INC_YN')#, '100', '100',X2.SCRBR_INC_YN) =#prompt('P_SCRBR_INC_YN')#
  

2) 날짜 조건 넣기
   TO_CHAR(TO_DATE(#prompt('P_YMD')#,'YYYY-MM-DD'),'YYYYMMDD')
  

3) IN절 사용해서 조건 넣기
   #promptmany('P_SO','string',' ','and T1.COMPANY_ID in(','',')')#
  

4) 일반
   #prompt('P_Value')#
  

5) 필수 아닌 옵션으로 조건 추가
   T1.RSLT_HMS    =  #prompt('P_HMS','varchar','0000')# OR
   '0000'         =  #prompt('P_HMS','varchar','0000')#
   

6) 자바스크립트
  
<script>
var all_obj=document.all;
now = new Date();
year = now.getYear();
month = (now.getMonth()+1);
if(month<10)
 {month = '0'+month}
date = now.getDate()-1;
if(date<10)
 {date = '0'+date}
day = year + '-' + month + '-' + date;

pickerControlHP_YMD1.setValue( day );
</script>  


<script type="text/javascript">
var d = new Date();
document.write('현재 년: ' + d.getFullYear() + '<br />');
document.write('현재 월: ' + (d.getMonth() + 1) + '<br />');
document.write('현재 일: ' + d.getDate() + '<br />');

document.write('<br />'); // 줄바꿈
document.write('현재 시: ' + d.getHours() + '<br />');
document.write('현재 분: ' + d.getMinutes() + '<br />');
document.write('현재 초: ' + d.getSeconds() + '<br />');

document.write('<br />');
document.write('오늘 요일: ' + d.getDay() + '<br />'); // 일요일 = 0
</script>


// 어제 날짜 리턴
function getYesterDate() {
    var dtToday = new Date();
    var yesterday = new Date( dtToday - 86400000 ); // 86400000 = 24 hours * 60 (minutes per hour) * 60 (seconds per minute) * 1000 (milliseconds per second)
    var strYesterday = [yesterday.getUTCFullYear(), yesterday.getMonth()+1, yesterday.getDate()].join("-");

    return strYesterday;
}

Shell (쉘) 주요 명령어 모음

- 주석(#)
ex) ### 기존 Work 영역의 큐브를 삭제한다.
 



 
- 변수($)
ex) 지정할 때 : PRONO=`date '+%Y%m%d%H%M%S'`
      사용할 때 : PRONO=$PRONO$# 

※주의사항: '=' 좌우에 공백이 있어서는 안된다.



- 출력(echo)
ex) echo "[$PRONO `date '+%Y/%m/%d %H:%M:%S'`] Accept arguments : $*"
 



 
- 분기처리(if ~ fi)
ex) if [ "$CREATECUBE" = "Inite" ]
      then
          CREATECUBE="Y"
      elif [ "$CREATECUBE" = "Incre" ]
      then
          CREATECUBE="N"
      else
          echo "[$PRONO `date '+%Y/%m/%d %H:%M:%S'`] Cube Building Option Error #2 [ $2 ]"
          exit 1
      fi

     


- 삭제(rm)
ex) rm -rf $WORKDIR/$CUBEID*
      -d : 비어 있지 않은 디렉토리도 지움
      -f : 존재하지 않거나 이미 지워진 파일은 무시하고 다음으로 넘어감
      -i : 지우기 전에 파일을 지울 것인지 물어봄
      -r : 하위 디렉토리 까지 모두 지움
      -v : 무엇을 지웠는지 알려줌




- 복사(cp)
ex) cp -rf $BACKUPDIR/$CUBEID$VCD $WORKDIR/$CUBEID$VCD
      -I : 복사에 대한 실행여부 물음
      -f : 강제 복사
      -r : 하위 디렉토리와 파일 모두 복사
      -v : 복사 진행 상태 출력
      -a : 원본 파일의 속성, 링크 정보 유지 복사

     



- 이동(mv)
ex) mv $INCREMODELDIR/$CUBEID$MODEL $INCREMODELDIR/$CUBEID$MODEL$GUBUN$VER1

     

- 반복(while)
ex) while [ $days -ge 0 ]
         do
          del_date=$(/dw_app/cognos10/05_script/caljd.sh -y -s $(/dw_app/cognos10/05_script/caljd.sh -p $days))
          echo $CUBE_DIR/$del_date$FILE_EXT
          rm -rf $CUBE_DIR/$del_date$FILE_EXT
          if [ $? -ne 0 ]
               then
                   echo "[$PRONO `date '+%Y/%m/%d %H:%M:%S'`] Sub Cubee Delete Error [ rm -rf $CUBE_DIR/$del_month$FILE_EXT ]"
                   exit 1
            fi
          days=`expr $days - 1`
      done 




- 비교
※주의사항: [ 뒤와, ] 앞에는 반드시 공백이 있어야 한다.


[ $A -eq $B ] A와B의 값이 같은 경우
[ $A -ne $B ] A와B의 값이 다른 경우
[ $A -gt $B ] A가B보다 큰경우
[ $A -lt $B ] A가B보다 작은경우
[ $A -ge $B ] A가B보다 크거나 같은 경우
[ $A -le $B ] A가B보다 작거나 같은 경우

[ -s 파일명 ] 파일이 존재하면서 크기가 0보다 큰경우
[ -f 파일명 ] 디렉토리가 아닌 파일일경우 (크기 0인 경우 포함)
[ -d 디렉토리 ] 파일이 아닌 디렉토리인 경우
[ -w 파일명 ] 쓰기가 가능한 경우
[ -r 파일명 ] 읽기가 가능한 경우
[ ! -option 파일명 ] 옵션의 조건이 거짓이 되는 경우

[ "문자열1" = "문자열2" ] 두문자열이 같은 경우
[ "문자열1" != "문자열2" ] 두문자열이 다른 경우
[ -z "문자열" ] 문자열이 길이가 0인 경우
[ -n "문자열" ] 문자열이 길이가 0이 아닌 경우
    



 
- 문자열 패턴 검색(grep)
-c : 패턴이 일치하는 행의 수를 출력
-i : 비교시 대소문자를 구별 안함
-v : 지정한 패턴과 일치하지 않는 행만 출력
-n : 행의 번호를 함께 출력
-l : 패턴이 포함된 파일의 이름을 출력
-w : 패턴이 전체 단어와 일치하는 행만 출력