MDX 데이터 조작 - SELECT

지정된 큐브에서 데이터를 검색합니다.

구문

  
[ WITH <SELECT WITH clause>   
   [ , <SELECT WITH clause>...n ]   
]   
SELECT   
     [ *   
    | ( <SELECT query axis clause>   
                  [ , <SELECT query axis clause>,...n ]   
            )   
            ]  
FROM   
   <SELECT subcube clause>   
      [ <SELECT slicer axis clause> ]  
      [ <SELECT cell property list clause> ]  
  
<SELECT WITH clause> ::=  
     ( CELL CALCULATION <CREATE CELL CALCULATION body clause> )   
   | ( [ CALCULATED ] MEMBER <CREATE MEMBER body clause>)   
   | ( SET <CREATE SET body clause>)  
   | ( MEASURE = <measure body clause> )  
  
<SELECT query axis clause> ::=  
   [ NON EMPTY ] Set_Expression  
   [ <SELECT dimension property list clause> ]   
      ON   
            Integer_Expression   
       | AXIS(Integer)   
       | COLUMNS   
       | ROWS   
       | PAGES   
       | SECTIONS   
       | CHAPTERS   
  
<SELECT subcube clause> ::=  
      Cube_Name   
   | [NON VISUAL] (SELECT   
                  [ *   
       | ( <SELECT query axis clause> [ ,   
           <SELECT query axis clause>,...n ] )   
         ]   
            FROM   
         <SELECT subcube clause>   
         <SELECT slicer axis clause> )  
  
<SELECT slicer axis clause> ::=   
      WHERE Tuple_Expression  
  
<SELECT cell property list clause> ::=   
   [ CELL ] PROPERTIES CellProperty_Name   
      [ , CellProperty_Name,...n ]  
  
<SELECT dimension property list clause> ::=  
   [DIMENSION] PROPERTIES   
      (DimensionProperty_Name   
         [,DimensionProperty_Name,...n ] )   
    | (LevelProperty_Name   
         [, LevelProperty_Name,...n ] )   
    | (MemberProperty_Name   
         [, MemberProperty_Name,...n ] )  

인수

Set_Expression
집합을 반환하는 유효한 MDX(다차원 식) 식입니다.

정수
0에서 127 사이의 정수입니다.

Cube_Name
큐브 이름을 제공하는 유효한 문자열입니다.

Tuple_Expression
튜플을 반환하는 유효한 MDX(다차원 식) 식입니다.

CellProperty_Name
셀 속성을 나타내는 유효한 문자열입니다.

DimensionProperty_Name
차원 속성을 나타내는 유효한 문자열입니다.

LevelProperty_Name
수준 속성을 나타내는 유효한 문자열입니다.

MemberProperty_Name
멤버 속성을 나타내는 유효한 문자열입니다.

설명

<SELECT slicer axis clause> 식에는 지정된 <SELECT query axis clause> 식에서 참조되는 것 이외의 멤버가 차원 및 계층에 포함되어 있어야 합니다.

지정된 <SELECT query axis clause> 식과 <SELECT slicer axis clause> 값에서 큐브의 특성을 생략하면 특성의 기본 멤버가 암시적으로 슬라이서 축에 추가됩니다.

하위 선택 문의 NON VISUAL 옵션을 사용하면 필터링된 합계 대신 실제 합계를 유지하면서 멤버를 필터링할 수 있습니다. 이렇게 하면 상위 10개 판매액(사람/제품/지역)을 쿼리하고 반환된 상위 10개에 대한 총 판매액 대신 쿼리된 모든 멤버에 대한 실제 총 매출을 얻을 수 있습니다. 자세한 내용은 아래 예를 참조하십시오.

연결 문자열 매개 변수 하위 쿼리=1을 <사용하여 연결을 열 때마다 계산 멤버를 SELECT 쿼리 축 절>에 포함할 수 있습니다. XMLA(지원되는 XMLA 속성)ConnectionString 매개 변수 사용을 참조하세요. 하위 SELECT의 계산 멤버에 대한 예는 다음을 참조하십시오.

Autoexists

SELECT 문에 차원의 두 개 이상의 특성이 사용되는 경우 Analysis Services는 특성의 식을 평가하여 해당 특성의 멤버가 다른 모든 특성의 조건을 충족하도록 적절하게 제한되었는지 확인합니다. 예를 들어 Geography 차원의 특성을 사용한다고 가정해 보겠습니다. City 특성의 모든 멤버를 반환하는 식 하나와 Country 특성의 멤버를 유럽의 모든 국가/지역으로 제한하는 다른 식이 있는 경우, 이로 인해 City 멤버는 유럽의 국가/지역에 속한 도시만 제한됩니다. 이러한 Analysis Services 특징을 Autoexists라고 하며 이는 동일한 차원의 특성에만 적용됩니다. Autoexists는 한 특성 식에서 제외된 차원 레코드를 다른 특성 식에서 포함하지 않도록 하기 때문에 동일한 차원의 특성에만 적용됩니다. 결과적으로 차원 레코드에서 서로 다른 특성 식이 교차하는 것으로 Autoexists를 이해할 수도 있습니다. 아래 예제를 참조하세요.

//Obtain the Top 10 best reseller selling products by Name

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

가져온 결과 집합은 다음과 같습니다.

모델 이름 + 측정값 재판매인 판매액 할인 금액 PCT 할인
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Road-250 $9,377,457.68 $4,032.47 0.04%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
도로-650 $7,442,141.81 $39,698.30 0.53%
투어링-1000 $6,723,794.29 $166,144.17 2.47%
Road-550-W $3,668,383.88 $1,901.97 0.05%
Road-350-W $3,665,932.31 $20,946.50 0.57%
HL Mountain Frame $3,365,069.27 $174.11 0.01%
도로-150 $2,363,805.16 $0.00 0.00%
Touring-3000 $2,046,508.26 $79,582.15 3.89%

획득한 제품 집합은 Preferred10Products와 동일한 것으로 보입니다. 따라서 Preferred10Products 집합을 확인합니다.

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Preferred10Products on 1

from [Adventure Works]

다음 결과에 따라 두 집합(Top10SellingProducts, Preferred10Products)은 동일합니다.

모델 이름 + 측정값 재판매인 판매액 할인 금액 PCT 할인
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Road-250 $9,377,457.68 $4,032.47 0.04%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
도로-650 $7,442,141.81 $39,698.30 0.53%
투어링-1000 $6,723,794.29 $166,144.17 2.47%
Road-550-W $3,668,383.88 $1,901.97 0.05%
Road-350-W $3,665,932.31 $20,946.50 0.57%
HL Mountain Frame $3,365,069.27 $174.11 0.01%
도로-150 $2,363,805.16 $0.00 0.00%
Touring-3000 $2,046,508.26 $79,582.15 3.89%

이전 예제에서는 두 집합을 만들었습니다. 하나는 계산 식이고 다른 하나는 상수 식입니다. 이러한 예제에서는 Autoexists의 다양한 맛을 보여 줍니다.

Autoexists는 식에 전체 또는 단순 적용될 수 있습니다. 기본 설정은 전체입니다. 다음 예제에서는 심층 Autoexists의 개념을 보여 줍니다. 예에서 [Mountain] 그룹의 Top10SellingProducts를 [Product].[Product Line] 특성별로 필터링합니다. 두 특성(slicer 및 축)이 동일한 차원인 [Product]에 속합니다.

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

// Preferred10Products set removed for clarity

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

다음 결과 집합을 생성합니다.

모델 이름 + 측정값 재판매인 판매액 할인 금액 PCT 할인
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
HL Mountain Frame $3,365,069.27 $174.11 0.01%
Mountain-300 $1,907,249.38 $876.95 0.05%
Mountain-500 $1,067,327.31 $17,266.09 1.62%
Mountain-400-W $592,450.05 $303.49 0.05%
LL Mountain Frame $521,864.42 $252.41 0.05%
ML Mountain Frame-W $482,953.16 $206.95 0.04%
ML Mountain Frame $343,785.29 $161.82 0.05%
여성용 마운틴 쇼츠 $260,304.09 $6,675.56 2.56%

이전 결과 세트에서 우리는 Top10SellingProducts 및 Mountain-200, Mountain-100 및 HL 마운틴 프레임 목록에 7 명의 신규 이민자가 목록의 맨 위로 이동했습니다. 이전 결과 집합에서는 이러한 3개의 값이 섞였습니다.

Top10SellingProducts 집합이 쿼리의 조각화 조건을 충족하도록 평가되기 때문에 이를 Deep Autoexists라고 합니다. Deep Autoexists는 모든 식이 슬라이서 식을 적용한 후 가능한 가장 깊은 공간, 축의 하위 선택 식 등을 충족하도록 평가됨을 의미합니다.

그러나 다음 예제와 같이 Top10SellingProducts를 Preferred10Products와 동일한 방식으로 분석할 수 있습니다.

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

set Preferred10Products as '

{[Product].[Model Name].&[Mountain-200],

[Product].[Model Name].&[Road-250],

[Product].[Model Name].&[Mountain-100],

[Product].[Model Name].&[Road-650],

[Product].[Model Name].&[Touring-1000],

[Product].[Model Name].&[Road-550-W],

[Product].[Model Name].&[Road-350-W],

[Product].[Model Name].&[HL Mountain Frame],

[Product].[Model Name].&[Road-150],

[Product].[Model Name].&[Touring-3000]

}'

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Preferred10Products on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

다음 결과 집합을 생성합니다.

모델 이름 + 측정값 재판매인 판매액 할인 금액 PCT 할인
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
HL Mountain Frame $3,365,069.27 $174.11 0.01%

위의 결과에서 조각화는 [Product]의 [Mountain] 그룹에 속하는 Preferred10Products의 제품만 포함하는 결과를 제공합니다. [제품 라인]; Preferred10Products가 상수 식이므로 예상대로

이 결과 집합은 얕은 Autoexists로도 이해됩니다. 이는 식이 조각화 절 이전에 계산되기 때문입니다. 이전 예제에서 식은 개념을 소개하기 위해 설명 목적으로 상수 식이었습니다.

Autoexists 연결 문자열 속성을 사용하여 세션 수준에서 Autoexists 동작을 수정할 수 있습니다. 다음 예제에서는 새 세션을 열고 연결 문자열에 Autoexists=3 속성을 추가하는 것으로 시작합니다. 예를 실행하기 위해 새 연결을 열어야 합니다. Autoexist 설정을 사용하여 연결이 설정되면 해당 연결이 완료될 때까지 계속 적용됩니다.

with member [Measures].[PCT Discount] AS '[Measures].[Discount Amount]/[Measures].[Reseller Sales Amount]', FORMAT_STRING = 'Percent'

set Top10SellingProducts as 'topcount([Product].[Model Name].children, 10, [Measures].[Reseller Sales Amount])'

//Preferred10Products set removed for clarity

select {[Measures].[Reseller Sales Amount], [Measures].[Discount Amount], [Measures].[PCT Discount]} on 0,

Top10SellingProducts on 1

from [Adventure Works]

where [Product].[Product Line].[Mountain]

다음 결과 집합은 이제 Autoexists의 단순 동작을 보여줍니다.

모델 이름 + 측정값 재판매인 판매액 할인 금액 PCT 할인
Mountain-200 $14,356,699.36 $19,012.71 0.13%
Mountain-100 $8,568,958.27 $139,393.27 1.63%
HL Mountain Frame $3,365,069.27 $174.11 0.01%

Autoexists 동작은 연결 문자열에서 AUTOEXISTS=[1|2|3] 매개 변수를 사용하여 수정할 수 있습니다. XMLA(지원되는 XMLA 속성)ConnectionString 매개 변수 사용을 참조하세요.

다음 예제에서는 Adventure Works 큐브에서 차원에 포함된 2003년 첫 8개월 동안 집계된 Date 멤버의 합계 Measures.[Order Quantity]반환합니다.

WITH MEMBER [Date].[Calendar].[First8Months2003] AS  
    Aggregate(  
        PeriodsToDate(  
            [Date].[Calendar].[Calendar Year],   
            [Date].[Calendar].[Month].[August 2003]  
        )  
    )  
SELECT   
    [Date].[Calendar].[First8Months2003] ON COLUMNS,  
    [Product].[Category].Children ON ROWS  
FROM  
    [Adventure Works]  
WHERE  
    [Measures].[Order Quantity]  

NON VISUAL을 이해하기 위해 다음 예제는 제품 범주가 열이고 재판매인 비즈니스 유형이 행인 테이블에서 [Reseller Sales Amount] 수치를 가져오는 [Adventure Works]의 쿼리입니다. 제품과 재판매인 모두에 대한 합계가 제공됩니다.

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

select [Category].members on 0,

[Business Type].members on 1

from [Adventure Works]

where [Measures].[Reseller Sales Amount]

다음 결과를 생성합니다.

비즈니스 유형 + 범주 모든 제품 Accessories Bikes Clothing Components
모든 재판매인 $80,450,596.98 $571,297.93 $66,302,381.56 $1,777,840.84 $11,799,076.66
전문 자전거 가게 $6,756,166.18 $65,125.48 $6,080,117.73 $252,933.91 $357,989.07
부가 가치 재판매인 $34,967,517.33 $175,002.81 $30,892,354.33 $592,385.71 $3,307,774.48
창고 $38,726,913.48 $331,169.64 $29,329,909.50 $932,521.23 $8,133,313.11

Accessories 및 Clothing 제품과 Value Added Reseller 및 Warehouse 대리점에 대한 데이터만 포함된 테이블을 만들고 전체 합계를 유지하려면 NON VISUAL을 사용하여 다음과 같이 문을 작성할 수 있습니다.

select [Category].members on 0,

[Business Type].members on 1

from NON VISUAL (Select {[Category].Accessories, [Category].Clothing} on 0,

{[Business Type].[Value Added Reseller], [Business Type].[Warehouse]} on 1

from [Adventure Works])

where [Measures].[Reseller Sales Amount]

다음 결과를 생성합니다.

비즈니스 유형 + 범주 모든 제품 Accessories 의류
모든 재판매인 $80,450,596.98 $571,297.93 $1,777,840.84
부가 가치 재판매인 $34,967,517.33 $175,002.81 $592,385.71
창고 $38,726,913.48 $331,169.64 $932,521.23

열을 시각적으로 요약하지만 행 합계에 대해 모든 [범주]의 실제 합계를 가져오는 테이블을 생성하려면 다음 쿼리를 실행해야 합니다.

select [Category].members on 0,

[Business Type].members on 1

from NON VISUAL (Select {[Category].Accessories, [Category].Clothing} on 0

from ( Select {[Business Type].[Value Added Reseller], [Business Type].[Warehouse]} on 0

from [Adventure Works])

)

where [Measures].[Reseller Sales Amount]

NON VISUAL이 어떻게 [Category]에만 적용되는지 확인하십시오.

위의 쿼리는 다음 결과를 생성합니다.

비즈니스 유형 + 범주 모든 제품 Accessories 의류
모든 재판매인 $73,694,430.80 $506,172.45 $1,524,906.93
부가 가치 재판매인 $34,967,517.33 $175,002.81 $592,385.71
창고 $38,726,913.48 $331,169.64 $932,521.23

이전 결과와 비교할 때 [모든 재판매인] 행이 이제 [Value Added Reseller] 및 [Warehouse]에 대해 표시된 값에 추가되지만 [모든 제품] 열에 표시되지 않은 제품을 포함한 모든 제품의 총 값이 표시되는 것을 확인할 수 있습니다.

다음 예제에서는 하위 선택에서 계산 멤버를 사용하여 필터링하는 방법을 보여 줍니다. 이 샘플을 재현하려면 연결 문자열 매개 변수 하위 쿼리=1을 사용하여 연결을 설정해야 합니다.

select Measures.allmembers on 0

from (

Select { [Measures].[Reseller Sales Amount]

, [Measures].[Reseller Total Product Cost]

, [Measures].[Reseller Gross Profit]

, [Measures].[Reseller Gross Profit Margin]

} on 0

from [Adventure Works]

)

위의 쿼리는 다음 결과를 생성합니다.

재판매인 판매액 재판매인 총 제품 비용 Reseller Gross Profit 재판매인 총이익률
$80,450,596.98 $79,980,114.38 $470,482.60 0.58%

참고 항목

MDX의 주요 개념(Analysis Services)
MDX 데이터 조작 문(MDX)
쿼리 및 슬라이서 축을 사용하여 쿼리 제한(MDX)