Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 SSAS 2012. MDX. Элементы, по которым происходит Aggregate  [new]
grAlex
Member

Откуда:
Сообщений: 102
Привет все.

Есть запрос
[CSV][/CSV]
WITH
  SET [AC] as {[Customer].[Country].&[Australia], [Customer].[Country].&[Canada]}
  SET [FG] as {[Customer].[Country].&[France], [Customer].[Country].&[Germany]}
  MEMBER [Customer].[Country].[AC] as Aggregate([AC]) 
  MEMBER [Customer].[Country].[FG] as Aggregate([FG]) 
  MEMBER [Список городов] as 
  GENERATE(EXISTS(EXISTING [Customer].[Country].[Country], ([Measures].[Internet Sales Amount])), [Customer].[Country].CurrentMember.Name,  ',')
SELECT 
  {[Список городов], [Measures].[Internet Sales Amount], [Measures].[Customer Count]} ON 0,
  {[Customer].[Country].[AC], [Customer].[Country].[FG]} ON 1 
FROM [Adventure Works]


Результат
Список городовInternet Sales AmountCustomer Count
ACAustralia+Canada+France+Germany+United Kingdom+United States11 038 845.455 162
FGAustralia+Canada+France+Germany+United Kingdom+United States5 538 330.053 590


Можно ли, и как, получить следующий результат
Список городовInternet Sales AmountCustomer Count
ACAustralia+Canada11 038 845.455 162
FGFrance+Germany5 538 330.053 590


Спасибо.
24 янв 18, 19:23    [21135780]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Элементы, по которым происходит Aggregate  [new]
vikkiv
Member

Откуда: London
Сообщений: 1383
grAlex,

у тебя на оси кастомные элементы с агрегацией по именному набору, простого способа автоматически расшифровать что агрегирует каждый такой элемент нет (т.е. декодировать элемент сначала что агрегирует, а потом найти элементы этого набора, и всё вычисляется в контексте запроса).

вариант 1 (не точный) : через комбинаторику генерировать компонируя разные элементы до тех пор пока не получится сходная сумма
вариант 2 - писать свою функцию которая это расшифрует обратно
вариант 3 - (при небольшом количестве элементов на оси) прописать выводимое значение (можно cell calculation) через более простую функцию iif/case (типа если ...currentmember.name='AC' then generate([AC] ...)
вариант 4 - вычисление из одноимённой связки набора с кастомным элементом
MEMBER [Список городов] as generate(strtoset([Customer].[Country].currentmember.name),[Customer].[Country].currentmember.name,'+')
вариант 4 наверное самый простой
24 янв 18, 20:50    [21135924]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Элементы, по которым происходит Aggregate  [new]
grAlex
Member

Откуда:
Сообщений: 102
vikkiv,

Спасибо за наводки. Остановился на такой конструкции
WITH
  SET [AC] as {[Customer].[Country].&[Australia], [Customer].[Country].&[Canada]}
  SET [FG] as {[Customer].[Country].&[France], [Customer].[Country].&[Germany]}
 
  MEMBER [Customer].[Country].[AC] as Aggregate([AC]) 
  MEMBER [Customer].[Country].[FG] as Aggregate([FG]) 
  MEMBER [Список городов] as 
    GENERATE(iif ([Customer].[Country].CurrentMember is [Customer].[Country].[AC], [AC],[FG]) as d, d.CURRENT.ITEM(0).NAME, " ")
SELECT 
  {[Список городов], [Measures].[Internet Sales Amount], [Measures].[Customer Count]} ON 0,
  {[Customer].[Country].[AC], [Customer].[Country].[FG]} ON 1 
FROM [Adventure Works]


Список городовInternet Sales AmountCustomer Count
ACAustralia Canada11 038 845.455 162
FGFrance Germany5 538 330.053 590
25 янв 18, 00:02    [21136329]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012. MDX. Элементы, по которым происходит Aggregate  [new]
vikkiv
Member

Откуда: London
Сообщений: 1383
grAlex,

.. iif/case .. is .. конечно побыстрее будет как рекомендованный подход в best practices но поштучное перечисление ставит неудобство/ограничение в количестве элементов (если у тебя их потом станет 5-10-20..)

оба решения потребуют доработки на логику поведения в случае если на осях что-то другое
25 янв 18, 00:53    [21136444]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить