ЧЛЕН MDX, в результате чего NON EMPTY не фильтруется - PullRequest
0 голосов
/ 03 февраля 2012

Я использую запрос MDX, чтобы получить информацию для поддержки набора отчетов.Для отчетов требуется высокая степень детализации, поэтому для их создания требуется некоторое время.Чтобы ускорить время доступа, мы извлекаем необходимые данные и сохраняем их в плоской таблице Oracle, а затем подключаемся к таблице в Excel.Это позволяет обновлять отчеты за считанные секунды, а не минуты.

Ранее MDX создавался и запускался отделом для 100 отделов, а затем для ряда других фильтров.Все это было сделано в VB.Net.Требования к фильтрам выросли до такой степени, что этот метод не является устойчивым (и, вероятно, не лучшим подходом независимо от него).

Я собрал весь набор данных в один запрос MDX, который работает отлично.Один из моих наборов, который я кросс-объединяю, включает членов с трех разных уровней иерархии, это выглядит так:

(
Descendants([Merch].[Merch CHQ].[All], 2),
Descendants([Merch].[Merch CHQ].[All], 3),
[Merch].[Merch CHQ].[Department].&[1].Children
)

Проблема для меня заключается в нашей иерархии (которую я не могу изменить), каждой группе(первый элемент) и каждый отдел (второй элемент) имеют одинаковую структуру с именами, то есть 15-DeptName, и работать с ним непонятно.

Для решения этой проблемы я добавил члена:

MEMBER
[Measures].[Merch Level] AS
(
[Merch].[Merch CHQ].CurrentMember.Level.Name
)

, который возвращает тип члена, и он отлично работает.

Проблема в том, что он обновляется для каждого члена, поэтому ни одна из строк не фильтруется NON BLANK, вместо 65k строк у меня 130k строк, которыеповлияет на производительность моего доступа.

Может ли мой запрос быть изменен, чтобы отфильтровать все непропуски, кроме использования IIF для проверки каждого измерения на ноль?

1 Ответ

1 голос
/ 03 февраля 2012

Вы можете указать Null для вашего члена на основе вашей основной меры, например:

MEMBER
[Measures].[Merch Level] AS
IIf(IsEmpty([Measures].[Normal Measure]),null,[Merch].[Merch CHQ].CurrentMember.Level.Name)

Таким образом, он будет генерироваться только при наличии данных.Вы можете пойти дальше и добавить дополнительные измерения в пустой чек, если вам нужно получить более точную информацию.

...