Condividi tramite


Esiste automaticamente

Si applica a: SQL Server Analysis Services Azure Analysis Services Fabric/Power BI Premium

Il concetto di autoexists limita lo spazio del cubo a quelle celle effettivamente presenti nel cubo in contrapposizione a quelle che potrebbero esistere in seguito alla creazione di tutte le possibili combinazioni di membri della gerarchia di attributi dalla stessa gerarchia. Ciò è dovuto al fatto che i membri di una gerarchia di attributi non possono esistere con membri di un'altra gerarchia di attributi nella stessa dimensione. Quando due o più gerarchie di attributi della stessa dimensione vengono utilizzate in un'istruzione SELECT, Analysis Services valuta le espressioni degli attributi per assicurarsi che i membri di tali attributi siano correttamente limitati per soddisfare i criteri di tutti gli altri attributi.

Si supponga, ad esempio, di usare gli attributi della dimensione Geography. Se si dispone di un'espressione che restituisce tutti i membri dall'attributo City e un'altra espressione che limita i membri dall'attributo Country a tutti i paesi/aree geografiche in Europa, i membri della città saranno limitati solo a quelle città che appartengono a paesi/aree geografiche in Europa. Ciò è dovuto alla caratteristica autoexists di Analysis Services. Autoexists si applica solo agli attributi della stessa dimensione perché tenta di impedire che i record di dimensione esclusi in un'espressione di attributo vengano inclusi dalle altre espressioni di attributo. Autoexists può anche essere interpretato come l'intersezione risultante delle diverse espressioni di attributi sulle righe della dimensione.

Esistenza di celle

Le celle seguenti esistono sempre:

  • Il membro (All) di ogni gerarchia, quando incrociato con membri di altre gerarchie nella stessa dimensione.

  • Membri calcolati quando vengono incrociati con i relativi elementi di pari livello non calcolati o con i genitori o i discendenti degli elementi di pari livello non calcolati.

Fornire celle non esistenti

Una cella non esistente è una cella fornita dal sistema come risposta a una query o a un calcolo che richiede una cella che non esiste nel cubo. Ad esempio, se si dispone di un cubo con una gerarchia di attributi City e una gerarchia di attributi Country che appartengono alla dimensione Geography e una misura Internet Sales Amount, lo spazio di questo cubo include solo i membri esistenti tra loro. Ad esempio, se la gerarchia dell'attributo City include le città new york, Londra, Parigi, Tokyo e Melbourne; e la gerarchia dell'attributo Country include i paesi/aree Stati Uniti, Regno Unito, Francia, Giappone e Australia; quindi lo spazio del cubo non include lo spazio (cella) all'intersezione di Parigi e Stati Uniti.

Quando si eseguono query su celle che non esistono, le celle non esistenti restituiscono valori Null; ovvero non possono contenere calcoli e non è possibile definire un calcolo che scrive in questo spazio. Ad esempio, l'istruzione seguente include celle che non esistono.

SELECT [Customer].[Gender].[Gender].Members ON COLUMNS,  
{[Customer].[Customer].[Aaron A. Allen]  
   ,[Customer].[Customer].[Abigail Clark]} ON ROWS   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

Annotazioni

Questa query usa la funzione Members (Set) (MDX) per restituire il set di membri della gerarchia degli attributi Gender sull'asse delle colonne e incrocia questo set con il set specificato di membri della gerarchia di attributi Customer sull'asse delle righe.

Quando si esegue la query precedente, la cella all'intersezione di Aaron A. Allen e Female visualizza un valore Null. Analogamente, la cella all'intersezione di Abigail Clark e Male visualizza un valore Null. Queste celle non esistono e non possono contenere un valore, ma le celle che non esistono possono essere visualizzate nel risultato restituito da una query.

Quando si usa la funzione Crossjoin (MDX) per restituire il prodotto incrociato dei membri della gerarchia degli attributi dalle gerarchie di attributi nella stessa dimensione, l'esistenza automatica limita tali tuple restituite al set di tuple effettivamente esistenti, anziché restituire un prodotto cartesiano completo. Ad esempio, eseguire ed esaminare i risultati dall'esecuzione della query seguente.

SELECT CROSSJOIN  
   (  
      {[Customer].[Country].[United States]},  
         [Customer].[State-Province].Members  
  ) ON 0   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

Annotazioni

Si noti che 0 viene usato per designare l'asse delle colonne, ovvero la sintassi abbreviata per axis(0), ovvero l'asse delle colonne.

La query precedente restituisce solo celle per i membri di ogni gerarchia di attributi nella query esistente tra loro. La query precedente può essere scritta anche usando la nuova variante * della funzione * (Crossjoin) (MDX).

SELECT   
   [Customer].[Country].[United States] *   
      [Customer].[State-Province].Members  
ON 0   
FROM [Adventure Works]  
WHERE Measures.[Internet Sales Amount]  

La query precedente può essere scritta anche nel modo seguente:

SELECT [Customer].[State-Province].Members  
ON 0   
FROM [Adventure Works]  
WHERE (Measures.[Internet Sales Amount],  
   [Customer].[Country].[United States])  

I valori delle celle restituiti saranno identici, anche se i metadati nel set di risultati saranno diversi. Ad esempio, con la query precedente, la gerarchia Country è stata spostata nell'asse del filtro dei dati (nella clausola WHERE) e pertanto non viene visualizzata in modo esplicito nel set di risultati.

Ognuna di queste tre query precedenti illustra l'effetto del comportamento dell'esistenza automatica in SQL Server SQL Server Analysis Services.

Autoexists profondi e superficiali

Gli esisti automatici possono essere applicati alle espressioni come Deep o Shallow. Deep Autoexists indica che tutte le espressioni verranno valutate per raggiungere la massima profondità possibile dopo l'applicazione delle espressioni slicer, delle espressioni di sub select sull'asse e così via. Autoexists superficiale indica che le espressioni esterne vengono valutate prima dell'espressione corrente e tali risultati vengono passati all'espressione corrente. L'impostazione predefinita è deep autoexists.

Lo scenario e i campioni seguenti aiuteranno a illustrare i diversi tipi di Autoexists. Negli esempi seguenti verranno creati due set: uno come espressione calcolata e l'altro come espressione costante.

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

Il set di risultati ottenuto è:

Importo Vendite Rivenditore Importo dello sconto Sconto PCT
Mountain-200 $ 14.356.699,36 $ 19.012.71 0.13%
Strada-250 $ 9,377,457,68 $ 4.032,47 0,04%
Mountain-100 $ 8.568.958,27 $ 139,393,27 1.63%
Road-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%
Road-150 $ 2.363.805,16 $ 0,00 0,00%
Touring-3000 $ 2.046.508,26 $ 79.582,15 3.89%

Il set di prodotti ottenuto sembra essere uguale a Preferred10Products; quindi, verificando il set 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]

In base ai risultati seguenti, entrambi i set (Top10SellingProducts, Preferred10Products) sono gli stessi

Importo Vendite Rivenditore Importo dello sconto Sconto PCT
Mountain-200 $ 14.356.699,36 $ 19.012.71 0.13%
Strada-250 $ 9,377,457,68 $ 4.032,47 0,04%
Mountain-100 $ 8.568.958,27 $ 139,393,27 1.63%
Road-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%
Road-150 $ 2.363.805,16 $ 0,00 0,00%
Touring-3000 $ 2.046.508,26 $ 79.582,15 3.89%

L'esempio seguente illustra il concetto di Autoexists avanzato. Nell'esempio, stiamo filtrando Top10SellingProducts per l'attributo [Product].[Product Line] del gruppo [Mountain]. Si noti che entrambi gli attributi (slicer e asse) appartengono alla stessa dimensione, [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]

Produce il set di risultati seguente:

Importo Vendite Rivenditore Importo dello sconto Sconto 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%
Pantaloncini di montagna donna $ 260,304,09 $ 6,675,56 2.56%

Nell'insieme di risultati precedente abbiamo sette nuovi arrivati nell'elenco Top10SellingProducts, e Mountain-200, Mountain-100 e HL Mountain Frame sono saliti al vertice dell'elenco. Nel set di risultati precedente questi tre valori sono stati interspersi.

Questo metodo viene chiamato Deep Autoexists, perché il set Top10SellingProducts viene valutato in modo da soddisfare le condizioni di sezionamento della query. Deep Autoexists indica che tutte le espressioni verranno valutate per soddisfare lo spazio più profondo possibile dopo l'applicazione delle espressioni del slicer, le espressioni di sotto-selezione nell'asse, e così via.

Tuttavia, si potrebbe voler eseguire l'analisi su Top10SellingProducts come equivalente a Preferred10Products, come nell'esempio seguente:

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]

Produce il set di risultati seguente:

Importo Vendite Rivenditore Importo dello sconto Sconto 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%

Nei risultati precedenti, il sezionamento restituisce un risultato che contiene solo i prodotti di Preferred10Products che fanno parte del gruppo [Mountain] in [Product]. [Product Line]; come previsto, perché Preferred10Products è un'espressione costante.

Questo set di risultati è compreso anche come Autoexists superficiale. Ciò è dovuto al fatto che l'espressione viene valutata prima della clausola di sezionamento. Nell'esempio precedente, l'espressione era un'espressione costante a scopo illustrativo per introdurre il concetto.

Il comportamento autoexists può essere modificato a livello di sessione usando la proprietà della stringa di connessione Autoexists . L'esempio seguente inizia aprendo una nuova sessione e aggiungendo la proprietà Autoexists=3 alla stringa di connessione. Per eseguire l'esempio, è necessario aprire una nuova connessione. Una volta stabilita la connessione con l'impostazione Autoexist, rimarrà attiva fino al termine della connessione.

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]

Il set di risultati seguente mostra ora il comportamento superficiale di Autoexists.

Importo Vendite Rivenditore Importo dello sconto Sconto 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%

Il comportamento autoexists può essere modificato usando il parametro AUTOEXISTS=[1|2|3] nella stringa di connessione; vedere Proprietà XMLA supportate (XMLA) e ConnectionString per l'utilizzo dei parametri.

Vedere anche

Concetti chiave in MDX (Analysis Services)
Spazio cubo
Tuple
Utilizzo di membri, tuple e set (MDX)
Totali visivi e totali non visivi
Guida di riferimento al linguaggio MDX (MDX)
Informazioni di riferimento su MDX (Multidimensional Expressions)