powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Сделать иерархию в запросе...
11 сообщений из 11, страница 1 из 1
Сделать иерархию в запросе...
    #33042346
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот MDX запрос:
Код: plaintext
1.
2.
3.
4.
5.
select 
{[Период_ГКМД].[Год].members} on  0 ,
filter({[Товар].[Товар].members}, min(Axis( 0 ),[Measures].[Line Item Quantity])> 10 ) on  1 
from sales
where [Measures].[Line Item Quantity]

Сам запрос обсуждался на форуме давно.

Теперь стоит задача усложнить его.

Необходимо сделать иерархию, например раскрывешь товар - для каждого товара список покупателей:

Код: plaintext
1.
2.
3.
                           1996               1997       
товар
        покупатели   значение1     значение2...
как реализовывается вообще иерархия в запросе?
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33042466
Dmitry Biryukov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
какой клиент у вас?
в MDX Sample app можно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
select 
nonemptycrossjoin([Период_ГКМД].[Год].members,Покупатели.Members) on  0 ,
filter({[Товар].[Товар].members}, min(Axis( 0 ),[Measures].[Line Item Quantity])> 10 ) on  1 
from sales
where [Measures].[Line Item Quantity]

...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33042531
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
именно этот клиент, о котором вы сказали :)
сори, чтосразу не написала

щас попробую проделать, спасибо :)
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33042756
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и получилось?
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33047357
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
спасибо большое, получилось, только нужно было чуток переставить
запрос выглядит так:
Код: plaintext
1.
2.
3.
4.
5.
6.
select 
[Период_ГКМД].[Год].memberson  0 ,
nonemptycrossjoin(filter({[Товар].[Товар].members}, min(Axis( 0 ),[Measures].[Line Item Quantity])> 10 ),Покупатели.Members)  on  1 
from sales
where [Measures].[Line Item Quantity]

...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33047445
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий/Иринка - у меня к Вам вопрос: Почему Вы используете здесь NonEmptyCrossJoin. Мне видится с ним как минимум 2 проблемы:

1. Поскольку он будет выполнятся вне контекста первой оси (Axis(0)), то вы получите сочетания Товар/Покупатель, которые были пустыми как в 96 так и в 97 году (но непустые скажем в 90-ом году). Т.е. как минимум надо добавить Axis(0) в фильтр NECJ.

2. Это решение опирается на факт что [Line Item Quantity] - это реальная мера а не вычисляемая. Как только она станет вычисляемой - NECJ работать не будет.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33047568
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha

Перечисленные минусы я поняла.
Я использую этот способ, т к за недостатком знаний пока не знаю другого.

Какой вариант предлагаете вы?
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33047586
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Например такой

Код: plaintext
1.
2.
3.
4.
select 
[Период_ГКМД].[Год].memberson  0 ,
non empty crossjoin(filter({[Товар].[Товар].members}, min(Axis( 0 ),[Measures].[Line Item Quantity])> 10 ),Покупатели.Members)  on  1 
from sales
where [Measures].[Line Item Quantity]

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33047788
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mosha

Я не поняла вас.
В чем разница между запросом, кот привела я и вашим, кроме пробелов в слове non empty crossjoin?
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33048394
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в том и разница
nonemptycrossjoin - это функция и как сказал Mosha контекст ее выполнения не зависит от оси 0
а non empty crossjoin - это сочетание функции crossjoin и ключевого слова NON EMPTY посредством которого исключаются все пустые туплы полученые в результате пересечения оси 1 с осью 0. К этому моменту значения всех СМ уже получены и можно точно определить пустая строка или нет. Т.О. Mosha убил этим способом тех двух зайцев о которых он говорил.
Но в этом случае можно получить жутчайшее падение производительности. Прежположим, что во WHERE вместо [Line Item Quantity] вы запрашиваете какой-либо СМ, и что количество покупателей и количество товаров измеряется десятками тысяч. Но ведь не каждый покупатель покупает все товары, зато для каждого их сочетания надо расчитать CM да еще и для каждого элемента оси 0 чтоб убедится пустая строка или нет. Поэтому, если мы точно знаем, что СМ будет пустой в случае когда реальная мера тоже пустая, можно воспользоваться NECJ с реальной мерой, чтоб заведомо отсечь несуществующие пересечения товаров и покупателей и затем вычислить для них CM.
Я не против NON EMPTY и не против NECJ, просто каждый случай надо рассматривать индивидуально.
...
Рейтинг: 0 / 0
Сделать иерархию в запросе...
    #33048654
irinka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor

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


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