26 사용자정의 계산 함수 개발

Essbase 블록 저장영역 큐브에 사용할 수 있는 계산 함수를 강화하기 위해 Java를 사용하여 고유한 사용자정의 함수(CDF)를 개발할 수 있습니다. 함수를 작성한 후 Java 클래스를 설치한 다음 함수를 Essbase 서버에 전역적으로 등록하거나 애플리케이션에 로컬로 등록합니다.

Essbase 계산 스크립트에서 사용자정의 함수를 사용할 수 있습니다.

Essbase는 Java 클래스 및 아카이브를 생성하기 위한 툴을 제공하지 않습니다. 지원되는 버전의 JDK가 있어야 합니다.

사용자정의 함수의 예는 Java 코드 예를 참조하십시오.

사용자정의 함수는 블록 스토리지 큐브에만 사용할 수 있습니다(집계 스토리지 큐브와는 관련이 없음).

사용자정의 함수를 생성하려면 다음 워크플로우를 사용합니다.

  1. 사용자정의 함수에 대한 요구사항 검토: 사용자정의 함수의 유효성에 대한 요구사항

  2. 사용자정의 함수로 사용할 퍼블릭 정적 메소드가 하나 이상 포함된 퍼블릭 Java 클래스 작성: 사용자정의 함수에 대한 Java 클래스 생성 및 컴파일

  3. Java 클래스 설치: Essbase 서버에 Java 클래스 설치

  4. 사용자정의 함수를 로컬 또는 전역 함수로 등록: 사용자정의 함수 등록

사용자정의 함수의 유효성에 대한 요구사항

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 클래스를 생성하기 위한 예제 워크플로우입니다.

  1. 텍스트 편집기에서 Java 클래스를 생성합니다.

    예:

    public class CalcFunc {
      public static double sum (double[] data) {
        int i, n = data.length;
        double sum = 0.0d;
        for (i=0; i<n; i++) {
          double d = data [i];
          sum = sum + d;
        }
        return sum;
      }
    }
    
  2. 파일을 .java 확장명으로 저장합니다.

    예:

    CalcFunc.java
  3. .java 파일이 있는 디렉토리로 이동하고 명령 프롬프트에서 다음 명령을 입력합니다.
    javac java_filename

    예:

    javac CalcFunc.java
  4. 컴파일러가 확장자가 .class인 새 파일을 생성할 때까지 컴파일 오류를 해결합니다.

    예:

    CalcFunc.class

Essbase 서버에 Java 클래스 설치

사용자정의 계산 함수(CDF)에 대한 Java 클래스를 Essbase 서버에 설치하고, 컴파일하고, jar 파일을 해당 지침에 지정된 전역 또는 애플리케이션 레벨 udf 디렉토리로 복사하고, 애플리케이션 또는 서버를 재시작합니다.

Java 클래스는 JDK jar 툴을 사용하여 JAR 파일로 컴파일되어야 합니다.

.jar 파일을 생성하고 Essbase 서버에 설치하려면 다음을 수행합니다.

  1. .class 파일이 있는 디렉토리로 이동하고 명령 프롬프트에서 다음 명령을 입력합니다.
    jar cf jar_filename class_filename

    예:

    jar cf CalcFunc.jar CalcFunc.class
  2. Essbase 서버에서 .jar 파일을 다음 디렉토리 중 하나로 복사합니다(디렉토리가 없는 경우 생성).
    • 전역 사용자정의 함수를 포함하는 .jar 파일의 경우:

      ESSBASEPATH/java/udf/
    • .jar 파일은 특정 응용 프로그램에서만 사용됩니다.

      <Application Directory>/app/appname/udf/

      여기서 appname는 로컬 CDF가 사용될 응용 프로그램의 이름입니다.

    ESSBASEPATH 또는 <Application Directory>의 위치를 모르는 경우 Essbase 플랫폼의 환경 변수를 참조하십시오.

    이후에 .jar 파일이 다른 위치에 배치되는 경우 .jar 파일의 전체 경로와 파일 이름을 포함하도록 CLASSPATH 변수를 수정해야 합니다.

  3. 특정 응용 프로그램에서만 기능을 사용할 경우 해당 응용 프로그램을 다시 시작합니다. 그렇지 않으면 Essbase 서버를 재시작합니다. 독립 배치는 서버 시작, 정지 및 확인을 참조하고, OCI 스택 배치는 프로세스의 시작, 정지 및 상태를 확인하는 명령 사용을 참조하십시오.

시용자정의 함수 등록

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를 사용하려면 다음을 수행합니다.

  1. 기존 계산 스크립트 또는 공식을 생성하거나 엽니다.
    • CDF가 특정 애플리케이션 내에서 로컬로 등록된 경우 해당 애플리케이션 내에서 계산 스크립트 또는 공식을 사용해야 합니다.

    • CDF가 전역적으로 등록된 경우 Essbase 서버에서 계산 스크립트 또는 공식을 사용할 수 있습니다.

  2. 계산 스크립트 또는 공식에 함수를 추가합니다.

    예를 들어, JSUM을 사용하려면 다음 계산 스크립트를 사용합니다.

    "New York" = @JSUM(@LIST(2.3, 4.5, 6.6, 1000.34));

    이 계산 스크립트를 Sample.Basic 샘플 데이터베이스와 함께 사용하거나 "New York"을 테스트 데이터베이스의 멤버 이름으로 바꿉니다.

  3. 계산 스크립트 또는 공식을 저장한 다음 평소와 같이 실행합니다.

사용자정의 함수를 업데이트합니다.

Essbase 사용자정의 함수(CDF)를 업데이트하려면 로컬 또는 전역 범위인지 확인하고, 영향을 받는 애플리케이션을 종료하고, 함수에 대한 코드가 포함된 .jar 파일을 바꾸고, 함수를 다시 등록합니다.

CDF 업데이트 절차는 다음 조건에 따라 달라집니다.

  • 함수가 로컬 또는 전역으로 등록되었는지 여부입니다.

  • 클래스 이름, 메소드 이름 또는 입력 파라미터 등 CDF의 서명이 Java 코드에서 변경되었는지 여부

일반적으로 CDF를 업데이트하려면 함수에 대한 코드가 포함된 .jar 파일을 대체한 다음 다시 등록해야 합니다. 그러나 CDF의 서명이 변경되지 않고 입력 매개변수 세트가 하나만 있는 경우(오버로드된 메소드가 아님), 함수가 포함된 .jar 파일을 바꿀 수 있습니다.

주:

관리자만 전역 CDF를 업데이트해야 합니다.

CDF를 업데이트하려면 다음을 수행합니다.

  1. 함수가 로컬인지 전역인지 확인합니다.

    사용자정의 함수 보기를 참조하십시오.

  2. CDF용 Java 클래스를 변경하고 Java 테스트 프로그램을 사용하여 출력을 테스트합니다.
  3. Java 클래스를 컴파일하고 이전 .jar 파일과 동일한 이름을 사용하여 새 .jar 파일에 아카이브합니다.

    이전 .jar 파일에 포함된 CDF에 대한 다른 클래스 및 메소드를 포함시킵니다.

  4. 로컬 또는 전역 사용자정의 함수를 업데이트할지 여부에 따라 작업을 수행합니다.
    1. 로컬: .jar 파일에서 함수를 사용하는 Essbase 애플리케이션을 모두 종료합니다.
    2. 글로벌: 모든 Essbase 애플리케이션 종료

    Essbase 애플리케이션이 .jar 파일의 함수를 사용하는지 확실하지 않으면 모든 Essbase 애플리케이션을 종료합니다.

  5. .jar 파일을 Essbase 서버에 복사하여 기존 .jar 파일을 동일한 이름으로 바꿉니다.
  6. CDF의 서명이 변경되지 않은 경우 8단계로 건너뜁니다.
  7. CDF를 바꾸려면 함수 생성 또는 바꾸기 MaxL 문을 사용합니다. 예를 들면, 다음과 같습니다.
    • 로컬:

      create or replace function sample.'@JSUM'
      as 'CalcFunc.sum';
    • 전역:

      create or replace function '@JSUM'
      as 'CalcFunc.sum';
  8. 종료한 응용 프로그램을 재시작하여 카탈로그를 갱신합니다.

사용자정의 함수 보기

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를 제거하려면 다음을 수행합니다.

  1. 함수가 로컬인지 전역인지 확인합니다.

    사용자정의 함수 보기를 참조하십시오.

  2. 로컬 또는 전역 CDF를 제거할지 여부에 따라 작업을 수행합니다.
    1. 로컬: .jar 파일에서 함수를 사용하는 Essbase 애플리케이션을 모두 종료합니다.
    2. 글로벌: 모든 Essbase 애플리케이션을 종료합니다.
  3. CDF를 제거하려면 드롭 함수 MaxL 문을 사용합니다. 예를 들면, 다음과 같습니다.
    • 로컬:

      drop function Sample.'@JSUM';
    • 전역:

      drop function '@JSUM';
  4. 종료한 응용 프로그램을 재시작하여 카탈로그를 갱신합니다.

사용자정의 함수 복사

사용자정의 함수(CDF)를 적절한 액세스 권한이 있는 Essbase 서버 및 애플리케이션에 복사할 수 있습니다.

CDF를 복사하려면 MaxL 명령문으로 생성 또는 바꾸기 함수를 사용합니다.

커스텀 정의 함수의 성능 고려 사항

사용자정의 함수는 Essbase 계산기 프레임워크의 확장으로 구현되므로 CDF가 기본 Essbase 계산 함수보다 덜 효율적으로 작동할 수 있습니다.

성능을 최적화하려면 사용자정의 함수 사용을 고유 Essbase 계산 명령함수, 특히 계산 속도가 중요한 애플리케이션에서 수행할 수 없는 계산으로 제한합니다.