Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Здравствуйте!

Есть MDX-запрос.

+MDX-запрос
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

Если зайти на номер ошибки, то отображает "Элементы, кортежи и наборы в функции должны использовать одинаковые иерархии.".

Как правильно написать запрос?
15 мар 18, 11:14    [21257885]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Если так написать
+MDX-запрос
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 в этом контексте не может быть вызвана, поскольку в области отсутствует множество "Сет_Участники""
15 мар 18, 13:22    [21258448]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Как правильно написать выражения аргументов в функции Rank?
15 мар 18, 14:20    [21258761]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Rank может работать по двум атрибутам ([Торговые точки].[Клиент].[Клиент] и [Торговые точки].[Код юрлица].[Код юрлица]) сразу?
15 мар 18, 15:45    [21259195]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
bideveloper
Member

Откуда:
Сообщений: 357
ferzmikk,

попробуйте в круглых скобках написать
RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember),
[Сет_Участник1])
15 мар 18, 16:07    [21259261]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
bideveloper
ferzmikk,

попробуйте в круглых скобках написать
RANK(([Торговые точки].[Клиент].CurrentMember, [Торговые точки].[Код юрлица].CurrentMember),
[Сет_Участник1])

+MDX-Запрос
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 кортежное выражение. Было использовано выражение набора кортежей.".
15 мар 18, 21:21    [21259969]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
bideveloper
Member

Откуда:
Сообщений: 357
А зачем вам вообще Rank в данной задаче? Используйте Scope.
SCOPE ([Сет_Участник1])
[Мера_Участник] = 'Участник1'
END SCOPE

SCOPE ([Сет_Участник2])
[Мера_Участник] = 'Участник2'
END SCOPE
16 мар 18, 06:58    [21260259]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
bideveloper
А зачем вам вообще Rank в данной задаче?
Как вариант можем определить входит ли кортеж в определенном наборе или нет.
Используйте Scope.
SCOPE ([Сет_Участник1])
[Мера_Участник] = 'Участник1'
END SCOPE

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

В запросе прямо так что ли писать?
+MDX-Запрос
WITH
...
MEMBER [Мера_Участник] AS
(
    SCOPE ([Сет_Участник1])
        [Мера_Участник] = 'Участник1'
    END SCOPE

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

SCOPE используется в SSMS?
16 мар 18, 08:12    [21260316]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Как можно еще по другому запрос написать для данной задачи?
16 мар 18, 12:12    [21261063]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
bideveloper
Member

Откуда:
Сообщений: 357
http://darren.gosbell.com/archive/2012/12/19/ssas-executing-mdx-scope-statements-using-ssms.aspx
16 мар 18, 14:04    [21261524]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
bideveloper
http://darren.gosbell.com/archive/2012/12/19/ssas-executing-mdx-scope-statements-using-ssms.aspx

Если во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =», то на самого куба и на работу других пользователей, которые делают выгрузки, повлияет?
16 мар 18, 14:31    [21261610]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
Во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =» можно только тогда, когда подключаешься? Возможно добавить параметр, когда уже подключился?
16 мар 18, 14:43    [21261671]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
bideveloper
Member

Откуда:
Сообщений: 357
ferzmikk
Если во вкладке «Дополнительные свойства подключения» добавить параметр «Cube =», то на самого куба и на работу других пользователей, которые делают выгрузки, повлияет?


Не повлияет.

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


Думаю, что только когда подключаешься.
16 мар 18, 16:48    [21262105]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
+MDX-запрос
SCOPE([Отгрузки шт]);
	this =1;
END SCOPE;

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

Получается надо сначала запустить
SCOPE([Отгрузки шт]
, потом
 this =1;
, потом
END SCOPE;
. Далее MDX-запрос.

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


Как вернуть обратно, чтобы не 1 было, а значения до этого?
this =1;
17 мар 18, 11:35    [21263465]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
bideveloper
Member

Откуда:
Сообщений: 357
Прочитайте комментарии по ссылке выше.
17 мар 18, 20:29    [21264120]     Ответить | Цитировать Сообщить модератору
 Re: Не работает запрос  [new]
ferzmikk
Member

Откуда:
Сообщений: 1575
ferzmikk
Получается надо сначала запустить
SCOPE([Отгрузки шт]
, потом
 this =1;
, потом
END SCOPE;
. Далее MDX-запрос.

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

Надо использовать GO как в SQL
18 мар 18, 09:43    [21264720]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить