Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Функция TOPCOUNT / 4 сообщений из 4, страница 1 из 1
18.01.2019, 18:35
    #39761704
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция TOPCOUNT
Здравствуйте!

Нужно сделать выгрузку по ТТ+SKU так, чтобы для каждой ТТ отбиралось TOP 5 SKU за все 12 месяцев. По колонкам - месяцы. Написал такой MDX-запрос.
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
SELECT
	[Measures].[Отгрузки шт]*[Время].[Месяц].[Месяц] ON 0,
NON EMPTY
	[Торговые точки].[Код ТТ].[Код ТТ]*
	TOPCOUNT(
		[SKU].[SKU].[SKU],
		5,
		[Measures].[Отгрузки шт])
ON 1
FROM (SELECT (
	{[Время].[Месяц].&[2018-01-01T00:00:00]:[Время].[Месяц].&[2018-12-01T00:00:00]},	
	[Торговые точки].[Тип клиента].&[2],	
	[Города].[Город].&[10],
	[Продукция].[Категория продукции].&[9],
	{SKU].[Общий бренд].&[5],
			[SKU].[Общий бренд].&[11],
			[SKU].[Общий бренд].&[18]
		}	
	) ON 0 FROM PROFIT)

Есть сомнение: правильно ли я написал MDX-запрос? В функции TOPCOUNTY в контексте учитывается ли период, заданный в субкубе? Будто что то не учел.
...
Рейтинг: 0 / 0
18.01.2019, 23:43
    #39761778
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция TOPCOUNT
В общем не зря сомневался. Если в субкубе выбрать одну ТТ, то правильно выбирает TOP 5 SKU. А если не выбирать одну ТТ (как указано в MDX-запросе), то не корректно выбирает SKU: для всех ТТ одинаково выбирает TOP 5 SKU.

Почему так? Как правильно написать MDX-запрос?
...
Рейтинг: 0 / 0
19.01.2019, 00:39
    #39761784
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция TOPCOUNT
Переписал так
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.
WITH
SET [Все ТТ] AS 
    [Торговые точки].[Код ТТ].[Код ТТ].MEMBERS 
SET [Сет] AS 
    Generate(
		{[Все ТТ]} AS s,
		s.Current * 
		TopCount(
			[SKU].[SKU].[SKU].ALLMEMBERS 
			,5
			,[Measures].[Отгрузки шт] 
		) 
    ) 

SELECT
	[Measures].[Отгрузки шт]*[Время].[Месяц].[Месяц]
ON 0,
NON EMPTY
	[Торговые точки].[Группа ТТ].[Группа ТТ]*
	[Торговые точки].[Категория].[Категория]*	
	[Сет]
ON 1
FROM (SELECT (
	{[Время].[Месяц].&[2018-01-01T00:00:00]:[Время].[Месяц].&[2018-12-01T00:00:00]},	
	[Торговые точки].[Тип клиента].&[2],	
	[Города].[Город].&[10],
	[Продукция].[Категория продукции].&[9],
	{SKU].[Общий бренд].&[5],
			[SKU].[Общий бренд].&[11],
			[SKU].[Общий бренд].&[18]}	
	) ON 0 FROM PROFIT)

Вроде как бы правильно работает. Но не знаю сомневаться или нет. Пожалуйста, посмотрите.

1. Все ли правильно по логике? Ничего ли не упустил?

2. Как возможно было более оптимально написать?

3. Для быстродействия директиву NON EMPTY надо помещать в функцию TOPCOUNT, но как в NONEMPTY?

4. Это одно и тоже?
Код: sql
1.
2.
s.Current
s.CurrentMember 

Хотя при CurrentMember намного дольше выгружает.

Это похоже одинаково
Код: sql
1.
2.
[SKU].[SKU].[SKU].ALLMEMBERS
[SKU].[SKU].[SKU].MEMBERS 
...
Рейтинг: 0 / 0
19.01.2019, 00:43
    #39761785
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Функция TOPCOUNT
ferzmikk2. Как возможно было более оптимально написать?Если так написать:
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
WITH
SET [Сет] AS 
    Generate(
		[Торговые точки].[Код ТТ].[Код ТТ] AS s, //Без MEMBERS 
		s.Current * 
		TopCount(
			[SKU].[SKU].[SKU].ALLMEMBERS 
			,5
			,[Measures].[Отгрузки шт] 
		) 
    ) 

SELECT
	[Measures].[Отгрузки шт]*[Время].[Месяц].[Месяц]
ON 0,
NON EMPTY
	[Торговые точки].[Группа ТТ].[Группа ТТ]*
	[Торговые точки].[Категория].[Категория]*	
	[Сет]
ON 1
FROM ...

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


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