내부 및 외부 집합 표현식
집합 표현식은 집계 함수 내부 및 외부에서 사용할 수 있으며 중괄호로 묶입니다.
집계 함수 내에서 집합 표현식을 사용하면 다음과 같이 보일 수 있습니다.
내부 집합 표현식
Sum( {$<Year={2021}>} Sales )
표현식에 여러 집계가 있고 모든 집계 함수에서 동일한 집합 표현식을 작성하지 않으려면 집계 함수 외부에서 집합 표현식을 사용합니다.
외부 집합 표현식을 사용하는 경우 범위 시작 부분에 배치해야 합니다.
외부 집합 표현식
{<Year={2021}>} Sum(Sales) / Count(distinct Customer)
집계 함수 외부에서 집합 표현식을 사용하는 경우 기존 마스터 측정값에도 적용할 수 있습니다.
마스터 측정값에 적용된 외부 집합 표현식
{<Year={2021}>} [Master Measure]
집계 함수 외부에서 사용되는 집합 표현식은 전체 표현식에 영향을 미칩니다. 단, 괄호로 묶인 경우에는 괄호가 범위를 정의합니다. 아래의 어휘 범위 지정 예에서 집합 표현식은 괄호 안의 집계에만 적용됩니다.
어휘 범위 지정
( {<Year={2021}>} Sum(Amount) / Count(distinct Customer) ) – Avg(CustomerSales)
규칙
어휘 범위
집합 표현식은 괄호로 묶이지 않는 한 전체 표현식에 영향을 줍니다. 이 경우 괄호는 어휘 범위를 정의합니다.
위치
집합 표현식은 어휘 범위의 시작 부분에 위치해야 합니다.
컨텍스트
컨텍스트는 표현식과 관련된 선택 항목입니다. 일반적으로 컨텍스트는 항상 현재 선택 항목의 기본 상태였습니다. 그러나 개체가 대체 상태로 설정된 경우 컨텍스트는 현재 선택 항목의 대체 상태입니다.
외부 집합 표현식의 형태로 컨텍스트를 정의할 수도 있습니다.
상속
내부 집합 표현식은 외부 집합 표현식보다 우선합니다. 내부 집합 표현식에 집합 식별자가 포함되어 있으면 외부 집합 표현식에 정의된 컨텍스트가 재정의됩니다. 그렇지 않으면 내부 집합과 외부 집합 표현식이 모두 평가됩니다.
예 1: 집합 식별자가 있는 내부 집합 표현식
위 표현식에서 내부 집합 표현식 Count({1} distinct OrderNumber)는 집합 식별자 {1}로 구성됩니다. 이 내부 집합 표현식이 평가될 때, 외부 집합 표현식 {<Year={2023}>}에 정의된 범위는 적용되지 않습니다.
예 2: 집합 식별자가 없는 내부 집합 표현식
위 표현식에서 내부 집합 표현식 Sum ({<Status={'Confirmed'}>} Sales_Stream1) 및 Sum ({<UpdatedStatus={'Confirmed'}>} Sales_Stream2)에는 집합 식별자가 포함되어 있지 않습니다. 따라서 결과를 평가할 때 외부 집합 표현식 {<Year={2023}>}과 두 내부 집합 표현식이 모두 적용됩니다.
요소 집합 할당
요소 집합 할당은 두 선택 항목이 병합되는 방법을 결정합니다. 일반 등호를 사용하는 경우 내부 집합 표현식의 선택 항목이 우선합니다. 그렇지 않으면 암시적 집합 연산자가 사용됩니다.
{<Field={value}>} - 이 내부 선택 항목은 “Field”의 모든 외부 선택 항목을 바꿉니다.
{<Field+={value}>} - 이 내부 선택 항목은 통합 연산자를 사용하여 “Field”의 외부 선택 항목과 병합됩니다.
{<Field*={value}>} - 이 내부 선택 항목은 교차 연산자를 사용하여 “Field”의 외부 선택 항목과 병합됩니다.
여러 단계의 상속
상속은 여러 단계에서 발생할 수 있습니다. 예:
현재 선택 항목 → Sum(Amount)
집계 함수는 현재 선택 항목인 컨텍스트를 사용합니다.
현재 선택 항목 → {<Set1>} Sum(Amount)
Set1은 현재 선택 항목에서 상속되고 결과는 집계 함수의 컨텍스트가 됩니다.
현재 선택 항목 → {<Set1>} ({<Set2>} Sum(Amount))
Set2는 Set1에서 상속되며, 이는 차례로 현재 선택 항목에서 상속되며 결과는 집계 함수의 컨텍스트가 됩니다.
내부 및 외부 집합 표현식 연결에 대한 상속
복잡한 연결에서 여러 개의 집합 표현식을 사용할 경우 상속에 대한 추가 고려 사항이 있습니다. 특히 외부 집합 표현식 뒤에 다른 외부 집합 표현식 및/또는 내부 집합 표현식이 오는 경우 더욱 그렇습니다. 자세한 내용은 여러 개의 외부 및 내부 집합 표현식의 연결을 참조하십시오.
Aggr() 함수
Aggr() 함수는 두 개의 독립적인 집계가 있는 중첩 집계를 만듭니다. 아래 예에서 Count()는 Dim의 각 값에 대해 계산되고 결과 배열은 Sum() 함수를 사용하여 집계됩니다.
Sum(Aggr(Count(X),Dim))
Count()는 내부 집계이고 Sum()은 외부 집계입니다.
내부 집계는 외부 집계에서 컨텍스트를 상속하지 않습니다.
내부 집계는 집합 표현식을 포함할 수 있는 Aggr() 함수에서 컨텍스트를 상속합니다.
Aggr() 함수와 외부 집계 함수는 모두 외부 집합 표현식에서 컨텍스트를 상속합니다.
여러 개의 외부 및 내부 집합 표현식의 연결
두 개 이상의 외부 집합 표현식을 가질 수 있다는 점에 유의해야 합니다. 이 예에서는 두 개의 외부 집합 표현식과 하나의 내부 집합 표현식이 있습니다.
설정된 표현식은 왼쪽에서 오른쪽으로 적용됩니다. 즉, 두 개의 집합 표현식이 충돌하는 집합을 사용하는 경우 가장 오른쪽에 있는 표현식이 우선권을 갖습니다.
이런 방식으로 연결된 외부 집합 표현식의 개수에는 제한이 없지만, 내부 집합 표현식의 개수는 하나로 제한됩니다. 두 개 이상의 내부 집합 표현식이 나란히 있어도 오류가 발생하지 않지만, 평가할 때는 가장 오른쪽에 있는 표현식만 사용됩니다.
표현식 상속 설정
집계 표현식에 연결의 일부로 두 개 이상의 집합 표현식이 포함된 경우 집합 표현식은 왼쪽에서 오른쪽으로 하나씩 평가됩니다. 각 집합 표현식의 결과는 차원마다 하나씩 있는 집합의 그룹입니다. 집합은 다음 집합 표현식으로 전달되며, 이를 통해 다음 집합 표현식으로 전달되기 전에 추가 변경이 가능합니다.
각 집합 표현식이 서로 다른 차원에서 작동하는 한, 집합 간에 충돌이 발생하지 않으며 모든 집합은 연결의 끝까지 보존됩니다(집계 중에도 적용됨). 이 규칙에는 한 가지 예외가 있는데, 이는 집합 표현식의 차원이 빈 집합을 생성할 때 적용되는 경우가 있습니다. 자세한 내용은 다음을 참조하십시오.
빈 선택 집합
집합 표현식의 차원이 평가될 때 집합에 데이터가 포함되지 않을 수 있습니다. 이를 빈 집합이라고 합니다. 빈 집합은 다음과 같은 여러 시나리오에서 발생할 수 있습니다.
잘못된 표현식 정의. 예를 들어, 집합 표현식 {<OrderYear={‘2025’}>}를 사용하여 값 2025를 찾으려고 할 때 표현식은 {<OrderYear={‘0025’}>}로 작성됩니다.
분석 중에 표현식에서 참조된 차원과 다른 차원에서 선택이 이루어지며 이 선택으로 인해 설정된 표현식 차원에 대해 사용할 수 있는 데이터가 없습니다. 예를 들어, 사용자가 Region='Europe'을 선택하고 {<ProductCategory={‘Shirts’}>} Sum (Sales)에 대한 표현식 필터를 설정합니다. 유럽에서 셔츠가 판매되지 않으면 집합 표현식에는 빈 집합이 포함됩니다.
빈 집합은 표현식에서 명시적으로 정의됩니다. 이런 일은 흔하지도 유용하지도 않지만, 기술적으로는 가능합니다. 예: {<Year={}>}
암시적 선택 집합 지우기
집합 표현식을 적용한 후 결과가 모든 차원에 대해 빈 집합인 경우(참조: 빈 선택 집합), 이후에 집합 표현식이 하나 더 적용되는 경우 해당 차원에 대한 선택 집합은 다음 집합 표현식이 적용되기 직전에 해제됩니다(전체 집합으로 복원됨). 선택 집합 해제는 모든 값이 포함되었다는 것을 의미합니다. 그러나 이러한 해제는 빈 집합이 생성되는 집합 표현식 뒤에 하나 이상의 추가 외부 집합 표현식이 적용되는 경우에만 발생합니다.
선택 집합 해제의 예는 다음과 같습니다.
{<Year={}>} {<Region={"Europe"}>} Sum( Sales )
Year={}은 차원 Year에 대한 빈 집합을 만듭니다. 즉, Year에 대한 선택 집합은 Region={Europe}을 포함하는 다음 집합 표현식으로 집합이 전달될 때 해제된다는 의미입니다. 선택 해제는 단일 차원에서만 발생한다는 점에 유의해야 합니다. 동일한 집합 표현식 내의 집합을 포함하여 다른 차원의 집합은 수정 없이 전달됩니다.
다음은 선택 집합이 해제되는 또 다른 예입니다.
{<Year={}, Product={"XI345"}>} {<Region={"Europe"}>} Sum(Sales)
위의 예에서는 다음과 같은 일이 발생합니다.
선택 집합 Product={"XI345"} 및 Region={"Europe"}가 적용됩니다.
Year={}가 적용되지 않습니다. 이는 마지막 집합 표현식인 {<Region={"Europe"}>}이 적용되면서 해당 집합이 해제되기 때문입니다.
집합 표현식 구성 요소를 마지막 바깥쪽 집합 표현식으로 이동하면 암묵적 해제가 발생하지 않습니다. 다음 예를 살펴보십시오.
{<Product={"XI345"}>} {<Year={}, Region={"Europe"}>} Sum(Sales)
여기서는 Year 표현식을 연결의 마지막 집합 표현식으로 이동했습니다. 이렇게 하면 암묵적 해제가 발생하지 않고 Year 차원의 빈 집합이 실제로 Sum 집계에 사용됩니다.
어떤 경우든 선택 집합이 해제되면 바람직하지 않은 동작이 발생할 수 있습니다. 분석 환경을 개선하고 일련의 집합 표현식을 더 쉽게 작성할 수 있도록 하려면 빈 집합 보존 플래그를 사용합니다. 자세한 내용은 빈 집합 보존 플래그(외부 집합 표현식)을 참조하십시오.
빈 집합 보존 플래그(외부 집합 표현식)
& 기호(빈 집합 보존 플래그)를 사용하여 외부 집합 표현식의 평가 모델을 간소화합니다. 예:
{& <Year={}, Product={XI345}>} {<Region={Europe}>} Sum( Sales )
이 예에서 Year={}는 Year에 대한 빈 선택 집합을 정의합니다. & 기호가 없으면 {<Region={Europe}>} 표현식은 Year 빈 선택 집합을 해제하여 모든 데이터가 집계 계산에 사용되게 됩니다. & 기호는 집계가 Year 빈 선택 집합을 존중하도록 강제하여 더 이해하기 쉬운 출력을 생성합니다.
빈 집합 보존 플래그에 대한 자세한 내용은 빈 집합 보존 플래그를 참조하십시오.