Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Не работает запрос / 16 сообщений из 16, страница 1 из 1
15.03.2018, 11:14
    #39615243
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.
WITH
SET [Сет_Участник1] AS 
        {
	                ([Торговые точки].[Клиент].&[1], [Торговые точки].[Код юрлица].[ALL])
	}
SET [Сет_Участник2] AS
	{		
			([Торговые точки].[Клиент].&[2], [Торговые точки].[Код юрлица].[ALL])
			,		
			([Торговые точки].[Клиент].&[3], [Торговые точки].[Код юрлица].[ALL])
			,		
			([Торговые точки].[Клиент].&[4], [Торговые точки].[Код юрлица].[ALL])
	}
	
SET [Сет_Участники] AS {[Сет_Участник1],[Сет_Участник2]}
MEMBER [Мера_Участник] AS (CASE
	WHEN RANK({[Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember},
			[Сет_Участник1])> 0 THEN
		'Участник1'
	WHEN RANK({[Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember}
			[Сет_Участник2]) > 0 THEN
		'Участник2'
END)

SELECT
	[Мера_Участник]
ON 0,
	[Сет_Участники]
ON 1
FROM
	PROFIT


Выводит такой результат:
Клиент Код юрлицаМера_УчастникКлиент1ALLНомер ошибкиКлиент2ALLНомер ошибкиКлиент3ALLНомер ошибкиКлиент4ALLНомер ошибки
А надо:
Клиент Код юрлицаМера_УчастникКлиент1ALLУчастник1Клиент2ALLУчастник2Клиент3ALLУчастник2Клиент4ALLУчастник2
Если зайти на номер ошибки, то отображает "Элементы, кортежи и наборы в функции должны использовать одинаковые иерархии.".

Как правильно написать запрос?
...
Рейтинг: 0 / 0
15.03.2018, 13:22
    #39615344
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 [Сет_Участник1] AS 
        {
	                ([Торговые точки].[Клиент].&[1], [Торговые точки].[Код юрлица].[ALL])
	}
SET [Сет_Участник2] AS
	{		
			([Торговые точки].[Клиент].&[2], [Торговые точки].[Код юрлица].[ALL])
			,		
			([Торговые точки].[Клиент].&[3], [Торговые точки].[Код юрлица].[ALL])
			,		
			([Торговые точки].[Клиент].&[4], [Торговые точки].[Код юрлица].[ALL])
	}
	
SET [Сет_Участники] AS {[Сет_Участник1],[Сет_Участник2]}
MEMBER [Мера_Участник] AS (CASE
	WHEN RANK([Сет_Участники].CurrentMember,
			[Сет_Участник1])> 0 THEN
		'Участник1'
	WHEN RANK([Сет_Участники].CurrentMember,
			[Сет_Участник2]) > 0 THEN
		'Участник2'
END)

SELECT
	[Мера_Участник]
ON 0,
	[Сет_Участники]
ON 1
FROM
	PROFIT

то пишет другую ошибку "Номер ошибки Функция CURRENT в этом контексте не может быть вызвана, поскольку в области отсутствует множество "Сет_Участники""
...
Рейтинг: 0 / 0
15.03.2018, 14:20
    #39615389
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
Как правильно написать выражения аргументов в функции Rank?
...
Рейтинг: 0 / 0
15.03.2018, 15:45
    #39615496
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
Rank может работать по двум атрибутам ([Торговые точки].[Клиент].[Клиент] и [Торговые точки].[Код юрлица].[Код юрлица]) сразу?
...
Рейтинг: 0 / 0
15.03.2018, 16:07
    #39615513
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
ferzmikk,

попробуйте в круглых скобках написать
RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember),
[Сет_Участник1])
...
Рейтинг: 0 / 0
15.03.2018, 21:21
    #39615672
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
bideveloperferzmikk,

попробуйте в круглых скобках написать
RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember),
[Сет_Участник1])
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 [Сет_Участник1] AS 
        {
	                ([Торговые точки].[Клиент].&[1], [Торговые точки].[Код юрлица].[ALL])
	}
SET [Сет_Участник2] AS
	{		
			([Торговые точки].[Клиент].&[2], [Торговые точки].[Код юрлица].[ALL])
			,		
			([Торговые точки].[Клиент].&[3], [Торговые точки].[Код юрлица].[ALL])
			,		
			([Торговые точки].[Клиент].&[4], [Торговые точки].[Код юрлица].[ALL])
	}
	
SET [Сет_Участники] AS {[Сет_Участник1],[Сет_Участник2]}
MEMBER [Мера_Участник] AS (CASE
	WHEN RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember),
			[Сет_Участник1])> 0 THEN
		'Участник1'
	WHEN RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember)
			[Сет_Участник2]) > 0 THEN
		'Участник2'
END)

SELECT
	[Мера_Участник]
ON 0,
	[Сет_Участники]
ON 1
FROM
	PROFIT


Не работает. Если нажать на номер ошибки, то пишет "Функция RANK ожидает для аргумента 1 кортежное выражение. Было использовано выражение набора кортежей.".
...
Рейтинг: 0 / 0
16.03.2018, 06:58
    #39615719
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
А зачем вам вообще Rank в данной задаче? Используйте Scope.
Код: sql
1.
2.
3.
4.
5.
6.
7.
SCOPE ([Сет_Участник1])
[Мера_Участник] = 'Участник1'
END SCOPE

SCOPE ([Сет_Участник2])
[Мера_Участник] = 'Участник2'
END SCOPE
...
Рейтинг: 0 / 0
16.03.2018, 08:12
    #39615732
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
bideveloperА зачем вам вообще Rank в данной задаче?Как вариант можем определить входит ли кортеж в определенном наборе или нет.
Используйте Scope.
Код: sql
1.
2.
3.
4.
5.
6.
7.
SCOPE ([Сет_Участник1])
[Мера_Участник] = 'Участник1'
END SCOPE

SCOPE ([Сет_Участник2])
[Мера_Участник] = 'Участник2'
END SCOPE


В запросе прямо так что ли писать?
MDX-Запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
WITH
...
MEMBER [Мера_Участник] AS
(
    SCOPE ([Сет_Участник1])
        [Мера_Участник] = 'Участник1'
    END SCOPE

    SCOPE ([Сет_Участник2])
        [Мера_Участник] = 'Участник2'
    END SCOPE
)
SELECT
...


SCOPE используется в SSMS?
...
Рейтинг: 0 / 0
16.03.2018, 12:12
    #39615890
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
Как можно еще по другому запрос написать для данной задачи?
...
Рейтинг: 0 / 0
16.03.2018, 14:04
    #39615961
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
...
Рейтинг: 0 / 0
16.03.2018, 14:31
    #39615975
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
bideveloper http://darren.gosbell.com/archive/2012/12/19/ssas-executing-mdx-scope-statements-using-ssms.aspx
Если во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =», то на самого куба и на работу других пользователей, которые делают выгрузки, повлияет?
...
Рейтинг: 0 / 0
16.03.2018, 14:43
    #39615986
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
Во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =» можно только тогда, когда подключаешься? Возможно добавить параметр, когда уже подключился?
...
Рейтинг: 0 / 0
16.03.2018, 16:48
    #39616065
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
ferzmikk Если во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =», то на самого куба и на работу других пользователей, которые делают выгрузки, повлияет?

Не повлияет.

ferzmikkВо вкладке «Дополнительные свойства подключения» добавить параметр «Cube =» можно только тогда, когда подключаешься? Возможно добавить параметр, когда уже подключился?

Думаю, что только когда подключаешься.
...
Рейтинг: 0 / 0
17.03.2018, 11:35
    #39616201
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
MDX-запрос
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
SCOPE([Отгрузки шт]);
	this =1;
END SCOPE;

SELECT
[Отгрузки шт] ON 0,
NON EMPTY
[Города].[Город].[Город]
ON 1
FROM
	PROFIT


Получается надо сначала запустить
Код: sql
1.
SCOPE([Отгрузки шт]

, потом
Код: sql
1.
 this =1;

, потом
Код: sql
1.
END SCOPE;

. Далее MDX-запрос.

Если запустить сразу весь запрос, то пишет "Множественные инструкции недопустимы." Возможно ли все в одном запросе прописать?


Как вернуть обратно, чтобы не 1 было, а значения до этого?
Код: sql
1.
this =1;
...
Рейтинг: 0 / 0
17.03.2018, 20:29
    #39616306
bideveloper
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
Прочитайте комментарии по ссылке выше.
...
Рейтинг: 0 / 0
18.03.2018, 09:43
    #39616388
ferzmikk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Не работает запрос
ferzmikkПолучается надо сначала запустить
Код: sql
1.
SCOPE([Отгрузки шт]

, потом
Код: sql
1.
 this =1;

, потом
Код: sql
1.
END SCOPE;

. Далее MDX-запрос.

Если запустить сразу весь запрос, то пишет "Множественные инструкции недопустимы." Возможно ли все в одном запросе прописать?

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


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