олап4дж. Запрос MDX (XMLA) занимает слишком много времени

У меня есть простой запрос MDX. Его выполнение занимает менее 1 секунды:

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 запросов на «обнаружение» для получения метаданных (для каждого значения члена/уровня/свойства и т. д.). Можно ли отключить или минимизировать количество этих запросов?


person Aries    schedule 16.09.2015    source источник


Ответы (1)


Три иерархии могут быть большими — если у вас есть некоторая мера, которую вы могли бы использовать вместе с функцией 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];
person whytheq    schedule 16.09.2015
comment
Проблема не в MDX, а в olap4j. Ваш метод не влияет на количество запросов на обнаружение XMLA: MDSCHEMA_MEMBERS, MDSCHEMA_PROPERTIES, MDSCHEMA_LEVELS, MDSCHEMA_HIERARCHIES. - person Aries; 17.09.2015