powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Взаимосвязанные виртуальные измерения.
6 сообщений из 6, страница 1 из 1
Взаимосвязанные виртуальные измерения.
    #32417918
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поднимаю на обсуждение достопочтенного All следующую проблему по MDX и дизайну кубиков/измерений в MS AS.

Проблема.
В произвольном кубе имеется некотрое множество виртуальных измерений построенных на одном из физических измерений данного куба.
С точки зрения клиентского приложения, обращающегося к кубу через МДХ эти измерения являютя тем не менее независимыми.

Например. (Пример банально прост, но именно поэтому я его и привожу чтобы всем было понятно о чем идет речь)

Куб - "Продажи"
Физические Измерения
"Клиент", "Товар", "Время"
На атрибутах измерения "Клиет" построены виртуальные измерения
"Регион", "Пол", "Образование", "Среднегодовой доход".
На атрибутах измерения "Товар" построены виртуальные измерения
"Группа товара", "Группа скидок", "Производитель",

Меры "Сумма продаж", "Количество", "Скидка", "Скидка %", "Прибыль", "Прибыль %"

Задача
Вывести отчет "Скидка %" и "Прибыль %" по клиентам, при произвольном сочетании фильтров. для выбранных временных интервалов.

Вариат MDX

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
SELECT 
  CROSS JOIN ({[Время].[Все годы].[ 2004 ].[Январь], [Время].[Все годы].[ 2004 ].[Февраль]}, {[Measures].[Сумма продаж], [Measures].[Скидка %], [Measures].[Прибыль %]})
ON COLUMNS,
  {[Клиент].[Все клиенты],[Клиент].[Все клиенты].members} 
ON ROWS
FROM [Продажи]
WHERE ([Регион].[Все регионы].[Урюпинск],
         [Пол].[Все].[М],
         [Образование].[Все].[Высшее])

Запрос работает, но выдает абсолютно всех клиентов (и не Урюпинцев, и женщин и ПТУшников) :-)

Если мы используем NON EMPTY, то в выборку клиентов не попадают те, кто ничего не покупал в ферврале или январе.

Если вместо WHERE использовать FITER по аттрибутам измерения клиент время выполнения запроса растет на порядок, составлять такой МДХ на порядок гемморойнее, ибо пользователь выбирает членов измерений, а не значения атрибутов.

Пока мы живем с MS AS 2000 (а это нам грозит еще как минимум года полтора-два) - надо искать обходной маневр, но как?

У меня созрела идея.
А что если создать кубик "Relation_Клиент", таблицей фактов которого будет таже таблица, что и таблица измерения "Клиент". В этом кубике участвуют измерение "Клиент" и все что ней висит (виртуальные измерения ."Регион", "Пол", "Образование", "Среднегодовой доход"). В кубике одна единственная мера. Сount(Клиент.Id) "Relation". Сводим кубик "Relation_Клиент" и "Продажи" в один виртуальный "Продажи+" и

модифицируем запрос.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
WITH

SET [Set1] AS 'FILTER([Клиент].[Все клиенты].members, [Measures].[Relation_Клиент] > 0)'

SELECT 
  CROSS JOIN ({[Время].[Все годы].[ 2004 ].[Январь], [Время].[Все годы].[ 2004 ].[Февраль]}, {[Measures].[Сумма продаж], [Measures].[Скидка %], [Measures].[Прибыль %]})
ON COLUMNS,
  {[Клиент].[Все клиенты], [Set1]} 
ON ROWS
FROM [Продажи+]
WHERE ([Регион].[Все регионы].[Урюпинск],
         [Пол].[Все].[М],
         [Образование].[Все].[Высшее])


И получаем желаемый результат.
...
Рейтинг: 0 / 0
Взаимосвязанные виртуальные измерения.
    #32417940
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Еще более оптимально в этом случае будет исползовать функцию NonEmptyCrossJoin, т.е.

SET [Set1] AS
'
NonEmptyCrossJoin([Клиент].[Все клиенты].members,
([Регион].[Все регионы].[Урюпинск],
[Пол].[Все].[М],
[Образование].[Все].[Высшее],
[Measures].[Relation_Клиент]), 1)
'

Как вы правильно заметили, в версии Yukon это будет происходить автоматически. Подробнее детали в следующей статье http://www.microsoft.com/technet/treeview/default.asp?url=/technet/prodtechnol/sql/next/DWSQLSY.asp

под заголовком The Unified Dimensional Model в подразделе Attribute based dimensions.
...
Рейтинг: 0 / 0
Взаимосвязанные виртуальные измерения.
    #32417986
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То Mosha

Идея толковая, но в этом случае мы получаем парочку не очень желательных побочных эффектов:

1. В результате запроса будет не "Клиенты", tupel(Kлиент, Регион, Пол, Образование), а нам требуются только Клиенты. Хотя от этого можно уйти с помощью с функций MDX

Set2 AS 'Extract(Set1, [Клиент])'

2. Генератор запросов, а уменя именно генератор запросов, должен "просканировать" все не пустые (не All) slicers и перекинуть те, которые относятся к зависимым измерениям измерения клиент из Where в Set1. Надо будет попробовать. Нет ли там каких то подводных камней.
...
Рейтинг: 0 / 0
Взаимосвязанные виртуальные измерения.
    #32417991
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В догонку

Извините не заметил, что вы уже поставили "1" для "Crossjoin Set Count", так что Extract абсолютно не нужен.
...
Рейтинг: 0 / 0
Взаимосвязанные виртуальные измерения.
    #32418103
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Mosha.


Кстати.

SET [Set1] AS
'
NonEmptyCrossJoin([Клиент].[Все клиенты].members,
([Регион].[Все регионы].[Урюпинск],
[Пол].[Все].[М],
[Образование].[Все].[Высшее],
[Measures].[Relation_Клиент]), 1)
'


совсем не обязательно, так как
SET [Set1] AS
'
NonEmptyCrossJoin([Клиент].[Все клиенты].members,
[Measures].[Relation_Клиент], 1)
'

Дает тот же результат если в Where отстается

([Регион].[Все регионы].[Урюпинск],
[Пол].[Все].[М],
[Образование].[Все].[Высшее])

к тому же в Where могут и другие измерения, которые не участвуют в кубике
"Relation_Клиент" (такие как "Группа товара", "Группа скидок"), а по сему мы должны вместо [Measures].[Relation_Клиент] использовать ValidMeasure([Measures].[Relation_Клиент]).
Странно только. Согласно документации NonEmptyCrossJoin работает только с физическими мерами, а не с виртуальными. Или я чего то не правильно понял.
...
Рейтинг: 0 / 0
Взаимосвязанные виртуальные измерения.
    #32418304
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
To Mosha

Spasibo za predlozhenie, na bolshih imereniyah (okolo 1*10^6 listovih elementov) NonEmptyCrossJoin daet 2-h kratnoe uvelichenie skorosti vipolnieniya zaprosov i prakticheski 2-h kratnoe umenschenie potreblyaemoi klientom (Pivot Table Services) pamyati.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Взаимосвязанные виртуальные измерения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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