У меня есть этот MDX запрос (на основе образца базы данных Foodmart):MDX: Как превратить кортежи с несколькими членами в кортежи с одним членом?
SELECT
{[Measures].[Profit]} ON COLUMNS,
{CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)} ON ROWS
FROM [Sales]
Это создает результат, как этот:
[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
То, что я хотел бы иметь, это:
[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
Я знаю, что могу использовать SetToStr()
для сериализации заголовков строк в одну строку. Итак, теперь я хотел бы использовать этот результат в качестве rowheader: в основном, превращая каждый кортеж из исходных многочастных кортежей на оси ROW в кортеж с одним членом, значение who'se представляет собой объединение имен исходных членов. Так что в основном это:
SELECT
{[Measures].[Profit]} ON COLUMNS,
SetToStr(
{CROSSJOIN([Product].[All Products].Children, [Time].[1997].Children)}
) ON ROWS
FROM [Sales]
... но, конечно, это не работает, потому что SetToStr()
возвращает строку, а не множество. Поэтому мне нужно каким-то образом «перевести» эту строку обратно в набор, но с одним членом.
Возможно ли это в стандартном MDX? Как? Я могу переработать набор результатов после его получения, но я мог бы использовать чистое решение MDX для решения этой проблемы.