La fonction Exists en MDX

Souvent, vous souhaitez limiter un ensemble par un autre en utilisant la fonctionnalité auto-exists, mais sans les membres du second ensemble présents dans les résultats, dans ces situations, la fonction Exists peut être employée.

Exists ({Set1}, {Set2})

La fonction Exists emploie auto-exists pour limiter les membres du premier ensemble à ceux observés en combinaison avec les membres du second basé sur des relations dans leur dimension commune. Bien que le second ensemble exerce une influence sur l’appartenance à un ensemble, l’ensemble renvoyé ne contient que des membres du premier ensemble.

Prenons l’exemple suivant :

SELECT
   {
      ([Date].[Calendar].[CY 2002]),
      ([Date].[Calendar].[CY 2003]),
      ([Date].[Calendar].[CY 2004])
   } *
   {
      ([Measures].[Reseller Sales Amount]),
      ([Measures].[Internet Sales Amount])
   }
   ON COLUMNS,
   {[Product].[Category].[Category].Members} 
      * {[Product].[Color].[Color].Members}
   ON ROWS
FROM [Step-by-Step]
WHERE ([Geography].[Country].[United States], [Product].[Subcategory].[Mountain Bikes])
;

Examinons les résultats :

2016-12-25_18h12_25

Lorsque le membre de la SubCategory Mountain Bikes est affecté à la clause where, il limite l’ensemble de l’axe des lignes aux combinaisons de Category et de Color associées au membre Mountain bikes. Elle influence également les tuples produits de tel sorte que chaque cellule retournée est associée au membre de la SubCategory Mountain Bike.

Pour illustrer ça, considérer la première cellule dans le jeu de cellules, qui a la valeur $3,927,415.56.

La requête produit le tuple suivant pour accéder à cette cellule :

(
[Date].[Calendar].[CY 2002],
[Measures].[Reseller Sales Amount],
[Product].[Category].[Bikes],
[Product].[Color].[Black],
[Geography].[Country].[United States],
[Product].[SubCategory].[Mountain Bikes]
)

En utilisant la fonction Exists, vous pouvez utiliser le membre Mountain Bikes pour limiter l’ensemble des membres Category et Color de l’axe des lignes à ceux associés au membre Mountain Bikes mais sans la présence du membre Mountain Bikes dans les tuples formés par la requête.

Maintenant, modifiant la requête pour limiter l’ensemble de l’axe des lignes aux combinaisons de membres associées au membre de la SubCategory Mountain Bikes, mais sans limiter les valeurs retournées aux Mountain Bikes.

SELECT
   {
      ([Date].[Calendar].[CY 2002]),
      ([Date].[Calendar].[CY 2003]),
      ([Date].[Calendar].[CY 2004])
   } *
   {
      ([Measures].[Reseller Sales Amount]),
      ([Measures].[Internet Sales Amount])
   }
   ON COLUMNS,
   EXISTS(
      {[Product].[Category].[Category].Members} 
         * {[Product].[Color].[Color].Members},
      {([Product].[Subcategory].[Mountain Bikes])}
      )
   ON ROWS
FROM [Step-by-Step]
WHERE [Geography].[Country].[United States]
;

Exécutons la requête :

2
L’ensemble de cellules a la même structure que précédemment, mais notez que les valeurs ont changé. La première cellule de l’ensemble de cellules a maintenant une valeur de $6,314,977.53 alors qu’elle avait une valeur de $3,927,415.56 dans la requête précédente. C’est parce que le tuple associé à la cellule ne contient plus le membre de la SubCategory Mountain Bikes.

(
[Date].[Calendar].[CY 2002],
[Measures].[Reseller Sales Amount],
[Product].[Category].[Bikes],
[Product].[Color].[Black],
[Geography].[Country].[United States]
)

Vous pouvez vérifier cela en utilisant le tuple précédent pour extraire cette cellule du cube.

La requête suivante permet de récupérer la cellule en utilisant le tuple identifié à l’étape précédente.

SELECT
FROM [Step-by-Step]
WHERE (
   [Date].[Calendar].[CY 2002],
   [Measures].[Reseller Sales Amount], 
   [Product].[Category].[Bikes],
   [Product].[Color].[Black],
   [Geography].[Country].[United States]
   )
;

Après l’exécution de la requête, on voit que la valeur correspond à celle de la première cellule de l’ensemble de cellules de la requête précédente.

3

 

Leave a comment

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.