Java olap4j。MDX(XMLA)查询花费的时间太长

Java olap4j。MDX(XMLA)查询花费的时间太长,java,mdx,xmla,olap4j,Java,Mdx,Xmla,Olap4j,我有一个简单的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("

我有一个简单的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个“发现”请求。是否可以禁用或最小化这些请求的数量?

这三个层次结构可能很大-如果您有一些措施可以与函数
NonEmpty
一起使用,那么您可以添加一个
with
子句,以便在点击
选择之前减小集合:

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];

问题不在MDX中,而是在olap4j中。您的方法不会影响XMLA发现请求的数量:MDSCHEMA_成员、MDSCHEMA_属性、MDSCHEMA_级别、MDSCHEMA_层次结构。