Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
yakov40136
Member

Откуда:
Сообщений: 5
Доброе время суток дорогие форумчане.

Вопрос очень интересный, помогите его решить.

Задача такая:
Допустим есть 3 измерения:

1.Объекты:
Иерархия
1. Страна
2. Регион
3. Город
(атрибуты автомойки)
2. Период
Иерархия
1.Год.
2. Месяц.
3. День.
(без времени)

3. Статьи затрат
1. уровень 1
2. уровень 2
3. уровень 3
Связи (обычные)
Ну и таблица фактов с суммами статей( продажа, потери, зп, украли отдали ну и так далее)

Что необходимо.

Сделать так чтобы можно было выбрать любой разрез по измерениям и выдало 2 топовых строк (по сумме из таблице фактов) любого уровня измерения.
Т.е.
К примеру накидываю в Exsel строки измерение страны, статьи уровень 2 ,и колонки по периоду к примеру год.

Будет примерно так
 Статьи	                                2016	2017	2018
Россия	Материальные издержки	        6000	9000	10000
	Амортизация основных средств	5000	7000	24500

При исходных данных

Статьи
Материальные издержки 6000
Амортизация основных средств 5000
Издержки 4000
Обязательные начисления 3000
Оплата услуг сторонних организаций 2000
Прочие затраты 1000


MDX запрос через topsum можно написать

select
{[MEASURES].[СУММА]} on 0,
 (
  topsum(
		 [Статьи затрат].[уровень 1].MEMBERS
                , 2
		, [MEASURES].[СУММА]
          ) 
		  )on 1
 FROM [КУБ] 


Но это статические данные получиться, так как Я указал разрез статей, а надо перехватывать выбранное измерение и выдавать топ по статьям.


В студии можно через
CREATE DYNAMIC SET CURRENTCUBE.


Но не получается прокидывать axis (1), он ругается либо так

"Номер ошибки Функция ожидает для аргумента строчное или числовое выражение. Было использовано выражение набора кортежей.
"
либо
Была попытка сослаться на ось среза.

Народ помогите, ибо разберусь и понесу знания в народ)))

Спасибо.

К сообщению приложен файл. Размер - 12Kb
7 фев 18, 07:42    [21171814]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
yakov40136
Member

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

Сори при topsum, допустим больше 4000, а не 2, это для topcount
7 фев 18, 08:03    [21171827]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
vikkiv
Member

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

В ручных MDX запросах можно, но вроде стандартно задача не решаема на уровне Excel/SSAS архитектуры, дело в Excel генераторе MDX, ты говоришь на оси дай мне набор Х, а запрос должен сам это заменить (обработать функцией) на набор Y (хоть и такой-же формы - но другой длинны, хотя данные урезать можно), по моему это только через написание своего слоя интерпретатора.

Расчёт что выбрал на axis(n) в конечном теле запроса происходит один раз и уже не настолько изменяемо повторными проходами (цепь From-Where-With-Axis(0)..(n)..+non empty/having) - можно ограничить данные через вынос в подзапрос(ы)/подкуб(ы) - но в Excel генераторе логика такого рода слишком примитивна (он только non empty ставит, having никогда не замечал)..

На уровне scope может и можно стереть данные (null) меньше topcount/topsum по всем возможным комбинациям атрибутов - тогда в Excel сработает non empty, теоретически может и получится реализовать (можно даже чтобы не влиять на всех пользователей сразу через виртуальное измерение с одним неагрегируемым атрибутом где defaultmember = Всё и остальные элементы типа TopCount2, TopCount5, TopCount10) - но на первый взгляд уж очень муторно.
7 фев 18, 08:27    [21171862]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
yakov40136
Member

Откуда:
Сообщений: 5
vikkiv, Спасибо, давай предположим, что данные будут вытягиваться не в Excel, а в другой BI приложение.
7 фев 18, 08:45    [21171898]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
vikkiv
Member

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

ну тогда просто - вот именно это BI приложение при генерации MDX (например логика через дополнительный параметр вместе с iif/case в том-же where на этапе синтеза из атрибутов/элементов именного набора который в результате попадает на ось1) и должно будет из к тому что пользователь яко-бы выбирает на осях применить функцию TopCount (на основе какой-то меры)
7 фев 18, 09:07    [21171932]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
yakov40136
Member

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

но в ssas, это реализовать возможно?
7 фев 18, 09:17    [21171950]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
vikkiv
Member

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

чисти scop-ом данные или грузи только те комбинации где нужный top(x) , второй вариант более затратен по перебору всех возможных случаев под правильные ключи, первый - можно начать с частичной чистки (под несколько выборочных атрибута) многомерного пространства куба.
на больших кубах с множеством измерений, атрибутов и групп мер - легче наверное на стороне MDX запроса сделать / с клиента прислать.

ну или чисто мне с утра пока ничего в голову не приходит, может здешние коллеги с нужным опытом как проснутся - что получше придумают.

позже попробую в MDX скрипте куба с Axis(n) поэкспериментировать, ругаться может из-за того что не получается у него на нужные элементы разбить, часто нужно через Axis().Item()...Item() делать (хотя на осях структуры бывают довольно сложные)
7 фев 18, 09:30    [21171981]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
yakov40136
Member

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

Выбрали Power BI, может в него mdx запрос кинуть.

А так не зная куда пользователь пошёл, я думаю нельзя вернуть топ по мере.

Были варианты.
1.Именованный запрос с точным указанием куда пользователь лезит.
2.Измерений много и у них разная иерархия, ssas как говориться не знает брода не хр*на туда не полезет, тут как и в 1 варианте, для каждого измерения.

Буду думать.

Спасибо.
7 фев 18, 09:36    [21171996]     Ответить | Цитировать Сообщить модератору
 Re: Прокидывание axis(1) при вычислении topsum or topcount в SSAS studio 2012  [new]
vikkiv
Member

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

насколько я видел в профайлере - PowerBI DAX шлёт, даже в SSAS Multidimensional.
У него с кубами 2 варианта есть - Live Connection и Import,
второй - свою модель строить, связи настраивать и грузить всё в локальный файл
первый - там особо запрос не подредактируешь (недавно стало можно на уровне конкретного отчёта свои меры писать - но очень ограниченно)
а так да - именными set-ами на все случаи жизни не запасёшься даже если динамические, да и слишком запутанно для пользователя получится.
7 фев 18, 09:47    [21172023]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить