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

Нужно сделать выгрузку по ТТ+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
Функция TOPCOUNT
    #39761778
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем не зря сомневался. Если в субкубе выбрать одну ТТ, то правильно выбирает TOP 5 SKU. А если не выбирать одну ТТ (как указано в MDX-запросе), то не корректно выбирает SKU: для всех ТТ одинаково выбирает TOP 5 SKU.

Почему так? Как правильно написать MDX-запрос?
...
Рейтинг: 0 / 0
Функция TOPCOUNT
    #39761784
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.
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
Функция TOPCOUNT
    #39761785
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
4 сообщений из 4, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Функция TOPCOUNT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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