28 MDX Queries 작성

MDX는 Essbase에서 데이터를 검색하는 쿼리를 실행하는 데 사용할 수 있는 SQL과 유사한 언어입니다. MDX는 또한 ASO 큐브에 대한 공식을 정의하고, 메타데이터를 질의하고, 멤버 이름을 한정하고, 데이터 또는 메타데이터의 하위 집합을 구분하는 데 사용됩니다. MDX를 배우는 가장 좋은 방법은 쿼리를 작성하는 것입니다.

이 섹션에서는 일련의 연습에서 Sample Basic 큐브에 대한 질의를 작성하여 MDX를 학습할 수 있습니다.

MDX 질의 작성을 위한 필요 조건

연습을 완료하려면 다음이 필요합니다.

  • 텍스트 편집기 - MDX 질의를 작성합니다.

  • 샘플 기본이 있는 Essbase 인스턴스에 접근합니다.

    Sample Basic을 가져와야 하는 경우 샘플 큐브를 생성하여 아웃라인 속성 탐색의 단계를 수행합니다(임포트만 수행하고 아웃라인 속성 설정을 건너뜁니다).

  • MaxL 클라이언트 - Essbase에 쿼리를 실행합니다.

MDX 질의 템플리트 작성

MDX 쿼리의 기본 형식을 학습하여 Essbase에서 MDX 사용을 시작할 수 있습니다. SQL 문과 마찬가지로 MDX 질의는 대개 SELECT로 시작합니다.

이 섹션에서는 간단한 MDX 쿼리를 개발하는 기초로 사용할 템플릿을 만듭니다.

대부분의 query는 다음과 같은 문법적 프레임워크를 기반으로 작성할 수 있습니다.

SELECT
  {}
ON COLUMNS
FROM Sample.Basic

1행의 SELECT는 MDX 문의 본문을 시작하는 키워드입니다.

2행의 중괄호 { }set의 위치 표시자입니다. 위 질의에서 집합은 비어 있지만 중괄호는 자리 표시자로 남아 있습니다.

연습 1: MDX 질의 템플리트 생성

질의 템플리트를 생성하려면 다음과 같이 하십시오.

  1. Sample.Basic 큐브에 대해 실행할 수 있는 샘플 질의를 저장할 폴더를 생성합니다.

  2. 텍스트 편집기를 사용하여 빈 파일에 다음 코드를 입력합니다.

    SELECT
      {}
    ON COLUMNS
    FROM Sample.Basic
  3. 파일을 qry_blank.txt로 저장합니다.

MDX 세트 및 튜플

MDX 세트에는 튜플이 포함되고 MDX 튜플에는 멤버 이름이 포함됩니다. 세트, 튜플 및 멤버 이름의 차이점과 Essbase MDX 쿼리에 적합한 방법을 알아봅니다.

첫번째 질의를 작성하고 MaxL 클라이언트에서 실행하여 Sample Basic 큐브에서 일부 데이터를 검색합니다.

집합

MDX 세트는 비어 있거나 튜플 모음이거나 세트 모음일 수 있습니다.

예를 들어, 다음은 빈 세트입니다.

{ }

세트는 중괄호 {}로 묶어야 합니다. 단, 세트가 세트를 반환하는 MDX 함수(나중에 함수에 대한 자세한 내용)로 표시되는 경우는 예외입니다.

다음은 튜플 하나로 구성된 세트입니다.


  {[Cola]}

다음 질의에서 {([Cola], [Actual])}는 하나의 튜플로 구성된 세트이기도 하지만, 이 경우 튜플의 멤버 이름은 두 개 이상입니다.

SELECT
  {([Cola], [Actual])}
ON COLUMNS
FROM Sample.Basic

{([Cola], [Actual])}는 두 차원(제품 및 시나리오)의 두 멤버(콜라 및 실제)로 구성된 튜플입니다.

차원 규칙

세트에 튜플이 여러 개 있는 경우 각 튜플의 멤버는 동일한 순서로 동일한 Essbase 차원을 나타내야 합니다. 다시 말해서, 모든 튜플은 다른 것들과 동일한 차원성을 가져야 합니다.

  • 확인: 다음 세트는 동일한 치수의 두 튜플로 구성됩니다.

    {(West, Feb), (East, Mar)}
  • Not OK: Feb와 Sales의 차원이 다르기 때문에 다음 세트가 차원 규칙을 위반합니다.

    {(West, Feb), (East, Sales)}
  • Not OK: 다음 세트는 두 튜플에 동일한 치수가 포함되지만 두 번째 튜플에서 치수 순서가 반전되기 때문에 치수 규칙을 위반합니다.

    {(West, Feb), (Mar, East)}

튜플 및 멤버 이름

튜플은 임의 개수의 차원에서 멤버 또는 멤버 조합을 참조하는 방법입니다. 예를 들어, Sample.Basic 큐브에서는 모두 적합한 튜플입니다.

  • Jan
  • (Jan, Sales)
  • ([Jan],[Sales],[Cola],[Utah],[Actual])

멤버 이름은 다음과 같은 방법으로 지정할 수 있습니다.

  • 실제 이름 또는 별칭을 지정합니다. 예를 들면 다음과 같습니다.

    • Cola

    • Actual

    • COGS

    • [100]

    멤버 이름이 숫자로 시작하거나 공백을 포함하는 경우 괄호 안에 있어야 합니다(예: [100] 또는 [New York]). 그러나 멤버 이름 대괄호는 명확성과 코드 가독성을 위해 모든 멤버 이름에 권장됩니다.

    멤버 이름이 앰퍼샌드(&)로 시작하는 경우 따옴표 안에 있어야 합니다(예: ["&xyz"]). 선행 앰퍼샌드가 치환 변수용으로 예약되어 있기 때문입니다(MDX 질의의 변수 참조). StrToMbr("&100")로 지정할 수도 있습니다.

    속성 멤버의 경우 긴 이름(멤버를 고유하게 식별할 수 있음)을 사용해야 합니다(예: [12] 대신 [Ounces_12]).

  • 차원 이름 또는 상위 멤버 이름 중 하나를 멤버 이름에 대한 접두어로 지정합니다(예: [Product].[100-10][Diet].[100-10]). 모호성을 없애고 공유 멤버를 정확하게 참조할 수 있으므로 이 연습은 모든 멤버 이름에 권장됩니다. 참조: 아웃라인에서 멤버 이름 복제의 "상위 멤버 구분으로 적격한 멤버"

    주:

    멤버 이름 자격에 다중 조상은 사용하지 마십시오. Essbase는 여러 조상이 포함된 경우 오류를 반환합니다. 예를 들어, [Market].[New York][East].[New York]는 뉴욕에 적합한 이름이지만 [Market].[East].[New York]는 오류를 반환합니다.

  • WITH 섹션에 정의된 계산된 멤버의 이름을 지정합니다.

연습 2: 첫번째 query 실행

query 템플리트의 2행에 있는 중괄호 {}는 집합의 위치 표시자입니다. 이 연습에서는 query에 집합을 추가하고 실행합니다.

쿼리를 실행하려면 다음을 수행합니다.

  1. MDX 질의 템플리트 작성에서 생성한 질의 템플리트인 qry_blank.txt를 엽니다.

  2. 세트는 하나의 튜플만큼 간단할 수 있으므로 세트를 보유하는 중괄호 { } 내에 튜플을 추가합니다.

    2행의 { } 중괄호 안에 [Jan]를 입력합니다.

    SELECT 
      {[Jan]}
    ON COLUMNS
    FROM Sample.Basic
  3. 질의를 qry_first.txt로 저장합니다.

  4. Essbase가 실행 중인지 확인합니다.

  5. MaxL Client를 시작하고 유효한 사용자 이름 및 암호로 로그인합니다. 예:

    login admin1 my_Pa55w0rD on "https://myserver.example.com:9001/essbase/agent";
  6. 전체 SELECT 질의를 복사하여 MaxL Client에 붙여 넣지만 아직 Enter를 누르지 마십시오.

  7. 기본 이후의 모든 위치에서 Enter를 누르기 전에 끝에 세미콜론을 입력합니다. 세미콜론은 MDX 요구 사항은 아니지만 명령문의 끝을 나타내기 위해 MaxL Client에 필요합니다.

  8. Enter를 눌러 질의를 Essbase로 보냅니다.

    결과는 다음과 유사해야 합니다.

    Jan
      8024

축 및 큐브 사양이 있는 MDX 질의 레이아웃

MDX 축은 Essbase 큐브에서 쿼리 결과의 그리드 레이아웃을 구성하는 지침입니다. ON COLUMNS 및 ON ROWS는 결과가 표시되는 위치를 설명하는 축 키워드입니다. 큐브 사양은 FROM 키워드를 포함하며 Essbase에 쿼리할 큐브를 알려줍니다.

MDX 축

축은 Select 후 MDX 쿼리에 맞습니다.

SELECT <axis> [, <axis>...]
FROM <database> 

다음 질의에서 축 사양은 {Jan} ON COLUMNS입니다.

SELECT
  {Jan} ON COLUMNS
FROM Sample.Basic

MDX 질의에 축을 하나 이상 지정해야 합니다.

AXIS(0)부터 AXIS(1)까지 최대 64개의 축이 표시될 수 있습니다. AXIS(63). 세 개 이상의 축을 사용하는 것은 드문 일입니다. 축의 순서는 중요하지 않지만 0에서 n 사이의 축 세트가 지정된 경우 0에서 n 사이의 축을 건너뛰지 않아야 합니다. 또한 치수는 여러 축에 나타날 수 없습니다.

다음 표에 나열된 것처럼 처음 5개의 축에는 키워드 별칭이 있습니다.

표 28-1 축 키워드 별칭

축 키워드 별칭

AXIS(0) 대신 사용할 수 있습니다.

AXIS(1)를 교체할 수 있음

페이지

AXIS(2)를 교체할 수 있음

장에

AXIS를 교체할 수 있음(3)

섹션

AXIS(4)를 교체할 수 있음

MDX 큐브 사양

큐브 사양은 쿼리 중인 Essbase 데이터베이스를 결정하는 쿼리의 일부입니다. 큐브 사양은 다음과 같이 MDX 쿼리에 맞습니다.

SELECT <axis> [, <axis>...]
FROM <cube> 

<cube> 섹션은 FROM 키워드 다음에 오며, 먼저 애플리케이션 이름과 데이터베이스 이름을 지정하는 구분되거나 제한되지 않은 식별자로 구성되어야 합니다. 예를 들어, 다음 사양이 적합합니다.

  • FROM Sample.Basic

  • FROM [Sample.Basic]

  • FROM [Sample].[Basic]

  • FROM'Sample'.'Basic'

연습 3: 2축 Query 실행

2축 조회를 실행하려면

  1. MDX 질의 템플리트 작성에서 생성한 질의 템플리트인 qry_blank.txt를 엽니다.

  2. ON COLUMNS 뒤에 쉼표를 추가한 다음 ON ROWS를 추가하여 두번째 축에 대한 자리 표시자를 추가합니다.

    SELECT
      {}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  3. 새 query 템플리트를 qry_blank_2ax.txt로 저장합니다.

  4. 열 축에 대해 설정된 사양으로 Product 멤버 100-10 및 100-20을 입력합니다. 예:

    SELECT
      {[100-10],[100-20]}
    ON COLUMNS, 
      {}
    ON ROWS
    FROM Sample.Basic

    이러한 멤버 이름은 특수 문자를 포함하므로 대괄호를 사용해야 합니다. 여기에 사용된 규약은 특수 문자를 포함하지 않는 경우에도 모든 멤버 이름을 대괄호로 묶는 것이 좋습니다.

  5. 행 축에 대해 설정된 사양으로 연도 멤버 Qtr1 ~ Qtr4를 입력합니다.

    SELECT
      {[100-10],[100-20]}
    ON COLUMNS,
      {[Qtr1],[Qtr2],[Qtr3],[Qtr4]}
    ON ROWS
    FROM Sample.Basic
  6. 질의를 qry_2ax.txt로 저장합니다.

  7. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

query 결과는 다음과 같아야 합니다.

표 28-2 결과: 2축 질의 실행

빈 thead 셀에 사용되는 공간 이미지 100-10 100-20

Qtr1

5096

1359

Qtr2

5892

1534

Qtr3

6583

1528

Qtr4

5206

1287

연습 4: 단일 축에서 여러 치수 조회

단일 축에서 여러 차원을 쿼리하려면 다음을 수행합니다.

  1. 이전 연습에서 작성한 질의 템플릿인 qry_blank_2ax.txt를 엽니다.

  2. 열 축에서 두 튜플을 지정합니다. 튜플은 각각 단일 멤버가 아닌 멤버 조합입니다. 각 튜플에 여러 멤버가 표시되므로 각 튜플을 괄호로 묶습니다.

    SELECT
      {([100-10],[East]), ([100-20],[East])}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  3. 행 축에서 네 개의 멤버 튜플을 지정하고 Profit를 사용하여 각 분기에 중첩합니다.

    SELECT
      {([100-10],[East]), ([100-20],[East])}
    ON COLUMNS,
      {
      ([Qtr1],[Profit]), ([Qtr2],[Profit]),
      ([Qtr3],[Profit]), ([Qtr4],[Profit])
      }
    ON ROWS
    FROM Sample.Basic
  4. 질의를 qry_1ax.txt로 저장합니다.

  5. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

    결과는 다음과 유사해야 합니다.

    표 28-3 결과: 단일 축에서 여러 차원 질의

    빈 thead 셀에 사용되는 공간 이미지 빈 thead 셀에 사용되는 공간 이미지 100-10 100-20
    빈 thead 셀에 사용되는 공간 이미지 빈 thead 셀에 사용되는 공간 이미지

    동쪽

    동쪽

    Qtr1

    수익

    2461

    212

    Qtr2

    수익

    2490

    303

    Qtr3

    수익

    3298

    312

    Qtr4

    수익

    2430

    287

MDX 함수를 사용하여 세트 작성

MDX 함수를 사용하여 Essbase 메타데이터 또는 데이터에서 작업할 수 있습니다. 함수는 멤버, 세트, 값, 튜플 또는 문자열을 반환할 수 있습니다. MDX를 사용하여 데이터를 분석, 업데이트 또는 내보내는지에 관계없이 유용합니다.

연습을 통해 MemberRangeCrossJoin 함수를 사용하는 방법을 살펴봅니다.

MDX 함수에 대한 이 소개는 세트를 생성하는 몇 가지 기능에 중점을 둡니다. MDX 쿼리에 멤버별 또는 튜플별 세트를 수동으로 입력하는 대신 이러한 열거를 간단한 함수 표현식으로 바꿀 수 있습니다. MDX 함수는 다른 값뿐만 아니라 세트를 반환 할 수 있습니다.

예를 들어, 1차 하위 구성요소는 집합 함수입니다. 입력 멤버의 하위 멤버 집합을 반환합니다. 따라서 Children(Qtr1){Jan, Feb, Mar}를 반환합니다.

다음 연습은 간단한 query에서 MDX 함수를 사용하는 방법을 배우는 데 도움이 됩니다. Essbase에서 지원하는 MDX 함수의 전체 참조는 MDX 함수 목록에 나열됩니다.

연습 5: MemberRange 함수 사용

MemberRange MDX 함수는 동일한 세대의 지정된 두 멤버를 포함하는 멤버 범위를 반환합니다. 구문은 다음과 같습니다.

MemberRange (<member1>, <member2>, [,<layertype>])

여기서 제공하는 첫번째 인수는 범위를 시작하는 멤버이고 두번째 인수는 범위를 종료하는 멤버입니다. layertype 인수는 선택 사항입니다.

주:

MemberRange에 대한 대체 구문은 함수 이름을 사용하는 대신 두 멤버 사이에 콜론을 사용하는 것입니다. member1 : member2.

MemberRange 함수를 사용하려면 다음을 수행합니다.

  1. MDX 질의 템플리트 작성에서 생성한 질의 템플리트인 qry_blank.txt를 엽니다.

  2. 괄호 {}를 삭제합니다. 이 중괄호는 함수를 사용하여 집합을 반환할 때 필요하지 않습니다.

  3. 콜론 연산자를 사용하여 Qtr1 ~ Qtr4의 멤버 범위를 선택합니다.

    SELECT 
      [Qtr1]:[Qtr4]
    ON COLUMNS 
    FROM Sample.Basic
  4. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

    Qtr1, Qtr2, Qtr3 및 Qtr4가 반환됩니다.

  5. MemberRange 함수를 사용하여 동일한 멤버 범위 Qtr1 ~ Qtr4를 선택합니다.

    SELECT
      MemberRange([Qtr1],[Qtr4])
    ON COLUMNS
    FROM Sample.Basic
  6. 질의를 MaxL 클라이언트에 붙여넣고 실행합니다.

  7. 질의를 gry_member_range_func.txt로 저장합니다.

연습 6: CrossJoin 함수 사용

CrossJoin 함수는 서로 다른 Essbase 차원에서 가져온 두 세트의 교차 곱을 반환합니다. 구문은 다음과 같습니다.

CrossJoin(set,set)

이 함수는 서로 다른 차원의 두 세트를 입력으로 가져와서 해당 차원의 교차 곱인 세트를 생성합니다. 대칭 보고서를 만드는 데 유용합니다.

CrossJoin 함수를 사용하려면 다음을 수행합니다.

  1. MDX 질의 템플리트 작성에서 생성한 질의 템플리트인 qry_blank.txt를 엽니다.

  2. 열 축에서 중괄호 {}CrossJoin()로 바꿉니다.

    SELECT
      CrossJoin () 
    ON COLUMNS, 
      {}
    ON ROWS
    FROM Sample.Basic
  3. 두 개의 쉼표로 구분된 중괄호 쌍을 CrossJoin 함수에 제공할 두 개의 집합 인수에 대한 위치 표시자로 추가합니다.

    SELECT
      CrossJoin ({}, {})
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  4. 첫 번째 세트에서 제품 멤버 [100-10]를 지정합니다. 두 번째 세트에서 시장 멤버 [East], [West], [South][Central]를 지정합니다.

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  5. 행 축에서 CrossJoin을 사용하여 Qtr1가 포함된 집합이 있는 측정항목 멤버 집합을 교차합니다.

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      CrossJoin ( 
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]} 
      ) 
    ON ROWS
    FROM Sample.Basic
  6. 질의를 qry_crossjoin_func.txt로 저장합니다.

  7. 질의를 MaxL 클라이언트에 붙여넣고 실행합니다.

CrossJoin을 사용하려고 할 때 인수 순서가 출력의 튜플 순서에 영향을 줍니다.

질의 결과는 다음과 같습니다.

표 28-4 결과: CrossJoin 함수 사용

빈 thead 셀에 사용되는 공간 이미지 빈 thead 셀에 사용되는 공간 이미지 100-10 100-10 100-10 100-10
빈 thead 셀에 사용되는 공간 이미지 빈 thead 셀에 사용되는 공간 이미지

동쪽

West

South

센트럴

Sales

Qtr1

5731

3493

2296

3425

COGS

Qtr1

1783

1428

1010

1460

마진 %

Qtr1

66.803

59.118

56.01

57.372

이익 %

Qtr1

45.82

29.974

32.448

24.613

주:

입력 세트가 기본 차원 및 해당 속성 차원인 경우 CrossJoinAttribute 사용을 고려하십시오.

연습 7: Children 함수 사용

Children 함수는 지정된 멤버의 모든 하위 멤버 집합을 반환합니다. 다음 구문을 사용합니다.

Children (member)

주:

하위 항목에 대한 대체 구문은 member.Children와 같이 입력 멤버에서 연산자로 사용하는 것입니다. 이 연습에서는 연산자 구문을 사용합니다.

하위 함수를 사용하여 첫 번째 축 사양에 바로 가기를 삽입하려면

  1. 이전 연습에서 작성한 질의인 qry_crossjoin_func.txt를 엽니다.

  2. 열 축 사양의 두번째 집합에서 [East],[West],[South],[Central][Market].Children로 바꿉니다.

    SELECT 
      CrossJoin ({[100-10]}, {[Market].Children})
    ON COLUMNS,
      CrossJoin (
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]}
      )
    ON ROWS
    FROM Sample.Basic
  3. 질의를 gry_children_func.txt로 저장합니다.

  4. 질의를 MaxL 클라이언트에 붙여넣고 실행합니다.

    이전 CrossJoin 연습에서 반환한 것과 동일한 결과가 표시되어야 합니다.

MDX가 포함된 참조 레벨 및 세대

일부 MDX 함수는 입력 layer 인수를 기반으로 설정 작업을 수행합니다. 계층은 Essbase 차원의 세대 또는 레벨을 나타냅니다. 멤버 함수를 사용하여 집합을 참조하는 방법을 배웁니다.

MDX에서 계층의 개념은 Essbase 계층의 세대와 레벨을 나타냅니다.

Essbase에서 세대 번호는 차원 이름에서 1로 계산됩니다. 상위 세대 번호는 계층에서 최하위 멤버에 가장 가까운 숫자입니다.

레벨 번호는 계층의 최하위 부분에서 0으로 시작하고 최상위 레벨 번호는 차원 이름입니다.

다음 방법으로 도면층 인수를 지정할 수 있습니다.

  • 세대 또는 레벨 이름(예: States 또는 Regions)입니다.

  • 세대 또는 레벨 이름과 함께 차원 이름(예: Market.Regions[Market].[States])입니다.

  • 레벨은 차원과 레벨 번호가 입력인 함수입니다. 예: [Year].Levels(0).

  • 멤버가 입력인 레벨 함수입니다. 예를 들어, [Qtr1].Level는 시장 차원의 레벨 1인 Sample.Basic의 분기 레벨을 반환합니다.

  • 차원 및 세대 번호가 입력인 Generations 함수입니다. 예를 들어, [Year].Generations (3)입니다.

  • 멤버가 입력인 생성 함수입니다. 예를 들어, [Qtr1].Generation는 시장 차원의 2세대인 Sample.Basic에서 분기 생성을 반환합니다.

주:

Sample.Basic 데이터베이스에서 Qtr1과 Qtr4는 동일한 계층에 있습니다. 즉, Qtr1과 Qtr4도 같은 세대에 있습니다. 그러나 래깅된 계층이 있는 다른 데이터베이스에서 Qtr1 및 Qtr4는 동일한 세대에 있지만 반드시 동일한 레벨에 있을 필요는 없습니다. 예를 들어, Qtr1 계층이 몇 주까지 드릴다운되고 Qtr4 계층이 월에서 중지되는 경우 Qtr1은 Qtr4보다 한 수준 더 높지만 여전히 동일한 계층에 있습니다.

연습 8: 멤버 함수 사용

멤버 함수를 사용하여 지정된 세대 또는 레벨의 모든 멤버를 반환합니다. 계층 인수와 함께 사용할 경우 구문은 다음과 같습니다.

Members (layer)

여기서 layer 인수는 반환할 멤버의 생성 또는 레벨을 나타냅니다.

주:

멤버에 대한 대체 구문은 layer.Members입니다.

멤버 함수를 사용하려면 다음을 수행합니다.

  1. MDX 질의 템플리트 작성에서 생성한 질의 템플리트인 qry_blank.txt를 엽니다.

  2. 괄호 {}를 삭제합니다. 괄호는 함수를 사용하여 집합을 반환할 때 필요하지 않습니다.

  3. 멤버 함수 및 레벨 함수를 사용하여 Sample.Basic의 시장 차원에서 모든 레벨 0 멤버를 선택합니다.

    SELECT
      Members(Market.levels(0))
    ON COLUMNS
    FROM Sample.Basic
  4. 질의를 qry_members_func.txt로 저장합니다.

  5. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

    결과: 시장 차원의 모든 상태가 반환됩니다.

슬라이서 축을 사용하여 MDX 쿼리 POV 설정

슬라이서 축은 MDX 쿼리를 Essbase 큐브의 특정 영역만 고려하도록 제한하는 방법입니다. 예제 연습을 통해 WHERE 절에서 슬라이서를 사용하는 방법을 배웁니다.

슬라이서가 사용되는 경우 MDX 질의의 WHERE 섹션에 있어야 합니다. 또한 WHERE 섹션은 큐브 사양(FROM 섹션)에 따라 질의의 마지막 구성 요소여야 합니다.

SELECT {set}
ON axes
FROM cube
WHERE slicer

슬라이서 축을 사용하여 질의 컨텍스트를 설정합니다. 일반적으로 이 컨텍스트는 다른 모든 축의 기본 컨텍스트입니다.

Sample.Basic 큐브에서 예산 매출을 제외한 실제 매출만 선택하려면 WHERE 절은 다음과 같을 수 있습니다.

WHERE ([Actual], [Sales])

(실제, 판매)는 슬라이서 축에 지정되므로 ON AXIS(n) 세트 사양에 포함할 필요가 없습니다.

주:

동일한 치수는 다른 축과 슬라이서 축에 나타날 수 없습니다. 고유 차원의 조건을 사용하여 축을 필터링하려면 하위 선택을 사용할 수 있습니다.

연습 9: 슬라이서 축으로 결과 제한

슬라이서 축을 사용하여 결과를 제한하려면 다음을 수행합니다.

  1. MDX 함수를 사용하여 세트 작성의 연습 6에서 작성한 질의인 gry_crossjoin_func.txt를 엽니다.

  2. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

    데이터 셀 중 하나에서 결과를 확인합니다. 예를 들어, 첫 번째 튜플인 ([Cola],[East],[Sales],[Qtr1])의 값은 5731입니다.

  3. 슬라이서 축을 추가하여 예산가집행된 값으로만 반환되는 데이터를 제한합니다.

    SELECT
      CrossJoin ({[100-10]}, {[East],[West],[South],[Central]})
    ON COLUMNS,
      CrossJoin (
        {[Sales],[COGS],[Margin %],[Profit %]}, {[Qtr1]}
      )
    ON ROWS
    FROM Sample.Basic
    WHERE (Budget)
  4. 질의를 MaxL 클라이언트에 붙여넣고 실행합니다.

  5. 튜플 ([Cola],[East],[Sales],[Qtr1])의 값은 이제 5020입니다.

  6. 질의를 qry_slicer_axis.txt로 저장합니다.

공통 MDX 관계 함수

MDX 관계 함수는 Essbase 큐브 아웃라인의 계층적 멤버 관계를 기반으로 세트 또는 멤버를 반환합니다.

다음 MDX 관계 함수는 세트를 반환합니다.

표 28-5 세트를 반환하는 MDX 관계 함수 목록

관계 기능 설명

1차 하위 구성요소

입력 멤버의 1차 하위 구성요소를 반환합니다.

동위 멤버

입력 멤버의 동위 항목을 반환합니다.

하위 멤버

멤버의 하위 멤버를 다양한 옵션과 함께 반환합니다.

다음 MDX 관계 함수는 집합이 아닌 단일 멤버를 반환합니다.

표 28-6 단일 멤버를 반환하는 MDX 관계 함수 목록

관계 기능 설명

Ancestor

지정된 레이어에서 상위 멤버를 반환합니다.

사촌

다른 상위 항목의 멤버와 동일한 위치에 있는 1차 하위 멤버를 출력합니다.

상위

입력 멤버의 상위를 반환합니다.

첫 번째 하위

입력 멤버의 첫번째 하위 항목을 반환합니다.

마지막 하위

입력 멤버의 마지막 하위 항목을 반환합니다.

첫 번째 형제

입력 멤버의 상위 항목의 첫번째 하위 항목을 반환합니다.

마지막 형제

입력 멤버의 상위 항목의 마지막 하위 항목을 반환합니다.

연습 10: 설명서에서 몇 가지 관계 함수 예제 시도

관계 함수의 작동 방식을 알아보려면 다음을 수행합니다.

  1. 위 테이블 중 하나에서 함수에 대한 링크를 누르거나 하위를 누릅니다.

  2. 예제를 읽고 SELECT query를 클립보드에 복사합니다.

  3. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 닫는 세미콜론을 추가한 다음 쿼리를 실행합니다.

집합 연산에 대한 MDX 함수

이러한 MDX 함수를 Essbase와 함께 사용하여 CrossJoin, CrossJoinAttribute, Distinct, Except, Generate, Head, Intersect, Subset, Tail 및 Union과 같은 세트를 비교, 조인, 결합 또는 줄일 수 있습니다.

연습을 통해 Intersect 함수와 Union 함수의 차이점을 알아봅니다.

다음 집합 함수는 큐브에서 추가 정보를 파생시키지 않고 입력 집합에서 작동합니다.

표 28-7 순수 세트 함수 목록

순수한 세트 기능 설명

CrossJoin, CrossJoinAttribute

다른 차원에서 2개 집합의 상호 섹션을 반환합니다.

고유

집합에서 중복 튜플을 삭제합니다.

제외

두 집합 사이의 차이를 포함하는 부분 집합을 반환합니다.

생성

반복 함수입니다. set1의 각 튜플에 대해 set2를 반환합니다.

헤드

집합에 제공된 첫번째 n 멤버 또는 튜플을 반환합니다.

교차

두 입력 집합의 교차점을 반환합니다.

하위 세트

부분 집합이 숫자로 지정된 튜플 범위에 해당하는, 한 집합의 부분 집합을 반환합니다.

꼬리

집합에 제공된 마지막 n 멤버 또는 튜플을 반환합니다.

결합

두 입력 집합의 합집합을 반환합니다.

연습 11: 교차 함수 사용

MDX 교차 함수는 두 입력 세트의 교차를 반환하며, 선택적으로 중복 항목을 유지합니다. 두 세트에 모두 있는 튜플을 찾아서 세트를 비교하는 데 사용합니다.

다음 구문은 다음과 같습니다.

Intersect (set, set [,ALL])
  1. MDX 질의 템플리트 작성에서 생성한 질의 템플리트인 qry_blank.txt를 엽니다.

  2. 축에서 빈 괄호 {}를 삭제하고 Intersect()로 바꿉니다. 코드를 더 추가하기 위해 교차 중괄호 안에 공간을 남겨 둡니다. 예:

    SELECT
       Intersect (
    
       )
    ON COLUMNS
    FROM Sample.Basic
  3. 두 개의 쉼표로 구분된 중괄호 쌍을 추가하여 Intersect 함수에 제공할 두 개의 세트 인수에 대해 자리 표시자로 사용합니다. 예:

    SELECT
       Intersect ( 
       { },
       { }
       )
    ON COLUMNS
    FROM Sample.Basic
  4. 첫번째 set 인수로 East의 하위 항목을 지정합니다. 예:

    SELECT
       Intersect (
       { [East].children },
       { }
       )
    ON COLUMNS
    FROM Sample.Basic
  5. 두 번째 세트 인수에 대해 UDA가 "주요 시장"인 시장 차원의 모든 멤버를 지정합니다. 예:

    SELECT
       Intersect (
       { [East].children },
       { UDA([Market], "Major Market") }
       )
    ON COLUMNS
    FROM Sample.Basic
  6. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

    UDA가 "주요 시장"인 East의 모든 하위 항목이 반환됩니다. 예:

    New York   Massachusetts   Florida
    
    8202       6172            5029
  7. 질의를 qry_intersect_func.txt로 저장합니다.

연습 12: Union 함수 사용

MDX Union 함수는 두 개의 입력 세트를 결합하며, 선택적으로 중복을 유지합니다. 두 세트를 하나의 세트로 결합하는 데 사용합니다.

다음 구문은 다음과 같습니다.

Union (set, set [,ALL])
  1. 이전 연습에서 작성한 질의인 qry_intersect_func.txt를 엽니다.

  2. IntersectUnion으로 바꿉니다.

  3. 질의를 qry_union_func.txt로 저장합니다.

  4. 질의를 MaxL 클라이언트에 붙여넣고 실행합니다.

    Intersect는 UDA가 주요 시장인 East의 하위 항목만 포함하는 세트를 반환했지만 Union은 더 큰 세트를 반환합니다. 여기에는 동부의 모든 자녀와 주요 시장의 UDA를 가진 모든 시장 구성원이 포함됩니다.

     (New York)      (Massachusetts) (Florida)       (Connecticut)   (New Hampshire) (East)          (California)    (Texas)         (Central)       (Illinois)      (Ohio)          (Colorado)
    +---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------+---------------
                8202            6712            5029            3093            1125           24161           12964    6425           38262           12577            4384            7227
    

재사용 가능한 세트 및 멤버: MDX WITH 섹션

MDX 질의의 WITH 섹션에서 멤버 및 집합을 정의하면 큐브에 영향을 주지 않고 데이터를 필터링할 수 있습니다. 계산된 멤버는 질의 내에만 존재하는 논리적 멤버입니다. 명명된 집합은 query 내에만 존재하는 논리적 집합입니다. 샘플 연습을 시도하십시오.

계산된 멤버 및 명명된 집합은 질의의 논리적 엔티티로, 질의 수명 동안 여러 번 사용할 수 있습니다. 계산된 멤버와 명명된 집합은 실행 시간뿐 아니라 작성된 코드 행의 시간을 절약할 수 있습니다. MDX 질의 시작 시 선택 사항인 WITH 섹션에서는 계산된 멤버 및/또는 명명된 집합을 정의합니다.

다음 질의는 계산된 멤버를 사용합니다.

WITH
MEMBER [Measures].[Max Qtr2 Sales] AS
  'Max (
    {[Year].[Qtr2]},
    [Measures].[Sales]
  )'
SELECT
{ [Measures].[Max Qtr2 Sales] } on columns,
{ [Product].children } on rows
FROM Sample.Basic

다음 질의는 명명된 집합을 사용합니다.

WITH SET [NewSet] 
AS 'CrossJoin([Product].Children, [Market].Children)'
SELECT
   Filter([NewSet], NOT IsEmpty([NewSet].CurrentTuple)) 
ON COLUMNS
FROM Sample.Basic
WHERE
   {[Sales]}

계산된 요소

계산된 멤버는 질의 실행 기간 동안 존재하는 가상 멤버입니다. 계산된 멤버는 큐브 아웃라인에 물리적 멤버를 추가할 필요 없이 복잡한 분석을 수행할 수 있습니다. 계산된 멤버는 물리적 멤버에 대해 수행된 계산 결과를 저장합니다.

계산된 멤버 이름에 대해 다음 지침을 사용합니다.

  • 계산된 멤버를 차원과 연관시킵니다. 예를 들어, MyCalc 멤버를 Measures 차원과 연관시키려면 이름을 [Measures].[MyCalc]로 지정합니다.

  • 계산된 멤버의 이름을 지정하는 데 실제 멤버 이름을 사용하지 마십시오. 예를 들어, Sales가 측정항목 차원에 이미 있으므로 계산된 멤버의 이름을 [Measures].[Sales]로 지정하지 마십시오.

계산된 여러 멤버를 사용하여 비율 또는 사용자정의 합계를 생성하는 경우 계산된 각 멤버에 대한 해결 순서를 설정하는 것이 좋습니다.

명명된 세트

질의의 SELECT 부분 앞에 WITH SET 키워드를 사용하여 명명된 집합을 정의합니다. 이렇게 하면 query의 SELECT 부분을 작성할 때 set by name을 참조할 수 있으므로 유용합니다.

예를 들어, 명명된 세트 Best5Prods는 12월에 5개의 최상위 판매 제품 세트를 식별합니다.

WITH
SET [Best5Prods]
  AS
  'Topcount (
    [Product].members,
    5,
    ([Measures].[Sales], [Scenario].[Actual], [Year].[Dec])
  )'
SELECT [Best5Prods] ON AXIS(0),
  {[Year].[Dec]} ON AXIS(1)
FROM Sample.Basic

연습 13: 계산된 요소 작성

이 연습에서는 계산에 공통 MDX 함수인 Max 함수를 사용합니다. 집합의 튜플에서 발견된 값의 최대값을 출력합니다.

다음 구문은 다음과 같습니다.

Max (set, numeric_value)
  1. 축 및 큐브 사양이 있는 MDX 질의 레이아웃의 연습 3에서 작성한 질의 템플리트인 qry_blank_2ax.txt를 엽니다.

    SELECT
      {}
    ON COLUMNS,
      {}
    ON ROWS
    FROM Sample.Basic
  2. 행 축 세트에서 Product의 하위를 지정합니다. 예:

    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  3. 조회 시작 시 계산된 요소 사양에 대한 자리 표시자를 추가합니다. 예:

    WITH MEMBER [].[]
     AS ''
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  4. 계산된 멤버를 측정항목 차원과 연관시키고 이름을 최대 Qtr2 Sales로 지정하려면 이 정보를 계산된 멤버 사양에 추가합니다. 예:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
     AS ''
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
  5. AS 키워드 뒤와 작은 따옴표 안에 Max Qtr2 Sales라는 계산된 멤버에 대한 논리를 정의합니다.

    set와 함께 Max 함수를 사용하여 평가(Qtr2)를 첫 번째 인수로, 평가할 measure(Sales)를 두 번째 인수로 사용합니다. 예:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
      AS '
      Max (
        {[Year].[Qtr2]},
        [Measures].[Sales]
      )'
    SELECT
      {}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
    
  6. 계산된 멤버 최대 Qtr2 판매는 WITH 섹션에 정의되어 있습니다. query에서 사용하려면 query의 SELECT 부분에 있는 축 중 하나에서 해당 축을 참조합니다. 예:

    WITH MEMBER [Measures].[Max Qtr2 Sales]
      AS '
      Max (
        {[Year].[Qtr2]},
        [Measures].[Sales]
      )'
    SELECT
      {[Measures].[Max Qtr2 Sales]}
    ON COLUMNS,
      {[Product].children}
    ON ROWS
    FROM Sample.Basic
    
  7. 질의를 gry_calc_member.txt로 저장합니다.

  8. 첫 번째 연습(MDX Sets and Tuples)에 설명된 대로 질의를 MaxL Client에 붙여넣고 실행합니다.

    질의 결과는 다음과 같습니다.

    표 28-8 결과: 계산된 멤버 생성

    빈 thead 셀에 사용되는 공간 이미지 최대 분기2 판매

    100

    27187

    200

    27401

    300

    25736

    400

    21355

    다이어트

    26787

주:

MDX 참조 설명서에 더 많은 예가 있습니다. 섹션이 있는 MDX를 참조하십시오.

반복 MDX 함수

반복 MDX 함수는 Essbase 큐브의 데이터 세트를 루프하여 결과를 조정하도록 지정한 검색 조건을 수행합니다. 부울 테스트를 기반으로 데이터를 필터링하는 예를 참조하십시오.

표 28-9 반복 MDX 함수 목록

함수 설명

필터

검색 조건 값이 TRUE인 set의 튜플 하위 세트를 반환합니다.

IIF

조건 테스트를 수행하고 테스트가 TRUE 또는 FALSE로 평가되는지 여부에 따라 적합한 숫자 표현식이나 집합을 반환합니다.

사례

조건부 테스트를 수행하고 지정한 결과를 반환합니다.

생성

set1의 각 튜플에 대해 set2를 반환합니다.

필터 함수 예

다음 질의는 MDX Filter 함수를 사용하여 IsChild([Market].CurrentMember,[East]) 표현식이 TRUE를 반환하는 모든 Market 차원 멤버를 반환합니다. 이 query는 East의 모든 하위 항목을 반환합니다.

SELECT
  Filter([Market].Members,
    IsChild([Market].CurrentMember,[East])
  )
ON COLUMNS
FROM Sample.Basic

MDX의 필터 함수는 Report Writer의 RESTRICT 명령과 비슷합니다.

MDX로 누락된 데이터 처리

MDX를 사용하여 Essbase 큐브를 쿼리할 때 축에서 NON EMPTY 키워드를 사용하여 값이 없는 셀을 숨길 수 있습니다. 누락된 값을 처리하는 MDX 함수에는 Avg, CoalesceEmpty, IsEmpty, NonEmptyCount 및 NonEmptySubset가 포함됩니다. NONEMPTYMEMBER 및 NONEMPTYTUPLE 속성은 큰 데이터 집합에서 빈 값을 필터링하는 데 도움이 됩니다.

축에서 세트 지정 앞에 선택적 키워드 NON EMPTY를 포함하면 해당 축에서 완전히 #MISSING 값을 포함하는 슬라이스가 숨겨집니다.

다음은 NON EMPTY의 축 사양 구문입니다.

<axis_specification> ::=
  [NON EMPTY] <set> ON
  COLUMNS | ROWS | PAGES | CHAPTERS |
  SECTIONS | AXIS (<unsigned_integer>)

축의 지정된 튜플(예: (Qtr1, Actual))에 대해 슬라이스는 이 튜플을 다른 모든 축의 모든 튜플과 결합하여 발생하는 셀로 구성됩니다. 이러한 모든 셀 값이 #MISSING이면 NON EMPTY 키워드로 인해 튜플이 제거됩니다.

예를 들어, 행의 한 값이 비어 있지 않더라도 전체 행이 반환됩니다. 행 축 사양의 시작 부분에 NON EMPTY를 포함하면 query에 의해 반환된 집합에서 다음 행 조각이 제거됩니다.

Qtr1, 실제에 대한 #MISSING 값 행

NON EMPTY를 사용하여 누락된 값을 숨기는 것 외에도 다음 MDX 함수를 사용하여 #MISSING 결과를 처리할 수 있습니다.

  • CoalesceEmpty - 숫자 값 표현식에서 #MISSING이 아닌 값을 검색합니다.

  • IsEmpty - 입력 숫자-값-표현식의 값이 #MISSING으로 평가되는 경우 TRUE를 반환합니다.

  • 평균: 선택적 IncludeEmpty 플래그를 사용하지 않는 한 평균에서 누락된 값을 생략합니다.

NonEmptyCount MDX 함수는 #Missing이 아닌 값으로 평가되는 집합의 튜플 수를 출력합니다. 각 튜플은 평가되고 이 함수에서 반환된 개수에 포함됩니다. 숫자 값 표현식이 지정된 경우 모든 튜플의 컨텍스트에서 평가되고 #Missing이 아닌 값의 수가 반환됩니다.

합산 저장영역 큐브에서만 NonEmptyCount 함수가 최적화되므로 큐브를 한 번만 스캔하여 모든 셀에 대한 고유 수 계산을 수행할 수 있습니다. 이 최적화가 없으면 데이터베이스는 고유 개수에 해당하는 셀 수만큼 스캔됩니다. NonEmptyCount 최적화는 아웃라인 멤버 공식에 다음 구문이 있을 때 트리거됩니다.

NONEMPTYCOUNT(set, measure, exclude_missing)

exclude_missing 매개변수는 고유 개수 계산을 수행하는 측정항목을 질의하는 질의의 성능을 개선하여 집계 데이터베이스에서 NonEmptyCount 최적화를 지원합니다.

NONEMPTYMEMBER 및 NONEMPTYTUPLE 최적화 속성을 사용하면 MDX가 #MISSING 데이터만 포함하는 기여하지 않는 값에 대한 공식 실행을 건너뛰면서 큰 멤버 또는 튜플 세트를 질의할 수 있습니다.

  • 계산된 멤버 또는 공식 표현식의 시작 부분에 단일 NONEMPTYMEMBER 등록정보 절을 사용하여 nonempty_member_list에 지정된 멤버 중 하나라도 비어 있는 경우 공식 또는 계산된 멤버의 값이 비어 있음을 Essbase에 나타냅니다.

  • nonempty_member_list에 제공된 튜플의 셀 값이 비어 있을 때 공식 또는 계산된 멤버의 값이 비어 있음을 Essbase에 나타내려면 계산된 멤버 또는 공식 표현식의 시작 부분에 단일 NONEMPTYTUPLE 등록정보 절을 사용합니다.

입력 세트가 제공된 경우 NonEmptySubset MDX 함수는 모든 튜플이 비어 있지 않은 것으로 평가되는 해당 입력 세트의 하위 세트를 반환합니다. 비어 있지 않은 검사에 대해 선택적 값 표현식을 지정할 수 있습니다. 이 함수는 비어 있지 않은 조합 집합이 작은 것으로 알려진 큰 집합을 기반으로 하는 질의를 최적화하는 데 도움이 될 수 있습니다. NonEmptySubset는 측정 단위가 있는 경우 세트의 크기를 줄입니다. 예를 들어, 특정 단위에 대해 종속 항목의 비어 있지 않은 하위 세트를 요청할 수 있습니다.

MDX 질의의 변수

MDX에서 사전 정의된 Essbase 대체 변수를 사용하여 쿼리를 변경하지 않고 자주 변경되는 정보를 참조할 수 있습니다. MDX 질의 또는 표현식에서 변수를 참조하려면 앞에 앰퍼샌드(&)가 오는 변수 이름을 입력합니다.

Essbase의 대체 변수는 정기적으로 변경되는 정보의 위치 표시자 역할을 합니다. Essbase 큐브, 애플리케이션 또는 글로벌 레벨에서 대체 변수를 설정하고 각 변수에 값을 지정합니다. 언제든지 값을 변경할 수 있습니다. 치환 변수를 설정하려면 최소한 Database Manager 롤이 있어야 합니다. 정보 변경을 위한 변수 구현을 참조하십시오.

MDX 표현식에서 대체 변수를 사용하려면 다음 사항을 고려하십시오.

  • 질의 중인 애플리케이션 및 큐브에서 대체 변수에 액세스할 수 있어야 합니다.

  • 치환 변수는 이름과 값의 두 구성 요소를 가집니다.

  • 변수 이름은 최대 크기가 이름 및 관련 아티팩트 제한에 지정된 영숫자 조합일 수 있습니다. MDX에서 사용되는 대체 변수 이름에 공백, 구두점 또는 대괄호([ ])를 사용하지 마십시오.

  • 변수를 사용할 표현식의 지점에서 변수 이름 앞에 앰퍼샌드(&)를 입력합니다. 예를 들어, 여기서 CurMonth는 서버에 설정된 대체 변수의 이름이고 MDX 표현식에 &CurMonth를 포함합니다.

  • 검색을 수행할 때 Essbase는 변수 이름을 대체 값으로 바꾸고 해당 값은 MDX 표현식에서 사용됩니다.

예를 들어, 변수 이름 CurQtr 앞에 &가 오는 표현식이 작성됩니다.

SELECT 
  {[&CurQtr]}
ON COLUMNS
FROM Sample.Basic

표현식이 평가되면 현재 값(Qtr1)이 변수 이름으로 대체되므로 실행되는 표현식이 효과적으로 실행됩니다.

SELECT 
  {[Qtr1]}
ON COLUMNS
FROM Sample.Basic

MDX의 속성에 대한 질의

등록정보는 Essbase 데이터 및 메타데이터의 특정 특성을 설명합니다. MDX를 사용하면 Essbase 등록정보를 기반으로 데이터를 검색하고 분석하는 쿼리를 작성할 수 있습니다. 이 등록정보는 고유하거나 사용자정의일 수 있습니다. MDX 질의 축 또는 값 표현식에서 속성을 호출할 수 있습니다.

본질 및 사용자 특성

MDX에서 properties는 데이터 및 메타데이터의 특정 특성을 설명합니다. MDX를 사용하면 속성을 사용하여 데이터를 검색하고 분석하는 쿼리를 작성할 수 있습니다. 속성은 본질적이거나 사용자 정의일 수 있습니다.

고유 속성

내재적 등록정보는 모든 차원의 멤버에 대해 정의됩니다. Essbase 데이터베이스 아웃라인의 모든 멤버에 대해 정의된 고유 멤버 등록정보는 MEMBER_NAME, MEMBER_ALIAS, LEVEL_NUMBER, GEN_NUMBER, IS_EXPENSE, COMMENTS 및 MEMBER_UNIQUE_NAME입니다.

각각에 대한 설명은 MDX Intrinsic Properties를 참조하십시오.

사용자정의 속성

Essbase의 MDX는 속성 등록정보와 UDA 등록정보의 두 가지 사용자정의 등록정보 유형을 지원합니다. 속성 속성은 아웃라인의 속성 차원으로 정의됩니다. Sample.Basic 데이터베이스에서 Pkg Type 속성 차원은 Product 차원에 있는 멤버의 패키지 특성을 설명합니다. 이 정보는 속성 이름 [Pkg Type]을 사용하여 MDX에서 질의할 수 있습니다.

속성 등록정보는 특정 차원에 대해서만 정의되며 각 차원의 특정 레벨에 대해서만 정의됩니다. 예를 들어, Sample.Basic 아웃라인에서 [Ounces]은 Product 차원의 멤버에 대해서만 정의된 속성 속성이고, 이 속성은 Product 차원의 레벨 0 멤버에 대해서만 적합한 값을 가집니다. [Ounces] 속성이 Market과 같은 다른 차원에 대해 존재하지 않습니다. Product 차원의 비레벨 0 멤버에 대한 [Ounces] 속성은 NULL 값입니다. 아웃라인의 속성 속성은 해당 아웃라인의 속성 차원 이름으로 식별됩니다.

사용자 정의 등록 정보에는 UDA도 포함됩니다. 예를 들어 [주요 시장]은 시장 차원 멤버에 정의된 UDA 등록정보입니다. 멤버에 대해 [Major Market] UDA가 정의된 경우 TRUE 값을 반환하고 그렇지 않은 경우 FALSE를 반환합니다.

MDX Custom Properties를 참조하십시오.

질의 축에서 속성 호출

각 축 세트에 대한 치수 및 특성 조합을 나열할 수 있습니다. 질의가 실행되면 지정된 등록정보가 지정된 차원의 모든 멤버에 대해 평가되고 결과 집합에 포함됩니다.

예를 들어, 열 축에서 다음 질의는 모든 Market 차원 멤버에 대한 GEN_NUMBER 정보를 반환합니다. 행 축에서 query는 모든 Product 차원 멤버에 대한 MEMBER_ALIAS 정보를 반환합니다.

SELECT
  [Market].Members
    DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
  Filter ([Product].Members, Sales > 5000)
    DIMENSION PROPERTIES [Product].[MEMBER_ALIAS] on rows
FROM Sample.Basic

축의 DIMENSION PROPERTIES 섹션을 사용하여 멤버 등록정보를 쿼리할 때 등록정보는 차원 이름 및 등록정보 이름으로 식별하거나 등록정보 이름 자체를 사용하여 식별할 수 있습니다. 속성 이름이 자체적으로 사용되는 경우 해당 등록정보가 적용되는 해당 축의 모든 차원에서 모든 멤버에 대해 해당 등록정보 정보가 반환됩니다.

다음 query에서 MEMBER_ALIAS 속성은 Year 및 Product 차원의 행 축에서 평가됩니다.

SELECT [Market].Members
  DIMENSION PROPERTIES [Market].[GEN_NUMBER] on columns,
  CrossJoin([Product].Children, Year.Children)
    DIMENSION PROPERTIES [MEMBER_ALIAS] on rows
FROM Sample.Basic

값 표현식에서 속성 호출

속성은 MDX 질의의 값 표현식 내에서 사용할 수 있습니다. 예를 들어, 입력 집합에 있는 멤버의 속성을 사용하는 값 표현식을 기반으로 집합을 필터링할 수 있습니다.

다음 질의는 캔으로 포장된 모든 카페인 제품을 반환합니다.

SELECT
   Filter([Product].levels(0).members,
    [Product].CurrentMember.Caffeinated and
    [Product].CurrentMember.[Pkg Type] = "Can")
       Dimension Properties
       [Caffeinated], [Pkg Type] on columns
FROM Sample.Basic

다음 쿼리는 현재 시장이 UDA [Major Market]을 사용하여 주요 시장인지 여부에 따라 [BudgetedExpenses] 값을 계산합니다.

WITH
  MEMBER [Measures].[BudgetedExpenses] AS
    'IIF([Market].CurrentMember.[Major Market],
    [Marketing] * 1.2, [Marketing])'

SELECT  {[Measures].[BudgetedExpenses]} ON COLUMNS,
  [Market].Members ON ROWS
FROM Sample.Basic
WHERE ([Budget])

속성의 값 유형

Essbase의 MDX 등록정보 값은 숫자, 부울 또는 문자열 유형일 수 있습니다. MEMBER_NAME 및 MEMBER_ALIAS 속성은 문자열 값을 반환합니다. LEVEL_NUMBER 및 GEN_NUMBER 속성은 숫자 값을 반환합니다.

속성 등록정보는 속성 차원 유형을 기반으로 숫자, 부울 또는 문자열 값을 반환합니다. 예를 들어, Sample.Basic에서 [Ounces] 속성 속성은 숫자 속성입니다. [Pkg Type] 속성 속성은 문자열 속성입니다. [Caffeinated] 속성의 특성은 부울 속성입니다.

Essbase에서는 일자 유형의 속성 차원을 허용합니다. 날짜 유형 등록 정보는 MDX에서 숫자 등록 정보로 처리됩니다. 이러한 등록 정보 값을 날짜와 비교할 때 Todate 함수를 사용하여 비교 전에 날짜 문자열을 숫자로 변환합니다.

다음 질의는 2018년 3월 25일에 도입된 모든 Product 차원 멤버를 반환합니다. [Intro Date] 속성은 날짜 유형이므로 TODATE 함수를 사용하여 날짜 문자열 "03-25-2018"을 숫자로 변환한 다음 비교해야 합니다.

SELECT
  Filter ([Product].Members,
    [Product].CurrentMember.[Intro Date] = 
    TODATE("mm-dd-yyyy","03-25-2018"))ON COLUMNS
FROM Sample.Basic

속성이 값 표현식에서 사용되는 경우 해당 값 유형(문자열, 숫자 또는 부울)에 따라 적절히 사용해야 합니다.

숫자 범위로 속성 차원을 질의할 수도 있습니다.

다음 query는 Small, Medium 및 Large Population 범위에 대한 Sales 데이터를 검색합니다.

SELECT
  {Sales} ON COLUMNS,
  {Small, Medium, Large} ON ROWS
FROM Sample.Basic

속성이 값 표현식에서 속성으로 사용되는 경우 범위 멤버를 사용하여 IN 연산자를 사용하여 멤버의 속성 값이 지정된 범위 내에 있는지 여부를 확인할 수 있습니다.

예를 들어 다음 쿼리는 모집단 범위가 중간인 모든 시장 차원 멤버를 반환합니다.

SELECT
  Filter(
    Market.Members, Market.CurrentMember.Population
    IN "Medium"
  )
ON AXIS(0)
FROM Sample.Basic

NULL 속성 값

일부 멤버는 지정된 속성 이름에 대해 적합한 값을 가질 수 없습니다. 예를 들어, MEMBER_ALIAS 속성은 Outline에 정의된 대로 지정된 멤버에 대한 대체 이름을 반환하지만 모든 멤버에 정의된 별칭이 있을 수는 없습니다. 이 경우 별칭이 없는 멤버에 대해 NULL 값이 반환됩니다.

다음 query에서

SELECT
  [Year].Members
   DIMENSION PROPERTIES [MEMBER_ALIAS]
ON COLUMNS
FROM Sample.Basic

연도 차원에 정의된 별칭이 있는 멤버가 없습니다. 따라서 query는 Year 차원의 멤버에 대한 MEMBER_ALIAS 속성의 NULL 값을 반환합니다.

속성 등록정보는 특정 차원의 멤버와 해당 차원의 특정 레벨에 대해 정의됩니다. Sample.Basic 데이터베이스에서 [Ounces] 속성은 Product 차원의 레벨 0 멤버에 대해서만 정의됩니다.

따라서 다음 질의에 표시된 것처럼 시장 차원에서 멤버의 [Ounces] 속성을 질의하면 구문 오류가 발생합니다.

SELECT
  Filter([Market].members,
    [Market].CurrentMember.[Ounces] = 32) ON COLUMNS
FROM Sample.Basic

또한 차원의 비레벨 0 멤버의 [Ounces] 속성을 질의하는 경우 NULL 값을 가져옵니다.

값 표현식에서 속성 값을 사용하는 경우 IsValid() 함수를 사용하여 NULL 값을 확인할 수 있습니다. 다음 질의는 NULL 값을 가진 멤버를 제거한 후 [Ounces] 속성 값이 12인 모든 Product 차원 멤버를 반환합니다.

SELECT
  Filter([Product].Members,
    IsValid([Product].CurrentMember.[Ounces]) AND
    [Product].CurrentMember.[Ounces] = 12) 
ON COLUMNS
FROM Sample.Basic