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é.
Délimiteur
Délimiteur valide exprimé en tant qu'expression de chaîne.
Remarques
Si un deuxième jeu est spécifié, la fonction Generate retourne un ensemble généré en appliquant les tuples du deuxième jeu à chaque tuple du premier jeu, puis en joignant les ensembles résultants par union. Si ALL est spécifié, la fonction conserve les doublons dans l’ensemble 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
Définissez
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 courante de Generate consiste à évaluer une expression d’ensemble complexe, telle que TopCount, sur un ensemble 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 top 10 différent s’affiche pour chaque année, et que l’utilisation de Générer est la seule façon 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]
String
L’exemple suivant montre l’utilisation de Générer pour renvoyer 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]
Notes
Cette forme de la fonction Generate peut être utile lors du débogage de calculs, car elle vous permet de retourner une chaîne affichant les noms de tous les membres d’un ensemble. Cela peut être plus facile à lire que la représentation MDX stricte d’un ensemble que la fonction SetToStr (MDX) retourne.