MDX-datamanipulering – SELECT

Hämtar data från en specificerad kub.

Syntax

  
[ 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 ] )  

Arguments

Set_Expression
Ett giltigt Multidimensional Expressions (MDX)-uttryck som returnerar en mängd.

Heltal
Ett heltal mellan 0 och 127.

Cube_Name
En giltig sträng som ger ett kubnamn.

Tuple_Expression
Ett giltigt Multidimensional Expressions (MDX)-uttryck som returnerar en tupel.

CellProperty_Name
En giltig sträng som representerar en cellegenskap.

DimensionProperty_Name
En giltig sträng som representerar en dimensionsegenskap.

LevelProperty_Name
En giltig sträng som representerar en nivåegenskap.

MemberProperty_Name
En giltig sträng som representerar en medlemsegenskap.

Remarks

Uttrycket <SELECT slicer axis clause> måste innehålla medlemmar i dimensioner och hierarkier som inte är de som refereras i de angivna <SELECT query axis clause> uttrycken.

Om ett attribut i kuben utelämnas från de specificerade <SELECT query axis clause> uttrycken och värdet <SELECT slicer axis clause> , läggs attributets standardmedlem implicit till sliceraxeln.

NON VISUAL-alternativet i subselect-satsen gör det möjligt att filtrera bort medlemmar samtidigt som de verkliga totalerna behålls istället för filtrerade totaler. Detta gör det möjligt att söka efter de tio största försäljningarna (personer/produkter/regioner) och få fram den verkliga totala försäljningen för alla efterfrågade medlemmar, istället för det totala värdet av försäljningen för de tio mest returnerade. Se exemplen nedan för mer information.

Beräknade medlemmar kan inkluderas i <SELECT query axis-klausulen> varje gång anslutningen öppnades med hjälp av reťazec pripojenia-parametern subqueries=1; se Supported XMLA Properties (XMLA) och ConnectionString för parameteranvändning. Ett exempel ges om beräknade medlemmar i delval.

Autoexisterar

När två eller fler attribut i dimensionen används i ett SELECT-uttalande utvärderar Analysis Services attributens uttryck för att säkerställa att medlemmarna i dessa attribut är korrekt begränsade för att uppfylla kriterierna för alla andra attribut. Anta till exempel att du arbetar med attribut från geografidimensionen. Om du har ett uttryck som returnerar alla medlemmar från City-attributet, och ett annat uttryck som begränsar medlemmar från Country-attributet till alla länder/regioner i Europa, kommer detta att resultera i att City-medlemmarna endast är begränsade till de städer som tillhör länder/regioner i Europa. Denna egenskap hos analystjänster kallas Autoexistens och gäller endast attribut i samma dimension. Autoexister gäller endast för attribut från samma dimension eftersom den försöker förhindra att dimensionsposter som undantas i ett attribututtryck inkluderas av de andra attribututtrycken. Autoexistens kan också förstås som den resulterande skärningen av de olika attribututtrycken över dimensionsposterna. Se följande exempel nedan:

//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]  

Den erhållna resultatuppsättningen är:

Modellnamn + Mått Återförsäljares Försäljningsbelopp Rabattbelopp PCT-rabatt
Berg-200 $14,356,699.36 $19,012.71 0,13%
Väg 250 $9,377,457.68 4 032,47 USD 0,04%
Berg-100 $8,568,958.27 $139,393.27 1,63%
Väg 650 $7,442,141.81 $39,698.30 0,53%
Touring-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%
Väg 150 $2,363,805.16 0,00 USD 0,00%
Touring-3000 $2,046,508.26 $79,582.15 3,89%

Den erhållna uppsättningen produkter verkar vara densamma som Preferred10Products, så Preferred10Products-uppsättningen verifieras:

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]  

Enligt följande resultat är båda uppsättningarna (Top10SellingProducts, Preferred10Products) likadana.

Modellnamn + Mått Återförsäljares Försäljningsbelopp Rabattbelopp PCT-rabatt
Berg-200 $14,356,699.36 $19,012.71 0,13%
Väg 250 $9,377,457.68 4 032,47 USD 0,04%
Berg-100 $8,568,958.27 $139,393.27 1,63%
Väg 650 $7,442,141.81 $39,698.30 0,53%
Touring-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%
Väg 150 $2,363,805.16 0,00 USD 0,00%
Touring-3000 $2,046,508.26 $79,582.15 3,89%

I de tidigare exemplen skapade vi två mängder: en som ett beräknat uttryck och en annan som ett konstant uttryck. Dessa exempel illustrerar de olika varianterna av Autoexist.

Autoexistens kan tillämpas djupt eller ytligt på uttrycken. Standardinställningen är djup. I följande exempel illustreras begreppet deep Autoexists. I exemplet filtrerar vi 'De 10 bäst säljande produkterna' enligt attributet [Product].[Product Line] för de som tillhör gruppen [Mountain]. Observera att båda attributen (utsnitt och axel) tillhör samma dimension, [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]  

Genererar följande resultatuppsättning:

Modellnamn + Mått Återförsäljares Försäljningsbelopp Rabattbelopp PCT-rabatt
Berg-200 $14,356,699.36 $19,012.71 0,13%
Berg-100 $8,568,958.27 $139,393.27 1,63%
HL Mountain Frame $3,365,069.27 $174.11 0,01%
Berg-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%
Damshorts för bergsvandring $260,304.09 $6,675.56 2.56%

I den tidigare resultatuppsättningen har vi sju nykomlingar på listan över Topp10Säljande Produkter och Mountain-200, Mountain-100 och HL Mountain Frame har flyttat sig till toppen av listan. I den föregående resultatuppsättningen var dessa tre värden insprängda

Detta kallas Deep Autoexists eftersom uppsättningen Top10SellingProducts utvärderas för att uppfylla frågans segmenteringsvillkor. Djup Autoexist innebär att alla uttryck kommer att utvärderas för att möta det djupast möjliga utrymmet efter att utsnittsuttrycken har tillämpats, undervalsuttrycken på axeln har applicerats och så vidare.

Men man kanske vill kunna göra analysen över Top10SellingProducts som motsvarar Preferred10Products, som i följande exempel:

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]  

Genererar följande resultatuppsättning:

Modellnamn + Mått Återförsäljares Försäljningsbelopp Rabattbelopp PCT-rabatt
Berg-200 $14,356,699.36 $19,012.71 0,13%
Berg-100 $8,568,958.27 $139,393.27 1,63%
HL Mountain Frame $3,365,069.27 $174.11 0,01%

I ovanstående resultat ger segmenteringen ett resultat som endast innehåller de produkter från Preferred10Products som ingår i gruppen [Mountain] i [Product]. [Produktlinje]; som förväntat eftersom Preferred10Products är ett konstant uttryck.

Denna resultatmängd förstås också som grunda autoexister. Det beror på att uttrycket utvärderas före skärningssatsen. I föregående exempel var uttrycket ett konstant uttryck i illustrationssyfte för att introducera konceptet.

Autoexists-beteende kan ändras på sessionsnivå med hjälp av egenskapen Autoexists anslutningssträng. Följande exempel börjar med att öppna en ny session och lägga till egenskapen Autoexists=3 i anslutningssträngen. Du måste öppna en ny anslutning för att kunna göra exemplet. När anslutningen har upprättats med inställningen Autoexist gäller den tills anslutningen är klar.

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]  

Följande resultatmängd visar nu Autoexists ytliga beteende.

Modellnamn + Mått Återförsäljares Försäljningsbelopp Rabattbelopp PCT-rabatt
Berg-200 $14,356,699.36 $19,012.71 0,13%
Berg-100 $8,568,958.27 $139,393.27 1,63%
HL Mountain Frame $3,365,069.27 $174.11 0,01%

Autoexists-beteende kan ändras med hjälp av parametern AUTOEXISTS=[1|2|3] i anslutningssträngen. Se XMLA-egenskaper som stöds (XMLA) och ConnectionString för parameteranvändning.

Examples

Följande exempel returnerar summan av Measures.[Order Quantity] medlemmen, aggregerad under de första åtta månaderna av kalenderåret 2003 som ingår i Date dimensionen, från Adventure Works-kuben .

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]  

För att förstå NON VISUAL är följande exempel en fråga från [Adventure Works] för att få [Återförsäljarförsäljningsbelopp] i en tabell där produktkategorierna är kolumnerna och återförsäljarens affärstyper är raderna. Observera att totalsummor anges för både produkter och återförsäljare.

Följande SELECT-sats:

select [Category].members on 0,  
[Business Type].members on 1  
from [Adventure Works]  
where [Measures].[Reseller Sales Amount]  

Ger följande resultat:

Företagstyp + Kategori Alla produkter Accessoarer Cyklar Kläder Komponenter
Alla återförsäljare $80,450,596.98 $571,297.93 $66,302,381.56 $1,777,840.84 $11,799,076.66
Specialcykelbutik $6,756,166.18 $65,125.48 $6,080,117.73 $252,933.91 $357,989.07
Mervärdesåterförsäljare $34,967,517.33 $175,002.81 $30,892,354.33 $592,385.71 $3,307,774.48
Warehouse $38,726,913.48 $331,169.64 $29,329,909.50 $932,521.23 $8,133,313.11

För att skapa en tabell med data endast för accessoar- och klädprodukterna, kan Value Added Reseller och Warehouse-återförsäljare, men med behållande av de totala totalerna, skrivas enligt följande med 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]  

Ger följande resultat:

Företagstyp + Kategori Alla produkter Accessoarer Kläder
Alla återförsäljare $80,450,596.98 $571,297.93 $1,777,840.84
Mervärdesåterförsäljare $34,967,517.33 $175,002.81 $592,385.71
Warehouse $38,726,913.48 $331,169.64 $932,521.23

Om du vill skapa en tabell som visuellt summerar kolumnerna men för radsummor ger den sanna summan av alla [Kategori], bör följande fråga utfärdas:

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]  

Observera att ICKE-VISUELL endast gäller för [Kategori].

Ovanstående fråga ger följande resultat:

Företagstyp + Kategori Alla produkter Accessoarer Kläder
Alla återförsäljare $73,694,430.80 $506,172.45 $1,524,906.93
Mervärdesåterförsäljare $34,967,517.33 $175,002.81 $592,385.71
Lager $38,726,913.48 $331,169.64 $932,521.23

Jämfört med föregående resultat kan du observera att raden [Alla återförsäljare] nu lägger till de visade värdena för [Value Added Reseller] och [Warehouse] men att kolumnen [Alla produkter] visar det totala värdet för alla produkter, inklusive de som inte visas.

Följande exempel visar hur man använder beräknade medlemmar i subselects för att filtrera på dem. För att kunna återskapa detta prov måste anslutningen upprättas med hjälp av reťazec pripojenia-parametern subqueries=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]  
)  

Ovanstående fråga ger följande resultat:

Återförsäljares Försäljningsbelopp Återförsäljarens totala produktkostnad Återförsäljarens bruttovinst Återförsäljarens bruttovinstmarginal
$80,450,596.98 $79 980 114,38 470 482,60 dollar 0,58%