MDX-запрос выполняется медленно, но только в определенном порядке - PullRequest
0 голосов
/ 06 декабря 2011

Я программно генерирую запрос MDX в следующем формате:

WITH 
    MEMBER [Measures].[MTD] AS
        SUM ({[Time].[Calendar].[Date].&[2011-11-01T00:00:00]:[Time].[Calendar].[Date].&[2011-11-30T00:00:00]
        * {[Dimension1].[Dimension1].[Val1]}
        * {[Dimension2].[Dimension2].[Val2]}
        * {[Dimension3].[Dimension3].[Val3]}
        * {{[Dimension4].[Dimension4].[XXXX],[Dimension4].[Dimension4].[DBS],[Dimension4].[Dimension4].[FD],[Dimension4].[Dimension4].[GSCFDASIA],[Dimension4].[Dimension4].[FDEM],[Dimension4].[Dimension4].[DX],[Dimension4].[Dimension4].[OSWP],[Dimension4].[Dimension4].[OOO],[Dimension4].[Dimension4].[CFD]}}
        * {-{[Dimension5].[Dimension5].[SELI],[Dimension5].[Dimension5].[SELE],[Dimension5].[Dimension5].[MRDN],[Dimension5].[Dimension5].[WCSG],[Dimension5].[Dimension5].[NEWB],[Dimension5].[Dimension5].[VASS]}}
        }, [Measures].[Trade Count])

Как видите, это простой способ создать пересечение размерных значений, и он некоторое время прекрасно работал,

Недавно я переписал куб с использования одной таблицы измерений с множеством атрибутов на использование отдельной таблицы для каждого измерения (из соображений производительности обработки)

Проблема заключается в том, что при фильтрации поDimension4 и Dimension5 вместе, это внезапно очень медленно!если я закомментирую измерения 4 и 5, запрос займет секунду .. если я откомментирую, то запрос Dimension4 займет 40 секунд ... если я тогда откомментирую строку Dimension5, запрос займет 8 минут.

измерение присоединяется к мере по полю идентификатора (int)

измерение имеет 238 значений

, если я делаю простой запрос:

выберитерассчитывать на столбцы, {- {[измерение 5]. [измерение 5]. [SELI], [измерение 5]. [измерение 5]. [SELE], [измерение 5]. [измерение 5]. [MRDN], [измерение 5]. [измерение 5]. [WCSG], [Dimension5]. [Dimension5]. [NEWB], [Dimension5]. [Dimension5]. [VASS]}} в строках из MyCube

запрос занимает менее секунды.Это что-то из-за наличия комбинации измерений (вверх), которая делает это так мучительно медленным.Не знаю, как это устранить.

Стоит отметить, что мой куб имеет 13 разделов, и я не настроил шаг «агрегации разделов» при настройке разделов.

Ответы [ 2 ]

1 голос
/ 23 декабря 2011

После долгих проб и ошибок я обработал запрос за 6 минут (от 3,5 часов).

2 вещи позволили мне оптимизировать это следующим образом:

1.Используйте членов месяца / года в диапазоне дат вместо дат До:

SUM ({[Time].[Calendar].[Date].&[2011-11-01T00:00:00]:[Time].[Calendar].[Date].&[2011-11-30T00:00:00]

После

SUM ({[Time].[Month].&[2011-11-01T00:00:00]

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

2.Поместите все общие фильтры (во всех элементах) в общее предложение WHERE

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

В итоге мой запрос прошел с 4 часов до 6,5 минут.Я могу еще больше ускорить его, добавив соответствующие агрегации в мое определение куба.но пока не дошел до этой части.

0 голосов
/ 06 декабря 2011

Можете ли вы попробовать с этой версией?:

 WITH 
   MEMBER [Measures].[MTD] AS
    SUM ({[Time].[Calendar].[Date].&[2011-11-01T00:00:00]:[Time].[Calendar].[Date].&[2011-11-30T00:00:00]
    * {{[Dimension4].[Dimension4].[XXXX],[Dimension4].[Dimension4].[DBS],[Dimension4].[Dimension4].[FD],[Dimension4].[Dimension4].[GSCFDASIA],[Dimension4].[Dimension4].[FDEM],[Dimension4].[Dimension4].[DX],[Dimension4].[Dimension4].[OSWP],[Dimension4].[Dimension4].[OOO],[Dimension4].[Dimension4].[CFD]}}
    * {-{[Dimension5].[Dimension5].[SELI],[Dimension5].[Dimension5].[SELE],[Dimension5].[Dimension5].[MRDN],[Dimension5].[Dimension5].[WCSG],[Dimension5].[Dimension5].[NEWB],[Dimension5].[Dimension5].[VASS]}}
    }, ([Measures].[Trade Count],[Dimension1].[Dimension1].[Val1],[Dimension2].[Dimension2].[Val2],[Dimension3].[Dimension3].[Val3])  )

Знак - перед [Dimension5] это ошибка?

Это немного уменьшает кросс-соединение и помещает отдельные значения в кортеж.Хорошие вопросы, если это улучшает производительность.

...