J'ai cette requête MDX (en fonction de la base de données exemple Foodmart):MDX: Comment transformer des tuples avec plusieurs membres en tuples avec un seul membre?
SELECT
{[Measures].[Profit]} ON COLUMNS,
{CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)} ON ROWS
FROM [Sales]
Cela génère un résultat comme celui-ci:
[Product].[Product Family] [Time].[Year] [Time].[Quarter] [Measures].[Profit]
--------------------------+-------------+----------------+-------------------
Drink |1997 |Q3 |7203.3445
Drink |1997 |Q4 |8005.2245
Food |1997 |Q1 |60814.47140000001
Food |1997 |Q2 |57323.3736
Ce que je voudrais avoir, est la suivante:
[Product Family],[Year],[Quarter] [Measures].[Profit]
---------------------------------+-------------------
Drink, 1997, Q3 |7203.3445
Drink, 1997, Q4 |8005.2245
Food, 1997, Q1 |60814.47140000001
Food, 1997, Q2 |57323.3736
Je sais que je peux utiliser SetToStr()
pour sérialiser les en-têtes de ligne à une chaîne. Donc maintenant je voudrais utiliser ce résultat comme rowheader: en tournant chaque tuple des tuples multi-membres d'origine sur l'axe ROW dans un tuple avec un seul membre, qui a une valeur est une concaténation des noms de membres d'origine. Donc, en gros ceci:
SELECT
{[Measures].[Profit]} ON COLUMNS,
SetToStr(
{CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)}
) ON ROWS
FROM [Sales]
... mais bien sûr, cela ne fonctionne pas, parce que SetToStr()
retourne une chaîne, pas un ensemble. J'ai donc besoin d'un moyen de «renvoyer» cette chaîne à un ensemble, mais avec un seul membre.
Est-ce possible dans le standard MDX? Comment? Je peux retravailler le résultat après l'avoir reçu mais je pourrais vraiment utiliser une solution MDX pure pour résoudre ce problème.