MDX: агрегаты по набору

То, чего я пытаюсь добиться, выглядит очень просто, но я не могу заставить его работать. Мои факты - это заказы, у которых есть дата, и у меня есть типичное измерение времени с уровнями «Месяц» и «Год».

Я хотел бы получить вывод, в котором указано количество заказов за последние 6 месяцев и их общее количество, например:

Oct 2009   20
Nov 2009   30
Dec 2009   25
Jan 2009   15
Feb 2010   45
Mar 2010    5
Total     140  

Я могу создать набор с участниками с октября 2009 г. по март 2010 г., и мне удается получить эту часть желаемого результата:

Oct 2009   20
Nov 2009   30
Dec 2009   25
Jan 2009   15
Feb 2010   45
Mar 2010    5

Просто я не могу получить общую строку.


mdx
person TorstenS    schedule 17.03.2010    source источник


Ответы (2)


Вы можете добиться этого, добавив элемент ALL в набор, а затем обернув все это в функцию VisualTotals().

SELECT
  ... on COLUMNS,
  VISUALTOTALS (
       {[Month].[Month].[Oct 2009]:[Month].[Month].[Mar 2010] 
       , [Month].[Month].[All] } 
  ) ON ROWS
FROM <cube>
person Darren Gosbell    schedule 18.03.2010
comment
Привет Даррен! Извините, но это не работает для меня. И что меня больше всего смущает: попробуйте следующие два запроса 1. выберите {[Measures].[Sales Count]} ON COLUMNS, НЕ ПУСТОЙ VisualTotals(Hierarchize({[Customers].[All Customers].[USA].[ИЛИ ].Children, [Клиенты].[Все клиенты].[США].[ИЛИ].[Олбани].Дети}), *) В СТРОКАХ из [Продажи] 2. выберите {[Показатели].[Число продаж]} В СТОЛБЦАХ, НЕПУСТОЙ Иерархизировать({[Клиенты].[Все клиенты].[США].[ИЛИ].Дети, [Клиенты].[Все клиенты].[США].[ИЛИ].[Олбани].Дети} ) ON ROWS from [Sales] Вы получите одинаковые результаты с VISUALTOTALS и без них. - person TorstenS; 18.03.2010
comment
Это потому, что вы показываете всех дочерних элементов видимых членов. Поэтому на оси строк нет сумм, относящихся к невидимым элементам. Если вы отключите вызов .children после [Customers].[All Customers].[USA].[OR].Children — вы увидите, что первый запрос изменится и будет отображать только сумму для [Albany] в [OR ] уровень. - person Darren Gosbell; 19.03.2010

Вот одно из возможных решений для демо-куба Adventure Works DW. Запрос выбирает последние 6 счетчиков заказов и добавляет сумму к измерению даты:

WITH MEMBER [Date].[Calendar].[Last 6 Mth Order Count] AS 
aggregate( 
ClosingPeriod([Date].[Calendar].[Month], [Date].[Calendar].[All Periods]).Lag(6)
: ClosingPeriod([Date].[Calendar].[Month], [Date].[Calendar].[All Periods])

)
SELECT  {[Measures].[Order Count]} ON COLUMNS
, {ClosingPeriod([Date].[Calendar].[Month], [Date].[Calendar].[All Periods]).Lag(6)
: ClosingPeriod([Date].[Calendar].[Month], [Date].[Calendar].[All Periods])
,[Date].[Calendar].[Last 6 Mth Order Count]} 
ON ROWS
FROM [Adventure Works]
person user296442    schedule 18.03.2010