powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Не корректно показывает общую сумму
17 сообщений из 17, страница 1 из 1
Не корректно показывает общую сумму
    #39619233
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть MDX-запрос, и он рабочий.
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
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

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


то выдает такой результат
КлиентКод юрлицаГородКод продукцииРеализация шт Январь 2018 Реализация шт Февраль 2018 Общая реализация продукции в компании Январь 2018 Общая реализация продукции в компании Февраль 2018Клиент1 00001ГРД All 55005 48.0 144.0 48.0 144.0
Почему так? Как правильно написать запрос, чтобы при уточнении юр лица и города правильно показывал общую реализацию по компании по соответствующему месяцу?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39619936
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk
Код: sql
1.
2.
3.
4.
...
SET [Набор клиентов] AS
	 {{[Торговые точки].[Клиент].&[309]}*{[Торговые точки].[Код юрлица].&[00001ГРД]}* {[Города].[Город].[ALL]}}
...


Может надо где то скобки (круглые, фигурные) поставить или какую то функцию использовать, чтобы корректно сумму показывал? Или если уточняю юр лицо, то не получится показать общую сумму?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39619941
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkПочему так? Как правильно написать запроспотому что ваша сумма вычисляется в контексте запроса (определяемым в том числе и вашим [Набор клиентов]).
написать правильный сет для суммирования (указав, что вам нужно именно по всем лицам\городам).
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620096
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дедушканаписать правильный сет для суммирования (указав, что вам нужно именно по всем лицам\городам).
А если взять другого клиента

MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
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

Но если записать так
Код: sql
1.
2.
3.
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

То как тут сет правильно написать?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620308
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо было так написать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]},
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)


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


Только при втором варианте дольше выгружается.
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620370
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из за того что добавил два атрибута ( [Торговые точки].[Код юрлица].[Код юрлица] и [Города].[Город].[Город] ) в фильтр, то запрос намного дольше работает теперь.

Возможно ли как то оптимизировать, учитывая что расчет общей суммы для каждой продукции и месяца повторяется по разным клиентам?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620382
Фотография Дедушка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Построить нужные агрегаты.
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620533
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДедушкаПостроить нужные агрегаты.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]})
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
...


Так?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620807
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkДедушкаПостроить нужные агрегаты.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]})
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
...


Так?
Нет, не так. Коллега имел в виду, что в студии SSDT нужно открыть куб PROFIT и на закладке агрегатов для группы мер, в которую входит мера "Реализация шт" - построить агрегат на пересечении ключевого атрибута измерения "Торговые точки" и ключевого атрибута на измерении "Город" и атрибута "Месяц" на измерении "Время".
Только это не поможет. Потому что придется еще и из-за "[Продукция].[Код продукции].CurrentMember" - включать в агрегат измерение "Продукция". И flex получится наверняка больше, чем исходный файл data.
Я так думаю...
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620824
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Andy_OLAP,

Нету доступа к студии, хотелось бы решить проблему MDX-запросом.
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620825
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkДедушкаПостроить нужные агрегаты.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
...
MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS AGGREGATE({[Торговые точки].[Клиент].[Клиент]*
					[Торговые точки].[Код юрлица].[Код юрлица]*
					[Города].[Город].[Город]})
MEMBER [Общая реализация продукции в компании Январь 2018] AS 	
	SUM(		
		Filter([Подбор ТТ],		
			([Продукция].[Код продукции].CurrentMember,			
				 [Measures].[Реализация шт])<>0
		),		
		([Время].[Месяц].&[2018-01-01T00:00:00],[Measures].[Реализация шт])
	)
...


Так?
У такого способа есть какие то риски?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620866
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зато намного быстрее сформировал
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39620880
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkЗато намного быстрее сформировал
286 строк за 10 минут, до этого было более 30 минут
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39621111
Andy_OLAP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkferzmikkЗато намного быстрее сформировал
286 строк за 10 минут, до этого было более 30 минут
И это удивительно, учитывая, что "Filter([Подбор ТТ]" и "MEMBER [Торговые точки].[Клиент].[Подбор ТТ] AS".
Функция Filter разве не принимает в качестве первого аргумента набор SET, а не формулу MEMBER? Вы чего-то не договариваете...
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39621145
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkferzmikkЗато намного быстрее сформировал
286 строк за 10 минут, до этого было более 30 минут
286 строк за 10 минут, до этого было более 30 минут - имелось ввиду в рабочем запросе
А для данного примера: раньше 19 секунд, а теперь 7 секунд.
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39621945
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
При таком запросе
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
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]}) }
Код: sql
1.
2.
3.
4.
5.
6.
7.
{
	{({[Торговые точки].[Клиент].[Клиент]}  *   {[Торговые точки].[Код юрлица].[Код юрлица]}     *    {[Города].[Регион города].[Регион города]})}
	-		
	{({[Торговые точки].[Клиент].&[21]}     *   {[Торговые точки].[Код юрлица].&[09974грд]}      *    {[Города].[Регион города].&[3]})}
        -
        {({[Торговые точки].[Клиент].&[22]}     *   {[Торговые точки].[Код юрлица].[ALL]}            *    {[Города].[Регион города].[ALL]})}
}


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

Скажите, как нужно вычесть таких клиентов, чтобы при расчете общей суммы реализации не отсекались эти клиенты?
...
Рейтинг: 0 / 0
Не корректно показывает общую сумму
    #39622590
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разобрался!

Надо было так написать.
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
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)


хотя запрос может быть не оптимальным.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Не корректно показывает общую сумму
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]