Для контекста, я не эксперт SSAS или даже заядлый пользователь, я в первую очередь разработчик Java.У нас есть команда специалистов в области данных, которая использует SSAS для написания, разработки и тестирования различных моделей.
Чтобы интегрировать выходные данные этих моделей с другими системами сторонних разработчиков, я создаю службу на основе Java, которая можетзапросите определенные поля из куба, используя Olap4j / XMLA для запуска запроса MDX.Но производительность (или ее отсутствие) сбивает меня с толку.
Если я открою MSS Studio, «просмотрю» куб, перетащу ряд мер на панель мер, переключу «Показать пустые ячейки» (иначе для некоторыхпричина, по которой я не получаю результатов) и нажимаю «выполнить», я получаю ожидаемые результаты практически мгновенно.Если я нажимаю на красный квадрат, чтобы отключить «режим разработки», я перехожу к коду MDX, который выглядит примерно так:
SELECT { } ON COLUMNS, { (
[Main].[Measure01].[Measure01].ALLMEMBERS *
[Main].[Measure02].[Measure02].ALLMEMBERS *
[Main].[Measure03].[Measure03].ALLMEMBERS *
[Main].[Measure04].[Measure04].ALLMEMBERS
) } DIMENSION PROPERTIES MEMBER_CAPTION, MEMBER_UNIQUE_NAME ON ROWS FROM (
SELECT ( {
[Main].[Measure01].&[1]
} ) ON COLUMNS FROM [Model])
CELL PROPERTIES VALUE
Если я возьму этот запрос MDX и вставлю его в свое Java-приложение,и запустить его, потребуется более 30 секунд, чтобы вернуть результаты, используя следующий код:
Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver");
Connection connection = DriverManager.getConnection(cubeUrl);
OlapConnection olapConnection = connection.unwrap(OlapConnection.class);
olapConnection.setCatalog(catalog);
OlapStatement statement = olapConnection.createStatement();
LOG.info("Running Cube query");
CellSet cellSet = statement.executeOlapQuery("<<The MDX Query here>>");
И чем больше мер я добавлю, тем медленнее получится.Я попытался добавить в код некоторые контрольные точки журналирования и отладки, но на самом деле кажется, что сам SSAS медленно возвращает мои данные.
Учитывая, что я очень мало знаю о SSAS, что я могу сделатьпытаться?Есть ли в Olap4j некоторые параметры конфигурации, которые я не установил?Проводит ли MSS Studio некоторую оптимизацию за кулисами, которую я не могу воспроизвести?
РЕДАКТИРОВАТЬ 1:
На догадке я установил Wireshark для мониторинга своего сетевого трафика,и пока мой запрос выполняется, я вижу сотни тысяч, если не миллионы пакетов, проходящих между моим ноутбуком и сервером SSAS.Сетевые пакеты трудно интерпретировать, но многие из них, похоже, отправляют HTTP-данные со значениями показателей. Такие вещи, как:
<Member Hierarchy="[Main].[Measure01]">
<UName>[Main].[Measure01].&[0]</UName>
<Caption>0.00</Caption>
<LName>[Main].[Measure01].[Measure01]</LName>
<LNum>1</LNum>
<DisplayInfo>131072</DisplayInfo>
<MEMBER_CAPTION>0.00</MEMBER_CAPTION>
<MEMBER_UNIQUE_NAME>[Main].[Measure01].&[0]</MEMBER_UNIQUE_NAME>
<MEMBER_NAME>0</MEMBER_NAME>
<MEMBER_VALUE xsi:type="xsd:double">0</MEMBER_VALUE>
</Member>
<Member Hierarchy="[Main].[Measure02]">
<UName>[Main].[Measure02].&[0]</UName>
<Caption>0</Caption>
<LName>[Main].[Measure02].[Measure02]</LName>
<LNum>1</LNum>
<DisplayInfo>131072</DisplayInfo>
<MEMBER_CAPTION>0</MEMBER_CAPTION>
<MEMBER_UNIQUE_NAME>[Main].[Measure02].&[0]</MEMBER_UNIQUE_NAME>
<MEMBER_NAME>0</MEMBER_NAME>
<MEMBER_VALUE xsi:type="xsd:double">0</MEMBER_VALUE>
</Member>
<Member Hierarchy="[Main].[Measure03]">
<UName>[Main].[Measure03].&</UName>
<Caption/>
<LName>[Main].[Measure03].[Measure03]</LName>
<LNum>1</LNum>
<DisplayInfo>131072</DisplayInfo>
<MEMBER_UNIQUE_NAME>[Main].[Measure03].&</MEMBER_UNIQUE_NAME>
<MEMBER_VALUE xsi:nil="true"/>
</Member>
Так что кажется, что медлительность может фактически быть сетевым трафиком!Есть ли способ получить olap4j / IIS / SSAS для сжатия трафика, чтобы я мог получить такую же производительность в olap4j, как и в MSS, где тот же объем данных извлекается менее чем за секунду?