User Tools

Site Tools


kona_expression_language

TOGA 표현식

그리드/크로스탭에서 NumberFormat 적용

  • 그리드나 크로스탭 데이터의 Expression 속성에서 값에 대한 Number Format을 지정할 수 있다.

지정방법

  • 값은 “*” 표시를 사용하여, 적절한 포맷을 지정한다. 아래 샘플 참조.
$number.format("***,**0.00%",$value)
$number.format("***,***",$value)
$number.format("***,***.*%",$value)
  • 추가
$number.format(formatString, value, roundingMode)
// value 값의 반올림
$number.format("***,***",$value,0)

roundingMode 참고사항

public static final int ROUND_CEILING 2
public static final int ROUND_DOWN 1
public static final int ROUND_FLOOR 3
public static final int ROUND_HALF_DOWN 5
public static final int ROUND_HALF_EVEN 6
public static final int ROUND_HALF_UP 4
public static final int ROUND_UNNECESSARY 7
public static final int ROUND_UP 0 ---> 반올림

그리드/크로스탭에서 사용할 수 있는 표현식

표현식 설명 예제
$path현재 셀의 위치. 즉, 어느 컬럼헤더,어느 로헤더에 해당하는지에 대한 정보를 가지고 있다.
$label현재 셀의 라벨 값
$colIndex현재 열의 번호
$rowIndex현재 행의 번호
$dataRow현재 데이터 행의 배열 형식$dataRow.get(“universe_item_col_name”)
$value현재 셀의 값
$colHeaders열 헤더 배열크로스탭그리드에서만 참조 가능
$rowHeaders행 헤더 배열

차트 KPI에서 사용할 수 있는 표현식

표현식 설명 예제
$seriesName멀티시리즈 차트의 경우 데이터셋이나 싱글데이터 속성 그룹에서 해당 데이터(셋)이 속해있는 시리즈명을 참조할 수 있다.
$dataRow현재 유니버스 데이터 행의 배열 형식. 싱글데이터 속성그룹 레벨에서 사용할 수 있다.$dataRow.get(“universe_item_col_name”)
$label현재 차트의 X축 값. 싱글데이터 속성그룹 레벨에서 사용가능.
$value현재 차트의 데이터 값. 싱글데이터 속성그룹 레벨에서 사용가능.

공백처리

  • 표현식 스크립팅 유의사항
  • 표현식 처리시 유의해야할 사항으로 아래 내용을 참조한다.
  • 공백문자열(스페이스)이나 개행문자열을 쓰지 않는다.
  • 예) KPI연결에서 파라미터 처리시
- 잘못된 예1) sc02 앞에 공백문자열이 포함됨.
sc01=$dataRow.get("col1"), sc02=$dataRow.get("col2")

- 잘못된 예2) 개행문자열(줄바꿈)이 포함됨.
sc01=$dataRow.get("col1"), 
sc02=$dataRow.get("col2")

- 잘된 예2) 개행문자열이 포함됨.
sc01=$dataRow.get("col1"),sc02=$dataRow.get("col2")

DateTool 사용

  • 다음 예제는 현재날짜에서 전일 날짜를 구해 “yyyy-MM-dd” 포맷의 날짜로 만드는 예이다.
#set($cal = $date.toCalendar($date))$cal.add(5,-1)$date.format("yyyy-MM-dd", $cal)
- $date는 현재 날짜이고, toCalendar()를 통해 Calendar Object로 변환한다.
- Calendar Object인 $cal의 add() 연산자를 통해 날짜를 계산한다.
- $date의 format() 연산자를 통해 날짜 포맷을 맞추어 return한다.
  • 다음 예제는 현재날짜에서 yyyy-MM 형식의 년월을 입력받아 말일을 구하는 예이다.
#set($val = $date.toDate("yyyy-MM","$parameters.YYYYMM"))
#set($cal = $date.toCalendar($val))
$cal.add(2,1)
$cal.add(5,-1)

- yyyy-MM 형식의 파라미터를 date 형식으로 변환하여 $val에 저장한다.
- date형식을 calendar 형식으로 변환하여 $cal에 저장한다.
- 월을 하나 증가
- 일을 하나 뺌. $parameters.YYYYMM 파라미터가 2008-11이라면 결과는 2008-11-30이 나온다.
  • 다음 예제는 현재날짜의 분기에서 전분기를 구하는 예이다.
#set($cal = $date.toCalendar($date))
$cal.add(2,-3)
#set($month=$date.format("M", $cal))
$math.ceil($math.div($number.toNumber($month),3))

- 현재 날짜를 calendar 형식으로 변환하여 $cal에 저장한다.
- 3개월 전을 계산한다.
- 계산된 날짜에서 월만 $month에 저장한다.
- 분기를 계산한다. 현재 날짜가 2009-01-16일 경우 결과는 4가 출력된다.
  • 다음 예제는 현재날짜의 분기에서 전분기를 년분기로 구하는 예이다.

#set($cal = $date.toCalendar($date))

$cal.add(2,-3)
#set($month=$date.format("M", $cal))
#set($year=$date.format("yyyy", $cal))
#set($quarter=$math.ceil($math.div($number.toNumber($month),3)))
$year$quarter

- 현재 날짜를 calendar 형식으로 변환하여 $cal에 저장한다.
- 3개월 전을 계산한다.
- 계산된 날짜에서 월만 $month에 저장한다.
- 계산된 날짜에서 년도를 $year에 저장한다.
- 분기를 계산한다.
- 결과를 합한다. 현재 날짜가 2009-01-16일 경우 결과는 20084가 출력된다.
  • Calendar Object의 연산종류는 다음과 같다.
종류 문법 예제
년도$calendar.add(1,증감값)$calendar.add(1,1) → 1년후, $calendar.add(1,-1) → 1년전
$calendar.add(2,증감값)$calendar.add(2,1) → 1달후, $calendar.add(2,-1) → 1달전
$calendar.add(5,증감값)$calendar.add(5,1) → 1일후, $calendar.add(5,-1) → 1일전

mathTool 사용

종류 문법 예제
더하기$math.add(숫자1,숫자2)$math.add(10,2) → 10+2
빼기$math.sub(숫자1,숫자2)$math.sub(10,2) → 10-2
곱하기$math.mul(숫자1,숫자2)$math.mul(10,2) → 10*2
나누기$math.div(숫자1,숫자2)$math.div(10,2) → 10/2

부분 문자열 참조

  • 문자열 값중에 일부분만 참조할 경우 사용할 수 있다. 그리드에서 $value의 부분의 첫번째 문자값을 참조하여 폰트 색상을 바꾸는 예이다. 그리드 데이터 속성 그룹에서 color 속성에 다음 방법으로 표현식을 적용할 수 있다.
#set($val=$value)
#if($value.charAt(0)="1") red #else blue #end

유니버스와 관련된 함수들 (데이터 조회, 최대/최소값 구하기 등)

  • 표현방법 : $universe.[함수 이름]([파라메터]) 형식이다. 자세한 내용은 아래표를 참조.
함수 파라미터 예제
getData[Universe_ID]$universe.getData(“TTTTT”) → TTTTT라는 유니버스의 데이터 값을 맵의 리스트 형식으로 반환.
getData[Universe_ID],[Parameter]$universe.getData(“TTTTT”, {“FLAG”:“Y”}) → TTTTT라는 유니버스에 FLAG=Y라는 검색조건을 적용해 조회한 데이터 값을 맵의 리스트 형식으로 반환.
insertData[Universe_ID],[dataRow],[Parameter]$universe.insertData(“TTTTT”, $dataRow, {parameters}) → TTTTT라는 유니버스의 Insert 실행. parameters처리는 getData와 동일.
updateData[Universe_ID],[dataRow],[Parameter]$universe.updateData(“TTTTT”, $dataRow, {parameters}) → TTTTT라는 유니버스의 update 실행. parameters처리는 getData와 동일.
deleteData[Universe_ID],[dataRow],[Parameter]$universe.deleteData(“TTTTT”, $dataRow, {parameters}) → TTTTT라는 유니버스의 delete 실행. parameters처리는 getData와 동일.
getMax[Universe_ID],[Universe_Item_ID],[Add_Value]$universe.getMax(“TTTTT”,“A”,10) → TTTTT라는 유니버스를 실행해서 A컬럼 데이터 중 Max값을 구해 10을 더함. Add_Value는 필요한 경우에만 적용.
getMax[Universe_ID],[Universe_Item_ID],[Parameter]위와 동일하나 현재 KPI의 검색조건과 다른 값을 전달해야할 때 사용. 예) $universe.getMax(“TTTTT”,“A”,{“YYYY”:“2008”, “MM”:“12”}) → 2008년 12월을 검색조건으로 전달(YYYY와 MM을 키로 하는 맵형식).
getMax[Universe_ID],[Universe_Item_ID],[Add_Value],[Parameter]Add_Value가 포함된 동일한 함수.
getMin[Universe_ID],[Universe_Item_ID],[Add_Value]$universe.getMax(“TTTTT”,“A”,-10) → TTTTT라는 유니버스를 실행해서 A컬럼 데이터 중 Min값을 구해 10을 뺌. Add_Value는 필요한 경우에만 적용.
getMin[Universe_ID],[Universe_Item_ID],[Parameter]위와 동일하나 현재 KPI의 검색조건과 다른 값을 전달해야할 때 사용. 예) $universe.getMin(“TTTTT”,“A”,{“YYYY”:“2008”, “MM”:“12”})
getMin[Universe_ID],[Universe_Item_ID],[Add_Value],[Parameter]Add_Value가 포함된 동일한 함수.
getCount[Universe_ID],[Universe_Item_ID]개수를 구함
getAvg[Universe_ID],[Universe_Item_ID]평균을 구함

리스트 형식을 문자열로 변환하기($list.expand, #expand, #expand_list)

  • $list.expand($value, $prefix, $suffix, $delimeter) : #expand_list(리스트값 [필수], 접두어 [선택], 접미어 [선택], 구분자 [선택 : 기본값은 쉼표]).
  • #expand_list($value, $prefix, $suffix, $delimeter) : $list.expand의 매크로 버전.
  • #expand($value, $quot) : #expand_list의 특화된 형태. $quot가 true이면 값의 앞뒤에 작은 따옴표를 추가.
  • 유니버스에서 where 조건에 사용하기
#if($parameters.get('YYYY'))
  where Q0102.YEAR in ( #expand($parameters.get('YYYY'), true) )
#else
  where Q0102.YEAR = ''
#end

$list.expand([2000,2001,2002], "'", "'")
- 결과값 : '2000','2001','2002'

$list.expand([2000,2001,2002], "s1=")
- 결과값 : s1=2000,s1=2001,s1=2002

$list.expand([2000,2001,2002], "s1='", "'")
- 결과값 : s1='2000',s1='2001',s1='2002'

$list.expand([2000,2001,2002], "s1='", "'". ";")
- 결과값 : s1='2000';s1='2001';s1='2002'
  • (#expand_list도 동일)
#expand([2000,2001,2002], true) 
- 결과값 : '2000','2001','2002'

#expand([2000,2001,2002], false) 
- 결과값 : 2000,2001,2002
  • 참고 매크로 : /kona-engine/src/com/eyeq/kona/report/template/template-macros.vm
  • KPI 사용자 속성에서 $globalParameters로 가져오기
- 코드: 
#expand($globalParameters.s1, false)

- 라벨: 
#expand($globalParameters.s1_label, false)
  • 참고 매크로 : /kona-engine/src/com/eyeq/kona/report/template/template-macros.vm
  • 예제 : showReport()와 같이 스크립트에서 검색조건 중 리스트 형식을 파라메타로 넘길 경우 사용 방법
s1이 리스트 형식의 검색조건일 경우
showReport('TESTReport','$list.expand($globalParameters.s1_label, "s1_label='", "'"),$list.expand($globalParameters.s1, "s1='", "'")',null)

검색조건(초이스,라이오,체크박스)의 옵션 참조 (parameterItems, parameterItemMap)

  • parameterItems는 java.util.List<Object> 형식이며 List의 모든 메소드 사용가능.
  • 예)
$parameterItems.get(0) $parameterItems.get($parameterItems.size() - 1)
  • parameterItemMap은 모든 검색조건의 parameterItems의 맵이며 키는 각 검색조건의 키
  • 예)
$parameterItemMap.get('year')
  • parameterItems, parameterItemMap은 레포트 검색조건 기본값의 표현식에서 사용 가능.

리스트 유틸($list)의 메소드들

  • 최대값 가져오기
$list.getMax($parameterItems)
  • 최소값 가져오기
$list.getMin($parameterItems)
  • 처음값 가져오기
$list.getFirst($parameterItems)
  • 마지막값 가져오기
$list.getLast($parameterItems)
  • 데이터 행 리스트 중 특정 컬럼 값이 특정 값과 일치하는 행만 필터링
## 유니버스 데이터 중 FLAG 컬럼이 "Y"인 행만 고르기
$list.filter($data.get("1"), "FLAG", "Y")
  • 데이터 행 리스트 중 특정 컬럼 값이 특정 값과 일치하는 행의 특정 컬럼값만 리스트로 반환
## 유니버스 데이터 중  FLAG 아이템 값이 "Y"인 행의 ITEM_CODE 값만 리스트로 반환
$list.filterAsList($data.get("1"), "ITEM_1", "FLAG", "Y")

유니버스 유틸($universe)의 리스트 유틸과 대응되는 메소드들

  • 최대값 가져오기
## 키가 UNIVERSE_01인 유니버스의 아이템 ITEM_1 값 중 최대값 반환
$universe.getMax("UNIVERSE_01", "ITEM_1")
  • 최소값 가져오기
## 키가 UNIVERSE_01인 유니버스의 아이템 ITEM_1 값 중 최소값 반환
$universe.getMin("UNIVERSE_01", "ITEM_1")
  • 처음값 가져오기
## 키가 UNIVERSE_01인 유니버스의 첫번 째 데이터 행 중 아이템 ITEM_1 값을 반환
$universe.getFirst("UNIVERSE_01", "ITEM_1")
  • 마지막값 가져오기
## 키가 UNIVERSE_01인 유니버스의 마지막 데이터 행 중 아이템 ITEM_1 값을 반환
$universe.getLast("UNIVERSE_01", "ITEM_1")
  • 데이터 행 리스트 중 특정 컬럼 값이 특정 값과 일치하는 행만 필터링
## 키가 UNIVERSE_01인 유니버스의 데이터 행 중 FLAG 아이템 값이 "Y"인 행만 리스트로 반환
$universe.filter("UNIVERSE_01", "ITEM_1", "FLAG", "Y")
  • 데이터 행 리스트 중 특정 컬럼 값이 특정 값과 일치하는 행의 특정 컬럼값만 리스트로 반환
## 키가 UNIVERSE_01인 유니버스 데이터 중  FLAG 아이템 값이 "Y"인 행의 ITEM_CODE 값만 리스트로 반환
$universe.filterAsList("UNIVERSE_01", "ITEM_1", "FLAG", "Y")
  • 데이터 행 리스트 중 특정 컬럼 값이 일치하는 행만 리스트로 반환
## 키가 UNIVERSE_01인 유니버스의 데이터 행 중 아이템이 ITEM_1인 컬럼만 모아 리스트로 반환
$universe.asList("UNIVERSE_01", "ITEM_1")

레포트 ID,CODE,NAME 참조하기

##레포트 ID : 
$report.id   ## (결과 : L0322)

##레포트 사용자 입력 ID : 
$report.code ## (결과 : eBizPower_R_FA_010101)

##레포트 제목 : 
$report.name ## (결과 : 재무정보)

포탈 ID,CODE,NAME 참조하기

## 포탈 ID (이름)
$portal.id : ## (결과 : TOGA)

## 포탈 사이트제목
$portal.name : ## (결과 : TOGA1)

## 별칭
$portal.code : ## (결과 : P0001)

nl2br 표현식

$escape.nl2br(content)

트리 검색조건에서 넘겨진 파라미터 값 처리방법

  • 위 트리검색조건 상황 설명
    • 레벨이 3레벨까지 구성됨
    • 트리 검색조건의 속성 중 selectPath(전달값에 노드값 추가여부)가 체크되어있음(선택레벨을 구하기 위한 현행 필수조건)
    • allowMultipleItem(리스트 다중선택여부) 속성 선택해제 상태.-단일선택만 가능함
  • 위 이미지에서 1 을 선택했을 때 넘겨지는 파라미터 값 :
    • 리스트 타입 [전사총계]
  • 2를 선택했을 때 넘겨지는 값 :
    • [전사총계,임원감사부문]
  • 3를 선택했을 때 넘겨지는 값 :
    • [전사총계,임원감사부문,감사그룹 계]
  • 쿼리에서 넘어온 값 처리방법
// 트리검색조건 파라미터 변수처리
#set($TREE = $parameters.TREE)

// 몇레벨이 선택되었는지 파악
#set($LEVEL = $string.split($TREE.get(0)).size())

// 넘겨진 파라미터를 콤마를 구분자로 하여 리스트 타입으로 변경하는 표현식
$string.split()

// 레벨을 파악할 수 있다.
$string.split($TREE.get(0)).size()
//   ex) [전사총계] => 1
//       [전사총계,임원감사부문] => 2
//       .....

// 검색조건 속성 중 allowMultipleItem(리스트 다중선택여부)에 선택해제 하였기 때문에 항상 0번째 row 만 존재하는 상황.
$TREE.get(0) 
SELECT
*
FROM
    TABLE_NAME
WHERE 1=1
#if($LEVEL==1)
		AND  NAME01 in ( #expand($LVL, true) )
#elseif($LEVEL==2)
		AND  NAME01||','||NAME02 in ( #expand($LVL, true) )
#elseif($LEVEL==3)
		AND  NAME01||','||NAME02||','||NAME03 in ( #expand($LVL, true) )
#end
  • 레벨에 따라 #if #else 표현식을 이용하여 비교대상을 분기 처리한다.

SQL 저장 유니버스 구현시 참조 가능한 표현식

  • $processType : 어떤 액션에 의해서 호출된 것인지 구분하는 인자값
    • KPI : KPI액션에 의해서 저장이 호출됨
    • KPIUpload : KPI엑셀업로드 액션에 의해서 저장이 호출됨
    • null : 기타 코드에 의해서 저장이 호출됨. 예) $universe.insertData()에서 호출된 경우…
  • $rowIndex : 저장되는 데이터 셋의 행 인덱스를 참조할 수 있는 인자값
  • $rowCount : 저장되는 데이터 셋의 총 행 갯수

엑셀 업로드 시 최초 저장 직전 임의의 유니버스 저장 실행

  • SQL 작성 시 맨 앞에서 아래와 같이 처리 가능
#if("$processType" =="KPIUpload" && $rowIndex==0)
$universe.insertData("UNIVERSE_KEY")
#end

엑셀 업로드 마지막 저장 후 임의의 유니버스 저장 실행

  • 실행 후 처리 편집창에서 아래와 같이 처리 가능
#if("$processType" =="KPIUpload" && $rowIndex==$math.add($rowCount,-1))
$universe.insertData("UNIVERSE_KEY")
#end

매크로를 이용한 표현식 확장

  • 재사용이 필요한 기능을 매크로로 정의하여 TOGA내의 표현식에서 자유롭게 호출하여 사용 가능
  • 매크로 파일의 위치 : ~/.kona/velocity/macros/*.vm
  • 매크로 작성 방법
  • 예) ~/.kona/velocity/macros/kpi-functions.vm 파일에 아래 매크로 정의를 추가
#macro(h1 $text)
<h1>$text</h1>
#end
  • 이렇게 정의하면, 표현식에서 #h1(“test!”)라고 호출했을 때 <h1>test!</h1>로 해석 됩니다.

그리드에서 엑셀 내보내기/그리드 렌더링을 구분하여 표현식 달리 적용

  • $contentType
  • 표현식의 결과값 : 그리드 렌더링시에는 text/xml 엑셀 내보내기시에는 application/vnd.ms-excel
#if($contentType.contains("excel")) #else #end 로 구분하여 사용하면 됨

다중속성값을 표현식으로 입력할 때 주의 사항

  • 다중속성값 입력시 사용하는 구분자는 세미콜론(;)과 콜론(:)을 사용할 수 있다.
  • 세미콜론은 속성 반복 시 전체 값을 반복하고, 콜론은 속성 반복 시 맨 마지막 값을 반복하여 적용된다.
  • 구분자는 맨 마지막에 넣지 않는다.
  • 구분자와 표현식을 사용할 때는 표현식의 리턴 값으로 구분자를 포함하지 말아야 한다.
  • 아래와 같이 한번에 구분자를 포함한 다중 속성 값을 리턴하지 말고, 속성 값 마다 표현식을 사용하고, 구분자를 사용해야 한다.
   문제 발생 - #if($seriesName.contains("실적"))#ff0000;#00ff00#elseif($seriesName.contains("재공"))#0000ff;#00ff00#end
   문제 해결 - #if($seriesName.contains("실적"))#ff0000#elseif($seriesName.contains("재공"))#0000ff#end;#if($seriesName.contains("실적"))#00ff00elseif($seriesName.contains("재공"))#00ff00#end
  • 표현식의 리턴 값에 구분자가 아닌 데이터로 세미콜론(;)이나 콜론(:)이 포함되어야 하는 경우 역슬래시를 붙여서 사용할 수 있다. ( \; → ; )
   표현식에서 리턴할 때 : ab\;cd
   최종 문자열 : ab;cd
   

서버측 정렬 옵션(enableServerSorting) 사용시 구분값

  • $order ⇒ [클릭한 컬럼명 ASC or DESC]
  • 유니버스 “정렬쿼리사용”체크 필수
   서버정렬적용 예시
   select * from temp
   #if($order)
	order by #expand($order,false)
   #end
kona_expression_language.txt · Last modified: 2017/09/21 15:33 by khjang