2015-09-16 3 views
2

У меня есть простой запрос MDX. Она занимает менее 1 секунды, чтобы выполнить его:olap4j. Запрос MDX (XMLA) занимает слишком много времени

SELECT 
NON EMPTY { } ON COLUMNS, 
NON EMPTY 
    {[Z_OP].[LEVEL01].MEMBERS * 
    [Z_NV].[LEVEL01].MEMBERS * 
    [Z_DT].[LEVEL01].MEMBERS } 
ON ROWS 
FROM 
    [Z_TEST/Z_TEST_REQ] 

Однако, когда я использую olap4j библиотеки она занимает больше времени, чем 30 секунд, чтобы выполнить его. Вот мой код:

Class.forName("org.olap4j.driver.xmla.XmlaOlap4jDriver"); 
final String query = "[query]"; 
final Connection connection = 
    DriverManager.getConnection(
     "jdbc:xmla:Server=[URL]?sap-client=200;catalog=[catalog]", 
     "[login]", 
     "[password]"); 

final OlapConnection olapConnection = connection.unwrap(OlapConnection.class); 

final CellSet cellSet = olapConnection 
    .createStatement() 
    .executeOlapQuery(query); 

я узнал, что это делает дополнительные 300 «Обнаружить» запросы на получение метаданных (для каждого члена значения/уровня/собственность и т.д.). Можно ли отключить или минимизировать количество этих запросов?

ответ

0

Три иерархий может быть большим - если у вас есть какой-то мере, что вы могли бы использовать вместе с функцией NonEmpty тогда, возможно, вы могли бы добавить пункт WITH, чтобы сделать наборы меньше, прежде чем поразить SELECT:

WITH 
    SET [OP] AS NONEMPTY([Z_OP].[LEVEL01].MEMBERS, [MEASURES].[EssentialMeasureInCube]) 
    SET [NV] AS NONEMPTY([Z_NV].[LEVEL01].MEMBERS, [MEASURES].[EssentialMeasureInCube]) 
    SET [DT] AS NONEMPTY([Z_DT].[LEVEL01].MEMBERS, [MEASURES].[EssentialMeasureInCube]) 
SELECT 
    NON EMPTY { } ON 0, 
    NON EMPTY [OP] * [NV] * [DT] ON 1 
FROM 
    [Z_TEST/Z_TEST_REQ]; 
+0

проблема не в MDX, она находится в olap4j. Ваш метод не влияет на запросы обнаружения XMLA: MDSCHEMA_MEMBERS, MDSCHEMA_PROPERTIES, MDSCHEMA_LEVELS, MDSCHEMA_HIERARCHIES. – Aries

Смежные вопросы