Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Здравствуйте!

Есть MDX-запрос, и он рабочий.
+MDX-запрос
WITH
SET [Набор продукции] AS {[Продукция].[Код продукции].&[55005]}

MEMBER [Реализация шт Январь 2018] AS SUM([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
MEMBER [Реализация шт Февраль 2018] AS SUM([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])

MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Торговые точки].[Клиент].[Клиент],			
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
MEMBER [Общая реализация продукции в компании Февраль 2018] AS 	
	SUM(		
		Filter([Торговые точки].[Клиент].[Клиент],			
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])
	)
SET [Набор клиентов] AS
	 {{[Торговые точки].[Клиент].&[309]}*{[Торговые точки].[Код юрлица].[ALL]}* {[Города].[Город].[ALL]}}

SELECT 
{[Реализация шт Январь 2018],
[Реализация шт Февраль 2018],
[Общая реализация продукции в компании Январь 2018],
[Общая реализация продукции в компании Февраль 2018]}
ON 0,
[Набор клиентов]*
[Набор продукции]
ON 1
FROM 
	(SELECT
		({[Время].[Год].&[2017-01-01T00:00:00]:[Время].[Год].&[2018-01-01T00:00:00]}) ON 0 FROM PROFIT)

Выдает следующий результат
КлиентКод юрлицаГородКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018
Клиент1 All All 55005 48.0 144.0 2483 2725


Но если записать так
...
SET [Набор клиентов] AS
	 {{[Торговые точки].[Клиент].&[309]}*{[Торговые точки].[Код юрлица].&[00001ГРД]}* {[Города].[Город].[ALL]}}
...

то выдает такой результат
КлиентКод юрлицаГородКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018
Клиент1 00001ГРД All 55005 48.0 144.0 48.0 144.0

Почему так? Как правильно написать запрос, чтобы при уточнении юр лица и города правильно показывал общую реализацию по компании по соответствующему месяцу?
23 мар 18, 08:34    [21279402]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
ferzmikk
...
SET [Набор клиентов] AS
	 {{[Торговые точки].[Клиент].&[309]}*{[Торговые точки].[Код юрлица].&[00001ГРД]}* {[Города].[Город].[ALL]}}
...

Может надо где то скобки (круглые, фигурные) поставить или какую то функцию использовать, чтобы корректно сумму показывал? Или если уточняю юр лицо, то не получится показать общую сумму?
24 мар 18, 11:51    [21282730]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
ferzmikk
Почему так? Как правильно написать запрос
потому что ваша сумма вычисляется в контексте запроса (определяемым в том числе и вашим [Набор клиентов]).
написать правильный сет для суммирования (указав, что вам нужно именно по всем лицам\городам).
24 мар 18, 12:33    [21282789]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Дедушка
написать правильный сет для суммирования (указав, что вам нужно именно по всем лицам\городам).

А если взять другого клиента

+ MDX-запрос
WITH
SET [Набор продукции] AS {[Продукция].[Код продукции].&[55005]}

MEMBER [Реализация шт Январь 2018] AS SUM([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
MEMBER [Реализация шт Февраль 2018] AS SUM([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])

MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Торговые точки].[Клиент].[Клиент],			
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
MEMBER [Общая реализация продукции в компании Февраль 2018] AS 	
	SUM(		
		Filter([Торговые точки].[Клиент].[Клиент],			
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])
	)
SET [Набор клиентов] AS
	 {{[Торговые точки].[Клиент].&[308]}*{[Торговые точки].[Код юрлица].&[00002грд]}* {[Города].[Город].[ALL]}}

SELECT 
{[Реализация шт Январь 2018],
[Реализация шт Февраль 2018],
[Общая реализация продукции в компании Январь 2018],
[Общая реализация продукции в компании Февраль 2018]}
ON 0,
[Набор клиентов]*
[Набор продукции]
ON 1
FROM 
	(SELECT
		({[Время].[Год].&[2017-01-01T00:00:00]:[Время].[Год].&[2018-01-01T00:00:00]}) ON 0 FROM PROFIT)

Выдает следующий результат
КлиентКод юрлицаГородКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018
Клиент308 00002грд All 55005 10.0 4.0 10 4


Но если записать так
...
SET [Набор клиентов] AS
	 {{[Торговые точки].[Клиент].&[308]}*{[Торговые точки].[Код юрлица].[ALL]}* {[Города].[Город].[ALL]}}
...

то выдает такой результат
КлиентКод юрлицаГородКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018
Клиент308 All All 55005 33.0 4.0 2483 2725


Результат должен быть таким
КлиентКод юрлицаГородКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018
Клиент308 00002грд All 55005 10.0 4.0 2483 2725


То как тут сет правильно написать?
25 мар 18, 11:40    [21283886]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Надо было так написать
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]},
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)

или так
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[ALL]*
					[Города].[Город].[ALL]},
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)

Только при втором варианте дольше выгружается.
26 мар 18, 08:36    [21285002]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Из за того что добавил два атрибута ([Торговые точки].[Код юрлица].[Код юрлица] и [Города].[Город].[Город]) в фильтр, то запрос намного дольше работает теперь.

Возможно ли как то оптимизировать, учитывая что расчет общей суммы для каждой продукции и месяца повторяется по разным клиентам?
26 мар 18, 10:23    [21285344]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Построить нужные агрегаты.
26 мар 18, 10:48    [21285441]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Дедушка
Построить нужные агрегаты.

...
MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]})
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
...

Так?
26 мар 18, 14:45    [21286456]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 2304
ferzmikk
Дедушка
Построить нужные агрегаты.

...
MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]})
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
...

Так?

Нет, не так. Коллега имел в виду, что в студии SSDT нужно открыть куб PROFIT и на закладке агрегатов для группы мер, в которую входит мера "Реализация шт" - построить агрегат на пересечении ключевого атрибута измерения "Торговые точки" и ключевого атрибута на измерении "Город" и атрибута "Месяц" на измерении "Время".
Только это не поможет. Потому что придется еще и из-за "[Продукция].[Код продукции].CurrentMember" - включать в агрегат измерение "Продукция". И flex получится наверняка больше, чем исходный файл data.
Я так думаю...
26 мар 18, 23:40    [21288129]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

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

Нету доступа к студии, хотелось бы решить проблему MDX-запросом.
27 мар 18, 00:35    [21288206]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
ferzmikk
Дедушка
Построить нужные агрегаты.

...
MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]})
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
...

Так?

У такого способа есть какие то риски?
27 мар 18, 00:37    [21288210]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Зато намного быстрее сформировал
27 мар 18, 07:26    [21288324]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
ferzmikk
Зато намного быстрее сформировал

286 строк за 10 минут, до этого было более 30 минут
27 мар 18, 07:51    [21288377]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
Andy_OLAP
Member

Откуда: я знаю, что Зенит - чемпион
Сообщений: 2304
ferzmikk
ferzmikk
Зато намного быстрее сформировал

286 строк за 10 минут, до этого было более 30 минут

И это удивительно, учитывая, что "Filter([Подбор ТТ]" и "MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS".
Функция Filter разве не принимает в качестве первого аргумента набор SET, а не формулу MEMBER? Вы чего-то не договариваете...
27 мар 18, 12:49    [21289554]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
ferzmikk
ferzmikk
Зато намного быстрее сформировал

286 строк за 10 минут, до этого было более 30 минут

286 строк за 10 минут, до этого было более 30 минут - имелось ввиду в рабочем запросе
А для данного примера: раньше 19 секунд, а теперь 7 секунд.
27 мар 18, 13:22    [21289709]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
При таком запросе
+MDX-запрос
WITH
SET [Продукция1] AS {[Продукция].[Код продукции].&[55005]}

SET [Продукции] AS {[Продукция1]}

MEMBER [Реализация шт Январь 2018] AS SUM([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
MEMBER [Реализация шт Февраль 2018] AS SUM([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])

MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Города].[Регион города].[Регион города],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
MEMBER [Общая реализация продукции в компании Февраль 2018] AS 	
	SUM(		
		Filter([Города].[Регион города].[Регион города],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),			
		([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])
	)
SET [Набор регионов] AS {
	[Города].[Регион города].&[7],[Города].[Регион города].&[8]
	}
SELECT 
{[Реализация шт Январь 2018],
[Реализация шт Февраль 2018],
[Общая реализация продукции в компании Январь 2018],
[Общая реализация продукции в компании Февраль 2018]}
ON 0,
[Набор регионов]*
[Продукции]*
[Продукция].[Наименование продукции].[Наименование продукции]
ON 1
FROM 
	(SELECT
		({[Время].[Год].&[2017-01-01T00:00:00]:[Время].[Год].&[2018-01-01T00:00:00]}) ON 0 FROM PROFIT)
возвращает такой результат
Регион городаКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018
РегионГорода7 55005 234 415 2483 2725
РегионГорода8 55005 240 400 2600 2800

Нужно отсечь таких клиентов как
- { ({[Торговые точки].[Клиент].&[21]} * {[Торговые точки].[Код юрлица].&[09974грд]} * {[Города].[Регион города].&[3]}) }
- { ({[Торговые точки].[Клиент].&[22]} * {[Торговые точки].[Код юрлица].[ALL]} * {[Города].[Регион города].[ALL]}) }
{
	{({[Торговые точки].[Клиент].[Клиент]}  *   {[Торговые точки].[Код юрлица].[Код юрлица]}     *    {[Города].[Регион города].[Регион города]})}
	-		
	{({[Торговые точки].[Клиент].&[21]}     *   {[Торговые точки].[Код юрлица].&[09974грд]}      *    {[Города].[Регион города].&[3]})}
        -
        {({[Торговые точки].[Клиент].&[22]}     *   {[Торговые точки].[Код юрлица].[ALL]}            *    {[Города].[Регион города].[ALL]})}
}

Если поместить этот в субкуб, то меры Общая реализация продукции в компании Январь 2018 и Общая реализация продукции в компании Январь 2018 получаются нулевые и запрос дольше работает. А если поместить в WHERE, то пишет Иерархия Регион города уже присутствует на оси Axis1.

Скажите, как нужно вычесть таких клиентов, чтобы при расчете общей суммы реализации не отсекались эти клиенты?
28 мар 18, 12:38    [21292879]     Ответить | Цитировать Сообщить модератору
 Re: Не корректно показывает общую сумму  [new]
ferzmikk
Member

Откуда:
Сообщений: 1507
Разобрался!

Надо было так написать.
+MDX-запрос
WITH
SET [Продукция1] AS {[Продукция].[Код продукции].&[55005]}

SET [Продукции] AS {[Продукция1]}

MEMBER [Реализация шт Январь 2018] AS SUM([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
MEMBER [Реализация шт Февраль 2018] AS SUM([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])

MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Регион города].[Регион города]})

MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
MEMBER [Общая реализация продукции в компании Февраль 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),			
		([Время].[Месяц].&[2018-02-01T00:00:00],[Measures].[Реализация шт])
	)
SET [Набор регионов] AS {
	[Города].[Регион города].&[7],
        [Города].[Регион города].&[8]
	}

SELECT 
    {[Реализация шт Январь 2018],
    [Реализация шт Февраль 2018],
    [Общая реализация продукции в компании Январь 2018],
    [Общая реализация продукции в компании Февраль 2018]}
ON 0,
    [Набор регионов]*
    [Продукции]*
    [Продукция].[Наименование продукции].[Наименование продукции]
ON 1
FROM 
	(SELECT
		({[Время].[Год].&[2017-01-01T00:00:00]:[Время].[Год].&[2018-01-01T00:00:00]},
                 {
	             {({[Торговые точки].[Клиент].[Клиент]}  *   {[Торговые точки].[Код юрлица].[Код юрлица]}     *    {[Города].[Регион города].[Регион города]})}
	             -		
	             {({[Торговые точки].[Клиент].&[21]}     *   {[Торговые точки].[Код юрлица].&[09974грд]}      *    {[Города].[Регион города].[Регион города]})}
                     -
                     {({[Торговые точки].[Клиент].&[22]}     *   {[Торговые точки].[Код юрлица].[Код юрлица]}     *    {[Города].[Регион города].[Регион города]})}
                 }) ON 0 FROM PROFIT)

хотя запрос может быть не оптимальным.
29 мар 18, 12:15    [21295695]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить