집합 함수 사용
set 함수는 차원, 계층 구조, 수준에서 집합을 검색하거나 이러한 개체 내에서 멤버의 절대 및 상대 위치를 트래버스하여 다양한 방법으로 집합을 생성합니다.
멤버 함수 및 튜플 함수와 같은 Set 함수는 Analysis Services에 있는 다차원 구조를 협상하는 데 필수적입니다. SET 함수는 MDX 쿼리의 축을 정의하기 때문에 MDX(Multidimensional Expressions) 쿼리에서 결과를 가져오는 데에도 필수적입니다.
가장 일반적인 집합 함수 중 하나는 차원, 계층 또는 수준에서 모든 멤버가 포함된 집합을 검색하는 MDX(Members(Set) 함수입니다. 다음은 쿼리 내에서 집합 함수를 사용하는 예입니다.
SELECT
//Returns all of the members on the Measures dimension
[Measures].MEMBERS
ON Columns,
//Returns all of the members on the Calendar Year level of the Calendar Year Hierarchy
//on the Date dimension
[Date].[Calendar Year].[Calendar Year].MEMBERS
ON Rows
FROM [Adventure Works]
또 다른 일반적으로 사용되는 함수는 MDX(Crossjoin) 함수입니다. 이 함수는 함수에 매개 변수로 전달된 집합의 카티션 곱을 나타내는 튜플 집합을 반환합니다. 실질적으로 이 함수를 사용하면 쿼리에서 '중첩' 또는 '크로스탭' 축을 만들 수 있습니다.
SELECT
//Returns all of the members on the Measures dimension
[Measures].MEMBERS
ON Columns,
//Returns a set containing every combination of all of the members
//on the Calendar Year level of the Calendar Year Hierarchy
//on the Date dimension and all of the members on the Category level
//of the Category hierarchy on the Product dimension
Crossjoin(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Product].[Category].[Category].MEMBERS)
ON Rows
FROM [Adventure Works]
하위 항목(MDX) 함수는 자식 함수와 비슷하지만 더 강력합니다. 계층 구조에서 하나 이상의 수준에서 멤버의 하위 항목을 반환합니다.
SELECT
[측정값]. [인터넷 판매액]
ON 열,
//Returns a set containing all of the Dates beneath Calendar Year
날짜 차원의 일정 계층 구조에서 2004
DESCENDANTS(
[날짜]. [일정]. [역년].&[2004]
, [Date]. [일정]. [날짜])
ON Rows
FROM [Adventure Works]
ORDER(MDX) 함수를 사용하면 특정 숫자 식에 따라 집합의 내용을 오름차순 또는 내림차순으로 정렬할 수 있습니다. 다음 쿼리는 이전 쿼리와 동일한 멤버를 행에 반환하지만 이제 Internet Sales Amount 측정값에 따라 정렬합니다.
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Returns a set containing all of the Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension
//ordered by Internet Sales Amount
ORDER(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
, [Measures].[Internet Sales Amount], BDESC)
ON Rows
FROM [Adventure Works]
또한 이 쿼리는 한 집합 함수인 Descendants에서 반환된 집합을 다른 집합 함수인 Order에 매개 변수로 전달하는 방법을 보여 줍니다.
특정 조건에 따라 집합을 필터링하는 것은 쿼리를 작성할 때 매우 유용하며, 이를 위해 다음 예제와 같이 Filter(MDX) 함수를 사용할 수 있습니다.
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Returns a set containing all of the Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension
//where Internet Sales Amount is greater than $70000
FILTER(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
, [Measures].[Internet Sales Amount]>70000)
ON Rows
FROM [Adventure Works]
다른 방법으로 집합을 필터링할 수 있는 더 정교한 함수가 있습니다. 예를 들어 다음 쿼리는 TOPCount(MDX) 함수가 집합의 상위 n개 항목을 반환하는 것을 보여 줍니다.
SELECT
[Measures].[Internet Sales Amount]
ON Columns,
//Returns a set containing the top 10 Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension by Internet Sales Amount
TOPCOUNT(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
,10, [Measures].[Internet Sales Amount])
ON Rows
FROM [Adventure Works]
마지막으로 MDX(Intersect), Union(MDX) 및 Except(MDX) 함수와 같은 함수를 사용하여 여러 논리 집합 작업을 수행할 수 있습니다. 다음 쿼리에서는 이러한 함수 중 마지막 두 함수의 예를 보여 줍니다.
SELECT
//Returns a set containing the Measures Internet Sales Amount, Internet Tax Amount and
//Internet Total Product Cost
UNION(
{[Measures].[Internet Sales Amount], [Measures].[Internet Tax Amount]}
, {[Measures].[Internet Total Product Cost]}
)
ON Columns,
//Returns a set containing all of the Dates beneath Calendar Year
//2004 in the Calendar hierarchy of the Date dimension
//except the January 1st 2004
EXCEPT(
DESCENDANTS(
[Date].[Calendar].[Calendar Year].&[2004]
, [Date].[Calendar].[Date])
,{[Date].[Calendar].[Date].&[915]})
ON Rows
FROM [Adventure Works]