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

Есть работающий сложный MDX-запрос. Выгружаются количество отгруженных ТТ по трем SKU. Учитывая следующие логические нюансы:

1. SKU1 нужно выгружать за 47 и 48 неделю 2018 года; - это первая группа SKU
2. SKU2 нужно выгружать за 48 неделю 2018 года; - это вторая группа SKU
3. SKU3 нужно выгружать из SKU3_1 или SKU3_2 за 48 неделю 2018 года. - это вторая группа SKU
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.
54.
55.
56.
57.
58.
59.
60.
61.
WITH
//Агрегация SKU
MEMBER [Продукция].[Общее наименование SKU].[_SKU1] AS
	AGGREGATE ({[Продукция].[Общее наименование SKU].&[SKU1]})
	
MEMBER [Продукция].[Общее наименование SKU].[_SKU2] AS
	AGGREGATE ({[Продукция].[Общее наименование SKU].&[SKU2]})
	
MEMBER [Продукция].[Общее наименование SKU].[_SKU3] AS
	AGGREGATE ({[Продукция].[Общее наименование SKU].&[SKU3_1],
		[Продукция].[Общее наименование SKU].&[SKU3_2]})


//Агрегация Годы для первой группы SKU
MEMBER [Время].[Год].[_Годы для первой группы SKU] AS
	AGGREGATE ({[Время].[Год].&[2018-01-01T00:00:00]})

//Агрегация Недели для первой группы SKU
MEMBER [Время].[Неделя года].[_Недели для первой группы SKU] AS
	AGGREGATE ({[Время].[Неделя года].&[47],[Время].[Неделя Года].&[48]})

//Агрегация для второй группы не нужно делать, так как там берется только одна неделя соответствующего года.


//Агрегация Год и Неделя для первой группы SKU
MEMBER [Время].[Год].[_Период для первой группы SKU] AS
	([Время].[Год].[_Годы для первой группы SKU],[Время].[Неделя года].[_Недели для первой группы SKU])

//Агрегация Год и Неделя для второй группы SKU	
MEMBER [Время].[Год].[_Период для второй группы SKU] AS 
	([Время].[Год].&[2018-01-01T00:00:00],[Время].[Неделя Года].&[48])

	
//Получаем конечные меры по каждой SKU
MEMBER [SKU1] AS
	SUM ({([Продукция].[Общее наименование SKU].[_SKU1], [Время].[Год].[_Период для первой группы SKU])},
		[Measures].[Отгрузки количество ТТ])

MEMBER [SKU2] AS
	SUM ({([Продукция].[Общее наименование SKU].[_SKU2], [Время].[Год].[_Период для второй группы SKU])}*
		[Measures].[Отгрузки количество ТТ])

MEMBER [SKU3] AS
	SUM ({([Продукция].[Общее наименование SKU].[_SKU3], [Время].[Год].[_Период для второй группы SKU])}*
		[Measures].[Отгрузки количество ТТ])


SELECT 
	{[Пирожное Муравейник], [Тирамису],[Пломбирный]} ON 0,
NON EMPTY
	[Города].[Город].[Город]*
	[Города].[Регион города].[Регион города] *
	[Торговые точки].[Клиент].[Клиент] *
	[Торговые точки].[Группа ТТ].[Группа ТТ] *
	[Торговые точки].[Тип клиента].&[2] *
	[Торговые точки].[Код ТТ].[Код ТТ] *
	[Торговые точки].[Адрес ТТ].[Адрес ТТ] *
	[Торговые точки].[Регион ТТ].[Регион ТТ]
ON 1
FROM 
	[Profit]

В общем, весь запрос выгружает 30 050 строк за 30 минут. Без выделенных двух атрибутов выгружает за 46 секунд.

Вопрос1. Скажите, как возможно как то провести агрегацию этих двух выделенных атрибутов, чтобы запрос быстрее выполнялся? Понятно что, эти два атрибута из другого измерения и происходит декартовое произведение. Хотя бы как то обойти такой момент. Эти два атрибута удалить не могу, так как они нужны пользователям.


Следующая запись сделана для того, чтобы учесть, если будет задан такой период как 52 неделя 2017 года и 1 неделя 2018 года для первой группы SKU.
MDX-запрос. Фрагмент
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
//Агрегация Годы для первой группы SKU
MEMBER [Время].[Год].[_Годы для первой группы SKU] AS
	AGGREGATE ({[Время].[Год].&[2018-01-01T00:00:00]})

//Агрегация Недели для первой группы SKU
MEMBER [Время].[Неделя года].[_Недели для первой группы SKU] AS
	AGGREGATE ({[Время].[Неделя года].&[47],[Время].[Неделя Года].&[48]})

//Агрегация для второй группы не нужно делать, так как там берется только одна неделя соответствующего года.


//Агрегация Год и Неделя для первой группы SKU
MEMBER [Время].[Год].[_Период для первой группы SKU] AS
	([Время].[Год].[_Годы для первой группы SKU],[Время].[Неделя года].[_Недели для первой группы SKU])

//Агрегация Год и Неделя для второй группы SKU	
MEMBER [Время].[Год].[_Период для второй группы SKU] AS 
	([Время].[Год].&[2018-01-01T00:00:00],[Время].[Неделя Года].&[48])
...

Вопрос 2. Но почему то считает количество ТТ немного больше, чем нужно. Похоже не правильно агрегировал. Скажите, как правильно надо агрегировать периоды для данного случая?
...
Рейтинг: 0 / 0
Объединение элементов в сложной структуре
    #39746453
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Здравствуйте!

Есть работающий сложный MDX-запрос. Выгружаются количество отгруженных ТТ по трем SKU. Учитывая следующие логические нюансы:

1. SKU1 нужно выгружать за 47 и 48 неделю 2018 года; - это первая группа SKU
2. SKU2 нужно выгружать за 48 неделю 2018 года; - это вторая группа SKU
3. SKU3 нужно выгружать из SKU3_1 или SKU3_2 за 48 неделю 2018 года. - это вторая группа SKU
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.
54.
55.
56.
57.
58.
59.
60.
61.
WITH
//Агрегация SKU
MEMBER [Продукция].[Общее наименование SKU].[_SKU1] AS
	AGGREGATE ({[Продукция].[Общее наименование SKU].&[SKU1]})
	
MEMBER [Продукция].[Общее наименование SKU].[_SKU2] AS
	AGGREGATE ({[Продукция].[Общее наименование SKU].&[SKU2]})
	
MEMBER [Продукция].[Общее наименование SKU].[_SKU3] AS
	AGGREGATE ({[Продукция].[Общее наименование SKU].&[SKU3_1],
		[Продукция].[Общее наименование SKU].&[SKU3_2]})


//Агрегация Годы для первой группы SKU
MEMBER [Время].[Год].[_Годы для первой группы SKU] AS
	AGGREGATE ({[Время].[Год].&[2018-01-01T00:00:00]})

//Агрегация Недели для первой группы SKU
MEMBER [Время].[Неделя года].[_Недели для первой группы SKU] AS
	AGGREGATE ({[Время].[Неделя года].&[47],[Время].[Неделя Года].&[48]})

//Агрегация для второй группы не нужно делать, так как там берется только одна неделя соответствующего года.


//Агрегация Год и Неделя для первой группы SKU
MEMBER [Время].[Год].[_Период для первой группы SKU] AS
	([Время].[Год].[_Годы для первой группы SKU],[Время].[Неделя года].[_Недели для первой группы SKU])

//Агрегация Год и Неделя для второй группы SKU	
MEMBER [Время].[Год].[_Период для второй группы SKU] AS 
	([Время].[Год].&[2018-01-01T00:00:00],[Время].[Неделя Года].&[48])

	
//Получаем конечные меры по каждой SKU
MEMBER [SKU1] AS
	SUM ({([Продукция].[Общее наименование SKU].[_SKU1], [Время].[Год].[_Период для первой группы SKU])},
		[Measures].[Отгрузки количество ТТ])

MEMBER [SKU2] AS
	SUM ({([Продукция].[Общее наименование SKU].[_SKU2], [Время].[Год].[_Период для второй группы SKU])}*
		[Measures].[Отгрузки количество ТТ])

MEMBER [SKU3] AS
	SUM ({([Продукция].[Общее наименование SKU].[_SKU3], [Время].[Год].[_Период для второй группы SKU])}*
		[Measures].[Отгрузки количество ТТ])


SELECT 
	{[SKU1],[SKU2],[SKU3]} ON 0,
NON EMPTY
	[Города].[Город].[Город]*
	[Города].[Регион города].[Регион города] *
	[Торговые точки].[Клиент].[Клиент] *
	[Торговые точки].[Группа ТТ].[Группа ТТ] *
	[Торговые точки].[Тип клиента].&[2] *
	[Торговые точки].[Код ТТ].[Код ТТ] *
	[Торговые точки].[Адрес ТТ].[Адрес ТТ] *
	[Торговые точки].[Регион ТТ].[Регион ТТ]
ON 1
FROM 
	[Profit]

В общем, весь запрос выгружает 30 050 строк за 30 минут. Без выделенных двух атрибутов выгружает за 46 секунд.

Вопрос1. Скажите, как возможно как то провести агрегацию этих двух выделенных атрибутов, чтобы запрос быстрее выполнялся? Понятно что, эти два атрибута из другого измерения и происходит декартовое произведение. Хотя бы как то обойти такой момент. Эти два атрибута удалить не могу, так как они нужны пользователям.


Следующая запись сделана для того, чтобы учесть, если будет задан такой период как 52 неделя 2017 года и 1 неделя 2018 года для первой группы SKU.
MDX-запрос. Фрагмент
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
...
//Агрегация Годы для первой группы SKU
MEMBER [Время].[Год].[_Годы для первой группы SKU] AS
	AGGREGATE ({[Время].[Год].&[2018-01-01T00:00:00]})

//Агрегация Недели для первой группы SKU
MEMBER [Время].[Неделя года].[_Недели для первой группы SKU] AS
	AGGREGATE ({[Время].[Неделя года].&[47],[Время].[Неделя Года].&[48]})

//Агрегация для второй группы не нужно делать, так как там берется только одна неделя соответствующего года.


//Агрегация Год и Неделя для первой группы SKU
MEMBER [Время].[Год].[_Период для первой группы SKU] AS
	([Время].[Год].[_Годы для первой группы SKU],[Время].[Неделя года].[_Недели для первой группы SKU])

//Агрегация Год и Неделя для второй группы SKU	
MEMBER [Время].[Год].[_Период для второй группы SKU] AS 
	([Время].[Год].&[2018-01-01T00:00:00],[Время].[Неделя Года].&[48])
...

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


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