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