26 사용자정의 계산 함수 개발
Essbase 블록 저장영역 큐브에 사용할 수 있는 계산 함수를 강화하기 위해 Java를 사용하여 고유한 사용자정의 함수(CDF)를 개발할 수 있습니다. 함수를 작성한 후 Java 클래스를 설치한 다음 함수를 Essbase 서버에 전역적으로 등록하거나 애플리케이션에 로컬로 등록합니다.
Essbase 계산 스크립트에서 사용자정의 함수를 사용할 수 있습니다.
Essbase는 Java 클래스 및 아카이브를 생성하기 위한 툴을 제공하지 않습니다. 지원되는 버전의 JDK가 있어야 합니다.
사용자정의 함수의 예는 Java 코드 예를 참조하십시오.
사용자정의 함수는 블록 스토리지 큐브에만 사용할 수 있습니다(집계 스토리지 큐브와는 관련이 없음).
사용자정의 함수를 생성하려면 다음 워크플로우를 사용합니다.
-
사용자정의 함수에 대한 요구사항 검토: 사용자정의 함수의 유효성에 대한 요구사항
-
사용자정의 함수로 사용할 퍼블릭 정적 메소드가 하나 이상 포함된 퍼블릭 Java 클래스 작성: 사용자정의 함수에 대한 Java 클래스 생성 및 컴파일
-
Java 클래스 설치: Essbase 서버에 Java 클래스 설치
-
사용자정의 함수를 로컬 또는 전역 함수로 등록: 사용자정의 함수 등록
사용자정의 함수의 유효성에 대한 요구사항
Essbase 사용자정의 함수를 Java 클래스의 메소드로 설계합니다. 전역 함수의 경우 한 클래스에서 메소드를 작성합니다. 응용 프로그램 함수의 경우 응용 프로그램마다 별도의 클래스와 jar 파일을 사용하십시오. 함수를 전역적으로 등록하기 전에 한 응용 프로그램에 로컬로 테스트합니다. 지원되는 데이터 유형, 변수 및 이름 지정 규칙에 유의하십시오.
사용자 정의 함수로 사용하기 위해 클래스에 여러 메소드를 생성할 수 있습니다. 일반적으로 Oracle에서는 Essbase 서버의 모든 애플리케이션에서 사용할 메소드를 단일 클래스의 사용자정의 함수로 생성할 것을 권장합니다. 그러나 Essbase 서버의 선택적 애플리케이션에서 사용할 사용자정의 함수를 추가할 계획인 경우 이러한 사용자정의 함수를 별도의 클래스에 생성하고 Essbase 서버에 별도의 .jar 파일에 추가합니다.
커스텀 정의 함수로 사용할 메소드가 포함된 여러 Java 클래스를 생성할 때는 각 클래스 이름이 고유한지 확인하십시오. 클래스 이름이 중복되면 중복 클래스의 메소드가 인식되지 않으며 이러한 메소드를 사용자정의 함수로 등록할 수 없습니다.
Java의 테스트 프로그램을 사용하여 Java 클래스 및 메소드를 테스트합니다. 메소드의 출력에 만족하면 Essbase 서버에 설치하고 단일 테스트 애플리케이션에 등록합니다. 테스트를 위해 함수를 전역적으로 등록하지 마십시오. 이렇게 하면 문제가 발생할 경우 업데이트가 더 어려워집니다.
사용자정의 함수의 메소드는 다음과 같은 지원되는 데이터 유형을 입력 매개변수로 조합할 수 있습니다.
-
boolean
-
byte
-
char
-
com.hyperion.essbase.calculator.CalcBoolean
-
플로트, 더블
-
java.lang.String
-
짧음, 정수, 길음
-
이러한 유형의 배열
CalcBoolean은 TRUE, FALSE 및 #MISSING의 세 값을 포함할 수 있는 Essbase 특정 데이터 유형입니다. 나열된 다른 데이터 유형에 대한 자세한 내용은 JDK 설명서를 참조하십시오.
메소드 반환 데이터 유형은 무효화이거나 앞의 데이터 유형 중 하나일 수 있습니다. 반환된 데이터 유형은 Essbase 특정 데이터 유형으로 변환됩니다. 문자열은 문자열 유형에 매핑됩니다. 부울 값은 CalcBoolean 데이터 유형에 매핑됩니다. 다른 모든 값은 이중 유형으로 매핑됩니다.
주:
Essbase는 무한 또는 비숫자 값으로 반환된 이중 변수를 지원하지 않습니다. 이러한 값이 Java 프로그램에서 반환되면 Essbase에서 올바르게 기록되거나 표시되지 않을 수 있습니다. Essbase로 반환되기 전에 이중 변수에서 무한 값 또는 비숫자 값을 확인하고 유한 값으로 설정해야 합니다. JDK 설명서의 Double 클래스에 대한 항목을 참조하십시오.
사용자정의 함수를 생성, 삭제 및 관리하려면 Essbase에 다음 보안 권한이 필요합니다.
-
응용 프로그램 차원의 로컬 사용자 정의 함수: 응용 프로그램 관리자 이상
-
서버 차원의 전역 사용자정의 함수: 시스템 관리자
Essbase에 사용자정의 함수를 등록할 때 함수에 계산 스크립트 및 공식에 사용되며 함수에 사용되는 Java 클래스 및 메소드 이름과 구분되는 이름을 제공합니다.
사용자 정의 함수의 이름을 지정하려면 다음 요구 사항을 따르십시오.
-
@ 기호로 이름을 시작합니다. 함수 이름의 나머지 부분에는 문자, 숫자 및 @, #, $ 및 _ 기호가 포함될 수 있습니다. 함수 이름에는 공백을 사용할 수 없습니다.
예를 들면 다음과 같습니다. @MYFUNCTION
-
사용자 정의 매크로에 의해서만 호출되는 사용자 정의 함수의 이름을 "@_"로 시작하여 일반 사용 함수 및 매크로와 구별합니다.
예를 들면 다음과 같습니다. @_MYFUNCTION
-
사용자정의 함수는 고유한 이름을 가져야 합니다. 함수 이름은 사용자정의 매크로의 이름과 기존 계산 함수의 이름과 서로 달라야 합니다.
-
Essbase 애플리케이션에 전역 함수와 동일한 이름을 가진 로컬 함수가 포함된 경우 로컬 함수가 계산에 사용됩니다.
커스텀 정의 함수에 대한 Java 클래스 생성 및 컴파일
Essbase 사용자정의 함수(CDF)에 대한 Java 클래스를 생성 및 컴파일하려면 텍스트 편집기 또는 IDE(통합 개발 환경)를 사용하여 클래스를 작성하고 javac 툴을 사용하여 컴파일합니다.
다음은 CDF에 대한 Java 클래스를 생성하기 위한 예제 워크플로우입니다.
Essbase 서버에 Java 클래스 설치
사용자정의 계산 함수(CDF)에 대한 Java 클래스를 Essbase 서버에 설치하고, 컴파일하고, jar 파일을 해당 지침에 지정된 전역 또는 애플리케이션 레벨 udf 디렉토리로 복사하고, 애플리케이션 또는 서버를 재시작합니다.
Java 클래스는 JDK jar 툴을 사용하여 JAR 파일로 컴파일되어야 합니다.
.jar 파일을 생성하고 Essbase 서버에 설치하려면 다음을 수행합니다.
시용자정의 함수 등록
MaxL을 사용하여 사용자정의 함수(CDF)를 Essbase에 등록합니다. 등록 작업은 Java 클래스 내에서 CDF를 작성하고, 클래스를 컴파일하고, jar 파일을 설치한 후에 이루어집니다.
CDF용 Java 클래스를 .jar 파일로 컴파일하고 Essbase 서버에 .jar 파일을 설치한 후 계산 스크립트 및 공식에 사용하려면 먼저 함수를 등록해야 합니다. 사용자정의 함수의 유효성에 대한 요구사항을 참조하십시오.
글로벌 CDF를 등록하면 Essbase 서버의 모든 Essbase 애플리케이션에서 사용할 수 있습니다. 함수를 전역으로 만들기 전에 단일 응용 프로그램에서 함수를 테스트하고 해당 응용 프로그램에만 등록합니다.
매크로 카탈로그를 업데이트하는 것과 동일한 프로세스를 사용하여 함수 카탈로그를 업데이트합니다. 사용자 정의 매크로 카탈로그 새로 고침을 참조하십시오.
주의:
테스트를 위해 전역 함수를 등록하지 마십시오. 이렇게 하면 문제가 발생하면 변경하기가 더 어려워집니다.
CDF를 등록하려면 create function MaxL 문을 사용합니다.
로컬 범위에 CDF를 등록하려면 응용 프로그램 이름을 접두어로 포함시킵니다. 예를 들어, 다음 MaxL 문은 CalcFunc 클래스의 @JSUM 함수를 샘플 응용 프로그램 내에서 사용할 로컬 함수로 등록합니다.
create function Sample.'@JSUM'
as 'CalcFunc.sum'
spec '@JSUM(memberRange)'
comment 'adds list of input members';전역 범위에 CDF를 등록하려면 응용 프로그램 이름을 접두어로 포함하지 마십시오. 예를 들어, 다음 MaxL 문은 CalcFunc 클래스의 @JSUM 함수를 Essbase Server의 모든 애플리케이션에서 사용하기 위한 전역 함수로 등록합니다.
create function '@JSUM'
as 'CalcFunc.sum'
spec '@JSUM(memberRange)'
comment 'adds list of input members';주:
Java 메소드에 대한 입력 매개변수 지정은 선택 사항입니다. 입력 매개변수를 지정하지 않으면 Essbase가 Java 코드의 메소드 정의에서 해당 매개변수를 읽습니다. 그러나 방법 이름이 동일하지만 매개변수 세트가 다른 여러 CDF를 등록하는 경우 함수의 각 버전에 대한 매개변수를 지정하여 함수의 각 버전을 별도로 등록해야 합니다.
등록된 사용자정의 함수 구현
고유 Essbase 계산 함수를 사용하는 것과 동일한 방식으로 계산 스크립트 및 공식에 등록된 사용자정의 함수(CDF)를 사용할 수 있습니다.
등록된 CDF를 사용하려면 다음을 수행합니다.
사용자정의 함수를 업데이트합니다.
Essbase 사용자정의 함수(CDF)를 업데이트하려면 로컬 또는 전역 범위인지 확인하고, 영향을 받는 애플리케이션을 종료하고, 함수에 대한 코드가 포함된 .jar 파일을 바꾸고, 함수를 다시 등록합니다.
CDF 업데이트 절차는 다음 조건에 따라 달라집니다.
-
함수가 로컬 또는 전역으로 등록되었는지 여부입니다.
-
클래스 이름, 메소드 이름 또는 입력 파라미터 등 CDF의 서명이 Java 코드에서 변경되었는지 여부
일반적으로 CDF를 업데이트하려면 함수에 대한 코드가 포함된 .jar 파일을 대체한 다음 다시 등록해야 합니다. 그러나 CDF의 서명이 변경되지 않고 입력 매개변수 세트가 하나만 있는 경우(오버로드된 메소드가 아님), 함수가 포함된 .jar 파일을 바꿀 수 있습니다.
주:
관리자만 전역 CDF를 업데이트해야 합니다.
CDF를 업데이트하려면 다음을 수행합니다.
사용자정의 함수 보기
Essbase에서 사용자정의 함수(CDF)를 확인하여 성공적으로 등록되었는지 여부와 로컬인지 아니면 글로벌 범위인지 확인합니다. CDF는 생성 및 등록될 때까지 표시되지 않습니다.
CDF를 보려면 다음을 수행합니다.
display function MaxL 문을 사용합니다.
예를 들어, 다음 MaxL 문을 사용하여 샘플 애플리케이션의 CDF 및 등록된 전역 함수를 봅니다.
display function Sample;display function 문은 전역 함수임을 나타내기 위해 응용 프로그램 이름이 없는 전역 함수를 나열합니다. 응용 프로그램에 전역 함수와 동일한 이름의 함수가 포함된 경우 로컬 함수만 나열됩니다.
사용자정의 함수 제거
Essbase 사용자정의 함수(CDF)를 제거/등록 해제하려면 먼저 사용 중이 아닌지 확인합니다. 그런 다음 CDF가 정의된 애플리케이션을 종료하고, MaxL 드롭 함수 문을 실행하여 CDF를 제거하고, 영향을 받는 애플리케이션을 다시 시작합니다.
CDF를 제거하려면 다음 권한이 필요합니다.
-
로컬: 최소한 응용 프로그램에 대한 응용 프로그램 관리자 권한
-
전역: 시스템 관리자 권한
CDF를 제거하기 전에 해당 CDF를 사용하는 계산 스크립트 또는 공식이 없는지 확인해야 합니다. 글로벌 CDF는 Essbase 서버의 계산 스크립트 및 공식에 사용할 수 있으므로 제거하기 전에 Essbase 서버에서 글로벌 CDF를 사용하는 계산 스크립트 또는 공식이 없는지 확인해야 합니다.
주의:
사용자가 Essbase 큐브에 접근하지 않고 계산 루틴이 수행되지 않는 경우에만 글로벌 CDF를 제거합니다.
CDF를 제거하려면 다음을 수행합니다.
사용자정의 함수 복사
사용자정의 함수(CDF)를 적절한 액세스 권한이 있는 Essbase 서버 및 애플리케이션에 복사할 수 있습니다.
CDF를 복사하려면 MaxL 명령문으로 생성 또는 바꾸기 함수를 사용합니다.