Generate (MDX)
Applique un jeu à chaque membre d'un autre jeu, puis effectue la jointure par union des jeux résultants. Cette fonction retourne également une chaîne concaténée créée par l'évaluation d'une expression de chaîne sur un jeu.
Syntaxe
Set expression syntax
Generate( Set_Expression1 , ( Set_Expression2 [ , ALL ] ) )
String expression syntax
Generate( Set_Expression1 , ( String_Expression [ ,Delimiter ] ) )
Arguments
Set_Expression1
Expression MDX (Multidimensional Expressions) valide qui retourne un jeu.Set_Expression2
Expression MDX (Multidimensional Expressions) valide qui retourne un jeu.String_Expression
Expression de chaîne valide qui correspond généralement au nom du membre actuel (CurrentMember.Name) de chaque tuple dans le jeu spécifié.Delimiter
Délimiteur valide exprimé en tant qu'expression de chaîne.
Notes
Si un deuxième jeu est spécifié, la fonction Generate retourne un jeu généré en appliquant les tuples du deuxième jeu à chaque tuple du premier jeu, puis en associant les jeux obtenus par union. Si ALL est spécifié, la fonction conserve les doublons dans le jeu résultant.
Si une expression de chaîne est spécifiée, la fonction Generate retourne une chaîne générée en évaluant l'expression de chaîne spécifiée par rapport à chaque tuple du premier jeu, puis en concaténant les résultats. Vous pouvez éventuellement délimiter la chaîne en séparant chaque résultat dans la chaîne concaténée obtenue.
Exemples
Jeu
Dans l'exemple suivant, la requête retourne un jeu qui contient le montant des ventes sur Internet de Mesure quatre fois, parce qu'il y a quatre membres dans le jeu [Date].[Calendar Year].[Calendar Year].MEMBERS :
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}, ALL)
ON 0
FROM [Adventure Works]
La suppression de ALL modifie la requête afin que le Montant des ventes sur Internet soit retourné une fois uniquement :
SELECT
GENERATE( [Date].[Calendar Year].[Calendar Year].MEMBERS
, {[Measures].[Internet Sales Amount]}
ON 0
FROM [Adventure Works]
L'utilisation pratique la plus commune de Generate consiste à évaluer une expression d'ensemble complexe, telle que TopCount, sur un jeu de membres. L'exemple de requête suivant affiche les 10 premiers produits pour chaque année civile sur les lignes :
SELECT
{[Measures].[Internet Sales Amount]}
ON 0,
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS
, TOPCOUNT(
[Date].[Calendar Year].CURRENTMEMBER
[Product].[Product].[Product].MEMBERS
,10, [Measures].[Internet Sales Amount]))
ON 1
FROM [Adventure Works]
Notez qu'un nombre différent des 10 premiers est affiché pour chaque année, et que l'utilisation de Generate est la seule méthode permettant d'obtenir ce résultat. La simple jonction croisée des années civiles et du jeu des 10 premiers produits affichent les 10 premiers produits pour toutes les périodes, pour chaque année, comme illustré dans l'exemple suivant :
SELECT
{[Measures].[Internet Sales Amount]}
ON 0,
[Date].[Calendar Year].[Calendar Year].MEMBERS
TOPCOUNT(
[Product].[Product].[Product].MEMBERS
,10, [Measures].[Internet Sales Amount])
ON 1
FROM [Adventure Works]
Chaîne
L'exemple suivant illustre l'utilisation de Generate pour retourner une chaîne :
WITH
MEMBER MEASURES.GENERATESTRINGDEMO AS
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Date].[Calendar Year].CURRENTMEMBER.NAME)
MEMBER MEASURES.GENERATEDELIMITEDSTRINGDEMO AS
GENERATE(
[Date].[Calendar Year].[Calendar Year].MEMBERS,
[Date].[Calendar Year].CURRENTMEMBER.NAME, " AND ")
SELECT
{MEASURES.GENERATESTRINGDEMO, MEASURES.GENERATEDELIMITEDSTRINGDEMO}
ON 0
FROM [Adventure Works]
[!REMARQUE]
Cette forme de la fonction Generate peut être utile lors du débogage de calculs, car elle vous permet de retourner une chaîne qui affiche les noms de tous les membres dans un jeu. Cette forme peut être plus facile à lire que la représentation MDX stricte d'un jeu que retourne la fonction SetToStr (MDX).