2

単純な 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 の「検出」リクエストが行われることがわかりました (値メンバー/レベル/プロパティなどごとに)。これらのリクエストの量を無効にするか最小限に抑えることはできますか?

4

1 に答える 1

0

3 つの階層は大きい可能性があります。関数と一緒に使用できるメジャーがある場合は、次のようにヒットする前に、セットを小さくする句をNonEmpty追加できます。WITHSELECT

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];
于 2015-09-16T15:06:34.560 に答える