Partager via


Existe automatiquement

Le concept d'autoexistence limite l’espace du cube aux cellules qui existent réellement dans le cube, par opposition à celles qui pourraient exister suite à la combinaison de tous les membres possibles de la hiérarchie d’attributs de la même hiérarchie. Cela est dû au fait que les membres d’une hiérarchie d’attributs ne peuvent pas exister avec les membres d’une autre hiérarchie d’attributs dans la même dimension. Lorsque deux hiérarchies d’attributs ou plus de la même dimension sont utilisées dans une instruction SELECT, Analysis Services évalue les expressions des attributs pour s’assurer que les membres de ces attributs sont correctement limités pour répondre aux critères de tous les autres attributs.

Par exemple, supposons que vous travaillez avec des attributs de la dimension Geography. Si vous avez une expression qui renvoie tous les membres de l’attribut City et une autre expression qui limite les membres de l’attribut Country à tous les pays/régions d’Europe, cela entraîne la limite des membres de la ville aux seules villes qui appartiennent à des pays/régions d’Europe. Cela est dû à la fonctionnalité d'auto-existence d’Analysis Services. La fonctionnalité Autoexists s’applique uniquement aux attributs de la même dimension, car elle cherche à empêcher que les enregistrements de dimension exclus dans une expression d’attribut soient inclus par d’autres expressions d’attribut de la même dimension. Les auto-existences peuvent également être comprises comme l'intersection résultante des différentes expressions d'attributs sur les lignes de dimension.

Existence de cellules

Les cellules suivantes existent toujours :

  • Membre (All) de chaque hiérarchie, lorsqu’il est croisé avec des membres d’autres hiérarchies dans la même dimension.

  • Membres calculés lorsqu’ils sont croisés avec leurs frères non calculés, ou avec les parents ou descendants de leurs frères non calculés.

Fourniture de cellules non existantes

Une cellule non existante est une cellule fournie par le système comme réponse à une requête ou un calcul qui demande une cellule qui n’existe pas dans le cube. Par exemple, si vous avez un cube qui a une hiérarchie d’attributs City et une hiérarchie d’attributs Country appartenant à la dimension Geography et une mesure Internet Sales Amount, l’espace de ce cube inclut uniquement les membres qui existent entre eux. Par exemple, si la hiérarchie d’attributs City inclut les villes de New York, Londres, Paris, Tokyo et Melbourne ; et la hiérarchie des attributs Country comprend les pays États-Unis, Royaume-Uni, France, Japon et Australie ; puis l’espace du cube n’inclut pas l’espace (cellule) à l’intersection de Paris et des États-Unis.

Lors de l’interrogation de cellules qui n’existent pas, les cellules non existantes retournent des valeurs Null ; autrement dit, ils ne peuvent pas contenir de calculs et vous ne pouvez pas définir un calcul qui écrit dans cet espace. Par exemple, l’instruction suivante inclut des cellules qui n’existent pas.

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]  

Remarque

Cette requête utilise la fonction Members (Set) (MDX) pour renvoyer l'ensemble des membres de la hiérarchie d'attributs du genre sur l’axe des colonnes et croise cet ensemble avec l’ensemble spécifié de membres de la hiérarchie d’attributs du client sur l’axe des lignes.

Lorsque vous exécutez la requête précédente, la cellule située à l’intersection d’Aaron A. Allen et de Femelle affiche une valeur Null. De même, la cellule à l’intersection d’Abigail Clark et Male affiche une valeur Null. Ces cellules n’existent pas et ne peuvent pas contenir de valeur, mais les cellules qui n’existent pas peuvent apparaître dans le résultat retourné par une requête.

Lorsque vous utilisez la fonction Crossjoin (MDX) pour renvoyer le produit croisé des membres des hiérarchies d'attributs dans la même dimension, la fonction d'existence automatique limite ces tuples à l'ensemble des tuples qui existent réellement, plutôt que de retourner un produit cartésien complet. Par exemple, exécutez et examinez les résultats de l’exécution de la requête suivante.

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

Remarque

Notez que 0 est utilisé pour désigner l’axe des colonnes, qui est abrégé pour l’axe(0), qui est l’axe des colonnes.

La requête précédente retourne uniquement les cellules des membres de chaque hiérarchie d’attributs dans la requête qui existent entre eux. La requête précédente peut également être écrite à l’aide de la nouvelle variante * de la fonction Crossjoin (MDX).

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

La requête précédente peut également être écrite de la manière suivante :

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

Les valeurs de cellules retournées sont identiques, bien que les métadonnées du jeu de résultats soient différentes. Par exemple, avec la requête précédente, la hiérarchie Country a été déplacée vers l’axe du segment (dans la clause WHERE) et n’apparaît donc pas explicitement dans le jeu de résultats.

Chacune de ces trois requêtes précédentes illustre l’effet du comportement d’existence automatique dans SQL Server Analysis Services.

Autoexistes profondes et superficielles

Les "Autoexists" peuvent être appliqués aux expressions comme "Deep" ou "Shallow". Deep Autoexists signifie que toutes les expressions seront évaluées pour atteindre la plus grande profondeur de dimension possible après avoir appliqué les expressions de filtrage, les expressions de sous-sélection dans l’axe, et ainsi de suite. Shallow Autoexists signifie que les expressions externes sont évaluées avant l’expression actuelle et que ces résultats sont passés à l’expression actuelle. Le paramètre par défaut est "deep autoexists".

Le scénario et les exemples suivants aideront à illustrer les différents types d’Autoexistss. Dans les exemples suivants, deux ensembles sont créés : l’un en tant qu’expression calculée et l’autre comme expression constante.

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

Le jeu de résultats obtenu est :

Montant des Ventes du Revendeur Montant de remise Remise de PCT
Montagne-200 14 356 699,36 $ 19 012,71 $ 0.13%
Route 250 9 377 457,68 $ 4 032,47 $ 0,04%
Montagne-100 8 568 958,27 $ 139 393,27 $ 1.63%
Route 650 7 442 141,81 $ 39 698,30 $ 0,53%
Touring-1000 6 723 794,29 $ 166 144,17 $ 2.47%
Route-550-W 3 668 383,88 $ 1 901,97 $ 0,05%
Route-350-W 3 665 932,31 $ 20 946,50 $ 0,57%
HL Mountain Frame 3 365 069,27 $ 174,11 $ 0.01%
Route 150 2 363 805,16 $ 0,00 $ 0,00%
Touring-3000 2 046 508,26 $ 79 582,15 $ 3.89%

L'ensemble obtenu de produits semble être identique à Preferred10Products, donc vérification de l'ensemble 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]

Conformément aux résultats suivants, les deux ensembles (Top10SellingProducts, Preferred10Products) sont les mêmes.

Montant des ventes du revendeur Montant de remise Remise DE PCT
Montagne-200 14 356 699,36 $ 19 012,71 $ 0.13%
Route 250 9 377 457,68 $ 4 032,47 $ 0,04%
Montagne-100 8 568 958,27 $ 139 393,27 $ 1.63%
Route 650 7 442 141,81 $ 39 698,30 $ 0,53%
Touring-1000 6 723 794,29 $ 166 144,17 $ 2.47%
Route-550-W 3 668 383,88 $ 1 901,97 $ 0,05%
Route-350-W 3 665 932,31 $ 20 946,50 $ 0,57%
HL Mountain Frame 3 365 069,27 $ 174,11 $ 0.01%
Route 150 2 363 805,16 $ 0,00 $ 0,00%
Touring-3000 2 046 508,26 $ 79 582,15 $ 3.89%

L'exemple suivant illustrera le concept des Autoexists en profondeur. Dans cet exemple, nous filtrons les produits du Top 10 des meilleures ventes par l'attribut [Ligne de produit] pour ceux qui se trouvent dans le groupe [Mountain]. Notez que les deux attributs (segment et axe) appartiennent à la même 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]

Produit le jeu de résultats suivant :

Montant des ventes du revendeur Montant de remise Remise DE PCT
Montagne-200 14 356 699,36 $ 19 012,71 $ 0.13%
Montagne-100 8 568 958,27 $ 139 393,27 $ 1.63%
HL Mountain Frame 3 365 069,27 $ 174,11 $ 0.01%
Montagne-300 1 907 249,38 $ 876,95 $ 0,05%
Montagne-500 1 067 327,31 $ 17 266,09 $ 1.62%
Montagne-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%
Shorts de montagne féminins 260 304,09 $ 6 675,56 $ 2.56%

Dans le jeu de résultats ci-dessus, nous avons sept nouveaux arrivants dans la liste des Top10SellingProducts et Mountain-200, Mountain-100 et HL Mountain Frame ont été déplacés vers le haut de la liste. Dans le jeu de résultats précédent, ces trois valeurs ont été entrelacées.

Cela s'appelle Deep Autoexists, parce que l'ensemble Top10SellingProducts est évalué afin de satisfaire les conditions de découpage de la requête. L'option "Deep Autoexists" signifie que toutes les expressions seront évaluées pour atteindre le niveau d'espace le plus profond possible après l'application des expressions de découpe, des expressions de sous-sélection sur l'axe, et ainsi de suite.

Toutefois, on peut vouloir faire l’analyse sur top10SellingProducts en tant qu’équivalent à Preferred10Products, comme illustré dans l’exemple suivant :

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]

Produit le jeu de résultats suivant :

Montant des Ventes des Revendeurs Montant de remise Remise DE PCT
Montagne-200 14 356 699,36 $ 19 012,71 $ 0.13%
Montagne-100 8 568 958,27 $ 139 393,27 $ 1.63%
HL Mountain Frame 3 365 069,27 $ 174,11 $ 0.01%

Dans les résultats ci-dessus, le découpage donne un résultat qui contient uniquement les produits de Preferred10Products qui font partie du groupe [Mountain] dans [Product]. [Ligne de produit] ; comme prévu, car Preferred10Products est une expression constante.

Ce jeu de résultats est également compris comme des autoexistences superficielles. Cela est dû au fait que l’expression est évaluée avant la clause de découpage. Dans l’exemple précédent, l’expression était une expression constante à des fins d’illustration afin d’introduire le concept.

Le comportement d'autoexistence peut être modifié au niveau de la session à l’aide de la propriété de la chaîne de connexion Autoexists. L’exemple suivant commence par ouvrir une nouvelle session et ajouter la propriété Autoexists=3 à la chaîne de connexion. Vous devez ouvrir une nouvelle connexion pour effectuer l’exemple. Une fois la connexion établie avec le paramètre Autoexist, elle restera en vigueur jusqu'à ce que cette connexion soit terminée.

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]

Le jeu de résultats suivant montre maintenant le comportement superficiel d'Autoexists.

Reseller Sales Amount Montant de remise Remise DE PCT
Montagne-200 14 356 699,36 $ 19 012,71 $ 0.13%
Montagne-100 8 568 958,27 $ 139 393,27 $ 1.63%
HL Mountain Frame 3 365 069,27 $ 174,11 $ 0.01%

Le comportement Autoexists peut être modifié à l’aide du paramètre AUTOEXISTS=[1|2|3] dans la chaîne de connexion ; consultez Les propriétés XMLA prises en charge (XMLA) et ConnectionString pour l'utilisation du paramètre.

Voir aussi

Concepts clés dans MDX (Analysis Services)
Espace cube
Tuples
Travail avec les membres, les tuples et les ensembles (MDX)
Totaux visuels et totaux non visuels
Référence du langage MDX (MDX)
Informations de référence sur les expressions multidimensionnelles (MDX)