powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Не работает запрос
16 сообщений из 16, страница 1 из 1
Не работает запрос
    #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
Не работает запрос
    #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
Не работает запрос
    #39615389
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как правильно написать выражения аргументов в функции Rank?
...
Рейтинг: 0 / 0
Не работает запрос
    #39615496
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Rank может работать по двум атрибутам ([Торговые точки].[Клиент].[Клиент] и [Торговые точки].[Код юрлица].[Код юрлица]) сразу?
...
Рейтинг: 0 / 0
Не работает запрос
    #39615513
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk,

попробуйте в круглых скобках написать
RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember),
[Сет_Участник1])
...
Рейтинг: 0 / 0
Не работает запрос
    #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
Не работает запрос
    #39615719
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем вам вообще Rank в данной задаче? Используйте Scope.
Код: sql
1.
2.
3.
4.
5.
6.
7.
SCOPE ([Сет_Участник1])
[Мера_Участник] = 'Участник1'
END SCOPE

SCOPE ([Сет_Участник2])
[Мера_Участник] = 'Участник2'
END SCOPE
...
Рейтинг: 0 / 0
Не работает запрос
    #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
Не работает запрос
    #39615890
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно еще по другому запрос написать для данной задачи?
...
Рейтинг: 0 / 0
Не работает запрос
    #39615961
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Не работает запрос
    #39615975
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bideveloper http://darren.gosbell.com/archive/2012/12/19/ssas-executing-mdx-scope-statements-using-ssms.aspx
Если во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =», то на самого куба и на работу других пользователей, которые делают выгрузки, повлияет?
...
Рейтинг: 0 / 0
Не работает запрос
    #39615986
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =» можно только тогда, когда подключаешься? Возможно добавить параметр, когда уже подключился?
...
Рейтинг: 0 / 0
Не работает запрос
    #39616065
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikk Если во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =», то на самого куба и на работу других пользователей, которые делают выгрузки, повлияет?

Не повлияет.

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

Думаю, что только когда подключаешься.
...
Рейтинг: 0 / 0
Не работает запрос
    #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
Не работает запрос
    #39616306
bideveloper
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прочитайте комментарии по ссылке выше.
...
Рейтинг: 0 / 0
Не работает запрос
    #39616388
ferzmikk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ferzmikkПолучается надо сначала запустить
Код: sql
1.
SCOPE([Отгрузки шт]

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

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

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

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

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


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