diff --git a/doc/olap4j_fs.html b/doc/olap4j_fs.html index 6fb20fe..1698fff 100644 --- a/doc/olap4j_fs.html +++ b/doc/olap4j_fs.html @@ -1,11 +1,11 @@ - + + - - -olap4j Functional Specification +olap4j Functional Specification + - + @@ -84,7 +83,7 @@

olap4j Functional Specification

Revision: $Id: $ (log)
Last modified: October 17th, 2006.

-
+

Contents

    @@ -92,8 +91,7 @@

    Contents

  1. A brief history of OLAP standards
  2. Overview of olap4j
  3. -
  4. Relationship to other - standards
      +
    1. Relationship to other standards
      1. olap4j and XML/A
      2. olap4j is built on other standards
      3. @@ -149,6 +147,17 @@

        Contents

      4. Other methods
    2. Transform
    3. +
        +
      1. Query model details
      2. +
      3. Navigation actions
      4. +
          +
        1. Slicing navigations
        2. +
        3. Restructuring navigations
        4. +
        5. Drilling navigations
        6. +
        7. Scoping navigations
        8. +
        +
      5. Open issues
      6. +
    4. Layout
  5. @@ -207,7 +216,7 @@

    1.1. A brief history of OLAP sta query language. A query language is easier to explain than an API. It leaves unsolved the problem of how to construct queries to answer business questions, but application developers could solve that problem by embedding one of the -off-the-shelf OLAP clients. 

    +off-the-shelf OLAP clients.

    The Open Source community has been developing a taste for OLAP. First there was Mondrian, an open-source OLAP server; then there was JPivot, a client which first spoke to Mondrian, then also @@ -252,21 +261,29 @@

    1.2. Overview of olap4j

    higher-level query model, which includes operations to transform queries (also called 'navigations'), and facilities to layout multidimensional results as HTML tables.

    -

    1.3. Relationship to other -standards

    +

    1.3. Relationship to other standards

    +

    1.3.1. olap4j and XML/A

    At this point, you may be saying: what about XML/A? XML/A was here first, is an open standard, and is supported by a number of servers. Is olap4j an attempt to replace XML/A? Isn't XML/A good enough for everyone?

    -

    olap4j certainly has some similarities with XML/A. Both APIs allow an application to execute OLAP queries, and to browse the metadata of an OLAP schema. But XML/A is a -low-level web-services API which leaves a lot of work to the application writer. -(Witness the fact that the majority of successful XML/A applications run only on -Windows, where the ADOMD.NET is a high-level interface to XML/A servers.) +

    olap4j certainly has some similarities with XML/A. Both APIs allow +an application to execute OLAP queries, and to browse the metadata of +an OLAP schema. But XML/A is a +low-level web-services API which leaves a lot of work to the +application writer. +(Witness the fact that the majority of successful XML/A applications +run only on +Windows, where the ADOMD.NET is a high-level interface to XML/A +servers.) The APIs are mostly complementary, because olap4j can be easily -added to an XML/A back-end, and provides features which would be difficult or -impossible to provide via a web-services API. These are functions for parsing MDX, building and transforming MDX query models, and mapping result sets into +added to an XML/A back-end, and provides features which would be +difficult or +impossible to provide via a web-services API. These are functions for +parsing MDX, building and transforming MDX query models, and mapping +result sets into graphical layouts such as pivot tables.

    If a web-services based application needs these functions, it can use the @@ -326,20 +343,20 @@

    1.5. Architecture of olap4j

    1.6. Compatibility

    -

    olap4j requires JDK 1.5 or higher, in particular because it uses the generics +

    olap4j requires JDK 1.5 or higher, in particular because it uses the generics and enum features introduced in JDK 1.5.0.

    JDK 1.4 compability will be available on demand, using the -Retroweaver utility. This will -consist of a retrowoven JAR file, olap4j-jdk1.4.jar and +Retroweaver utility. This will +consist of a retrowoven JAR file, olap4j-jdk1.4.jar and retroweaver's runtime library retroweaver-rt-1.2.4.jar. (See design note.)

    -

    jdbc is consistent with JDBC version 3.0 (which was introduced in JDK 1.4 and +

    jdbc is consistent with JDBC version 3.0 (which was introduced in JDK 1.4 and is also in JDK 1.5).

    -

    JDBC version 4.0 is expected to be introduced in JDK 1.6.0. We expect JDBC -4.0 will add new methods to existing JDBC classes, and therefore compatibility +

    JDBC version 4.0 is expected to be introduced in JDK 1.6.0. We expect JDBC +4.0 will add new methods to existing JDBC classes, and therefore compatibility with JDBC 4.0 will require a new release of olap4j.

    @@ -349,8 +366,9 @@

    We now describe the olap4j API in more detail, by breaking it down into a set of functional areas.

    -olap4j components

    -2.1. Driver management

    +olap4j components + +

    2.1. Driver management

    olap4j shares JDBC's driver management facilities. This allows olap4j clients to leverage the support for JDBC such as @@ -369,7 +387,7 @@

    2.1.1. Driver

    Same functionality as JDBC.

    Here is an example of registering an olap4j driver:

    - Class.forName("mondrian.olap4j.Driver");
    + Class.forName("mondrian.olap4j.Driver");

    2.1.2. DriverManager

    Same functionality as JDBC.

    2.1.3. DataSource

    @@ -381,7 +399,7 @@

    2.2. Connections

    statements.

    Where possible, olap4j uses JDBC's session management facility. olap4j defines extensions to -JDBC interfaces Connection and Statement. 

    +JDBC interfaces Connection and Statement.

    For example, the following code registers a driver, connects to Mondrian and executes a statement:

    @@ -424,7 +442,7 @@

    2.2. Connections

    Package name: org.olap4j

    -

    2.2.1. OlapConnection

    +

    2.2.1. OlapConnection

    OlapConnection  (extends @@ -434,13 +452,14 @@

    2.2.1. OlapConnection

    2.2.2. Connection pooling

    -

    Look again at the code samples in the previous section. One would expect that it would be safe to downcast the result of a factory +

    Look again at the code samples in the previous section. One would +expect that it would be safe to downcast the result of a factory method to the desired result. For example, if you invoke an OlapConnection's createStatement() method, the result should be an OlapStatement.

    But if you you are using a connection-pooling -library (common examples of which include Jakarta Commons DBCP +library (common examples of which include Jakarta Commons DBCP and C3P0), this is not so. Every connection-pooling library tracks connections by wrapping them in another class, @@ -451,7 +470,7 @@

    2.2.2. Connection pooling

    If you are using a connection-pooling library, olap4j provides a helper class to access the object underneath a wrapped connection, statement, prepared statement or result set. For instance,

    -
    DataSource dataSource; // a data source using a connection +
    DataSource dataSource; // a data source using a connection pool
    Connection connection =
        DriverManager.createConnection(
    @@ -465,16 +484,16 @@

    2.2.2. Connection pooling

    The -Olap4j.convert(Connection) method returns an OlapConnection. It -works with common connection pools, and the resulting object is instrumented so -that any statements or prepared statements created from that connection also +Olap4j.convert(Connection) method returns an OlapConnection. It +works with common connection pools, and the resulting object is instrumented so +that any statements or prepared statements created from that connection also work with the connection pool.

    The problem does not just affect connections: some connection pools also wrap Statement, PreparedStatement, ResultSet -and DatabaseMetaData objects, so there are convert() +and DatabaseMetaData objects, so there are convert() methods for these too.

    -

    Hopefully this problem will only be temporary. As olap4j gains popularity, we -expect connection pools to add support for the extended interfaces, and it will +

    Hopefully this problem will only be temporary. As olap4j gains popularity, we +expect connection pools to add support for the extended interfaces, and it will be sufficient merely to cast the objects returned from factory methods.

    2.3. Statements

    @@ -565,31 +584,31 @@

    2.4. MDX query model

    Query query = new Query();
    query.setFrom("Sales");
    query.getAxes().add(
    -    new Axis(
    -        "ROWS",
    -        false,
    -        new UnresolvedFunCall(
    -            "{}",
    -            +    new Axis(
    +        "ROWS",
    +        false,
    +        new UnresolvedFunCall(
    +            "{}",
    +            Syntax.Special,
    -            new Id(new - String[] {"Measures", "Unit Sales"})));
    +            new Id(new + String[] {"Measures", "Unit Sales"})));

    // Create a statement based upon the query model.
    OlapStatement stmt;
    try {
    -    stmt = connection.createOlapStatement(query);
    +    stmt = connection.createOlapStatement(query);
    } catch (OlapException e) {
    -    System.out.println("Validation failed: " + e);
    -    return;
    +    System.out.println("Validation failed: " + e);
    +    return;
    }

    // Execute the statement.
    ResultSet rset;
    try {
    -    rset = stmt.execute();
    +    rset = stmt.execute();
    } catch (OlapException e) {
    -    System.out.println("Execution failed: " + e);
    +    System.out.println("Execution failed: " + e);
    }

    Package name: org.olap4j.mdx

    @@ -619,7 +638,8 @@

    2.5. MDX type model

    Here are some examples:

    - + + @@ -644,6 +664,7 @@

    2.5. MDX type model

    +
    Expression Type
    [Store].[USA].Children(2) Member<dimension=[Store], hierarchy=[Store], level=[Store].[State]>

    Since MDX is a late-binding language, some expressions will have unknown @@ -651,7 +672,7 @@

    2.5. MDX type model

    - [Store].Levels("Sta" + "te")
    + [Store].Levels("Sta" + "te")

    will have type Level<dimension=[Store], level=unknown>. The validator knows that the <hierarchy>.Levels(<string expr>) function @@ -671,28 +692,31 @@

    2.5. MDX type model

    DecimalType (extends NumericType) represents a fixed-point numeric expression. It is a subclass of NumericType, and has precision and scale. An integer expression would have scale 0. -
  6. StringType (extends ScalarType) represents the type of an expression which has a string - value.
  7. -
  8. SymbolType (extends ScalarType) represents the type of a - symbol, or flag, argument to a builtin function. For example, the ASC +
  9. StringType + (extends ScalarType) + represents the type of an expression which has a string value.
  10. +
  11. SymbolType + (extends ScalarType) + represents the type of a symbol, or flag, argument to a builtin function. + For example, the ASC keyword in the expression Order(Gender.MEMBERS, Measures.[Unit Sales], ASC) is a symbol. Symbol types are rarely used except if you are manipulating a parse tree.
  12. Metadata types:

    A metadata type may be constrained to a particular part of the schema. For example, LevelType(hierarchy=[Time]) indicates that the expression @@ -841,7 +865,8 @@

    2.6.3. Methods which return sc olap4j method.

    - + + @@ -945,7 +970,7 @@

    2.6.3. Methods which return sc getSets -

    XML for Analysis schema rowset OlapDatabaseMetaData method
    +

    The rows returned in the result set returned from the metadata methods are structured according to the result set column layouts detailed in this @@ -961,8 +986,8 @@

    2.6.3. Methods which return sc column.

    - - + + @@ -997,7 +1022,7 @@

    2.6.3. Methods which return sc means nulls are allowed, and the data is optional. No means that the data is required.

    -
    Column heading
    Column heading Contents
    +

    [Need to clean up data types in the following tables. Types should all be JDBC types.]

    [Need to clean up column names in the following tables. Columns should be @@ -1012,7 +1037,7 @@

    2.6.3.1. getDatasources

    The returned result set contains the following columns.

    - + @@ -1055,7 +1080,7 @@
    2.6.3.1. getDatasources

    A string containing any additional information required to connect to the data source. This can include the Initial Catalog property or other information for the provider.

    -

    Example: "Provider=MSOLAP;Data Source=Local;"

    +

    Example: "Provider=MSOLAP;Data Source=Local;"

    @@ -1064,7 +1089,7 @@
    2.6.3.1. getDatasources
    @@ -1109,7 +1134,7 @@
    2.6.3.1. getDatasources
    -
    Column name Type Description Yes
    string

    The name of the provider behind the data source.

    -

    Example: "MSDASQL"

    +

    Example: "MSDASQL"

    Yes
    No
    +

    2.6.3.2. getDatabaseProperties
    @@ -1121,7 +1146,7 @@
    2.6.3.2. getDatabaseProperties

    The returned result set contains the following columns.

    - + @@ -1184,7 +1209,7 @@
    2.6.3.2. getDatabaseProperties
    -
    Column name Type Description Yes
    +

    [Is VALUE a JDBC reserved word? If so, change it.]

    @@ -1195,7 +1220,7 @@
    2.6.3.3 getLiterals

    The returned result set contains the following columns.

    - + @@ -1218,7 +1243,7 @@
    2.6.3.3 getLiterals

    Example, if LiteralName is DBLITERAL_LIKE_PERCENT and the percent character (%) is used to match zero or more characters in a LIKE clause, this column’s value would be - "%".

    + "%".

    @@ -1266,7 +1291,7 @@
    2.6.3.3 getLiterals
    -
    Column name Type Description No Yes
    +
    2.6.3.4. getCubes
    @@ -1275,7 +1300,7 @@
    2.6.3.4. getCubes

    The returned result set contains the following columns.

    - + @@ -1379,7 +1404,7 @@
    2.6.3.4. getCubes
    -
    Column name Type indicator Description DBTYPE_WSTR (Optional) A set of notes, in XML format.
    +

    The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME.

    @@ -1391,7 +1416,7 @@
    2.6.3.5. getDimensions

    The returned result set contains the following columns.

    - + @@ -1490,8 +1515,10 @@
    2.6.3.5. getDimensions
    + is write-enabled. + +

    TRUE if the dimension is + write-enabled.

    @@ -1515,7 +1542,7 @@
    2.6.3.5. getDimensions
    -
    Column name Type indicator Description IS_READWRITE DBTYPE_BOOL A Boolean that indicates whether the dimension - is write-enabled.

    TRUE if the dimension is - write-enabled.

    DIMENSION_UNIQUE_SETTINGS DBTYPE_BOOL Always TRUE.
    +

    The result set is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_NAME.

    @@ -1528,7 +1555,7 @@
    2.6.3.6. getFunctions

    The returned result set contains the following columns.

    - + @@ -1570,7 +1597,7 @@
    2.6.3.6. getFunctions
    + Expressions (MDX) functions.

    @@ -1583,7 +1610,7 @@
    2.6.3.6. getFunctions
    + VT_NULL for MDX functions.

    @@ -1591,7 +1618,7 @@
    2.6.3.6. getFunctions
    + functions.

    @@ -1605,16 +1632,16 @@
    2.6.3.6. getFunctions
    + functions.

    -
    Column name Type indicator Description DBTYPE_WSTR The name of the interface for user-defined functions

    The group name for Multidimensional - Expressions (MDX) functions.

    LIBRARY_NAME DBTYPE_WSTR (Optional) The name of the assembly that implements the user-defined function.

    Returns - VT_NULL for MDX functions.

    HELP_FILE (Optional) The name of the file that contains the help documentation for the user-defined function.

    Returns VT_NULL for MDX - functions.

    HELP_CONTEXT (Optional) The generic name of the object class to which a property applies. For example, the rowset corresponding to the <level_name>.Members function - returns "Level".

    Returns VT_NULL for + returns "Level".

    Returns VT_NULL for user-defined functions, or non-property MDX - functions.

    CAPTION DBTYPE_WSTR The display caption for the function.
    +

    The rowset is sorted on ORIGIN, INTERFACE_NAME, FUNCTION_NAME.

    @@ -1626,7 +1653,7 @@
    2.6.3.7. getHierarchies

    The returned result set contains the following columns.

    - + @@ -1756,7 +1783,7 @@
    2.6.3.7. getHierarchies
    + represents this hierarchy is enabled.

    @@ -1792,7 +1819,7 @@
    2.6.3.7. getHierarchies
    + is visible; otherwise, FALSE.

    @@ -1810,7 +1837,7 @@
    2.6.3.7. getHierarchies
    has a value of 0x0000004.

    A parent/child attribute hierarchy is both - MD_USER_DEFINED and MD_SYSTEM_ENABLED. + MD_USER_DEFINED and MD_SYSTEM_ENABLED.

    @@ -1834,7 +1861,7 @@
    2.6.3.7. getHierarchies
    -
    Column name Type indicator Description A Boolean that indicates whether the Write Back to dimension column is enabled.

    Returns TRUE if the Write Back to dimension column that - represents this hierarchy is enabled.

    DIMENSION_UNIQUE_SETTINGS DBTYPE_BOOL A Boolean that indicates whether the hieararchy is visible.

    Returns TRUE if the hierarchy - is visible; otherwise, FALSE.

    HIERARCHY_ORIGIN
    HIERARCHY_DISPLAY_FOLDER
    +

    The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_UNIQUE_NAME, @@ -1845,7 +1872,7 @@

    2.6.3.8. getLevels

    Specified by the MDSCHEMA_LEVELS XML for Analysis method.

    The returned result set contains the following columns.

    - + @@ -2006,7 +2033,7 @@
    2.6.3.8. getLevels
    + rowset.

    @@ -2020,7 +2047,7 @@
    2.6.3.8. getLevels
    + column.

    @@ -2072,7 +2099,7 @@
    2.6.3.8. getLevels
    -
    Column name Type indicator Description A Boolean that indicates whether the level is visible.

    Always returns True. If the level is not visible, it will not be included in the schema - rowset.

    LEVEL_ORDERING_PROPERTY The DBTYPE enumeration of the member key column that is used for the level attribute.

    Null if concatenated keys are used as the member key - column.

    LEVEL_MASTER_UNIQUE_NAME
    +

    The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_UNIQUE_NAME, @@ -2083,7 +2110,7 @@

    2.6.3.9. getMeasures

    Specified by the MDSCHEMA_MEASURES XML for Analysis method.

    The returned result set contains the following columns.

    - + @@ -2092,7 +2119,7 @@
    2.6.3.9. getMeasures
    - + @@ -2100,7 +2127,7 @@
    2.6.3.9. getMeasures
    - + @@ -2108,20 +2135,20 @@
    2.6.3.9. getMeasures
    - + - + - + @@ -2129,7 +2156,7 @@
    2.6.3.9. getMeasures
    - + @@ -2137,13 +2164,13 @@
    2.6.3.9. getMeasures
    - + - + - + - + @@ -2184,7 +2211,7 @@
    2.6.3.9. getMeasures
    - + - + - + - + - + @@ -2220,34 +2247,34 @@
    2.6.3.9. getMeasures
    - + - + - + - + - + - + -
    Column name Type indicator Length
    CATALOG_NAME DBTYPE_WSTR   The name of the catalog to which this measure belongs. NULL if the provider does not support catalogs.
    SCHEMA_NAME DBTYPE_WSTR   The name of the schema to which this measure belongs. NULL if the provider does not support schemas.
    CUBE_NAME DBTYPE_WSTR   The name of the cube to which this measure belongs.
    MEASURE_NAME DBTYPE_WSTR   The name of the measure.
    MEASURE_UNIQUE_NAME DBTYPE_WSTR   The Unique name of the measure. For providers that generate unique names by qualification, each component of this name is delimited.
    MEASURE_CAPTION DBTYPE_WSTR   A label or caption associated with the measure. Used primarily for display purposes. If a caption does not exist, MEASURE_NAME is returned.
    MEASURE_GUID DBTYPE_GUID   Not supported.
    MEASURE_AGGREGATOR DBTYPE_I4   An enumeration that identifies how a measure was derived. Can be one of the following values:
    • MDMEASURE_AGGR_SUM (1)
    • @@ -2170,13 +2197,13 @@
      2.6.3.9. getMeasures
    DATA_TYPE DBTYPE_UI2   The data type of the measure.
    NUMERIC_PRECISION DBTYPE_UI2   The maximum precision of the property if the measure object's data type is exact numeric. NULL for all other property types.
    NUMERIC_SCALE DBTYPE_I2   The number of digits to the right of the decimal point if the measure object's type indicator is DBTYPE_NUMERIC or DBTYPE_DECIMAL. @@ -2193,26 +2220,26 @@
    2.6.3.9. getMeasures
    MEASURE_UNITS DBTYPE_WSTR   Not supported
    DESCRIPTION DBTYPE_WSTR   A human-readable description of the measure. NULL if no description exists.
    EXPRESSION DBTYPE_WSTR   An expression for the member.
    MEASURE_IS_VISIBLE DBTYPE_BOOL   A Boolean that always returns True. If the measure is not visible, it will not be included in the schema rowset.
    LEVELS_LIST DBTYPE_WSTR   A string that always returns NULL.
    MEASURE_NAME_SQL_COLUMN_NAME DBTYPE_WSTR   The name of the column in the SQL query that corresponds to the measure's name.
    MEASURE_UNQUALIFIED_CAPTION DBTYPE_WSTR   The name of the measure, not qualified with the measure group name.
    MEASUREGROUP_NAME DBTYPE_WSTR   The name of the measure group to which the measure belongs.
    MEASURE_DISPLAY_FOLDER DBTYPE_WSTR   The path to be used when displaying the measure in the user interface. Folder names will be separated by a semicolon. Nested folders are @@ -2256,10 +2283,10 @@
    2.6.3.9. getMeasures
    DEFAULT_FORMAT_STRING DBTYPE_WSTR   The default format string for the measure.
    +

    The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, MEASURE_NAME.

    @@ -2270,7 +2297,7 @@
    2.6.3.10. getMembers

    The returned result set contains the following columns.

    - + @@ -2279,74 +2306,74 @@
    2.6.3.10. getMembers
    - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -2380,7 +2407,7 @@
    2.6.3.10. getMembers
    - + - + @@ -2397,69 +2424,73 @@
    2.6.3.10. getMembers
    - + - + - + - + - + - + +

    - + + data member. + +

    Returns True if the member is a data + member.

    - + + requested).

    -
    Column name Type indicator Length
    CATALOG_NAME DBTYPE_WSTR   The name of the database to which this member belongs.
    SCHEMA_NAME DBTYPE_WSTR   The name of the schema to which this member belongs.
    CUBE_NAME DBTYPE_WSTR   The name of the cube to which this member belongs.
    DIMENSION_UNIQUE_NAME DBTYPE_WSTR   The unique name of the dimension to which this member belongs.
    HIERARCHY_UNIQUE_NAME DBTYPE_WSTR   The unique name of the hierarchy to which this member belongs.
    LEVEL_UNIQUE_NAME DBTYPE_WSTR   The unique name of the level to which this member belongs.
    LEVEL_NUMBER DBTYPE_UI4   The distance of the member from the root of the hierarchy. The root level is zero (0).
    MEMBER_ORDINAL DBTYPE_UI4   (Deprecated) Always returns 0.
    MEMBER_NAME DBTYPE_WSTR   The name of the member.
    MEMBER_UNIQUE_NAME DBTYPE_WSTR   The unique name of the member.
    MEMBER_TYPE DBTYPE_I4   The type of the member:
    • MDMEMBER_TYPE_REGULAR (1)
    • @@ -2365,14 +2392,14 @@
      2.6.3.10. getMembers
    MEMBER_GUID DBTYPE_GUID   The GUID of the member. NULL if no GUID exists.
    MEMBER_CAPTION DBTYPE_WSTR   A label or caption associated with the member. Used primarily for display purposes. If a caption does not exist, MEMBER_NAME is returned.
    CHILDREN_CARDINALITY DBTYPE_UI4   The number of children that the member has. This can be an estimate, so consumers should not rely on this to be the exact count. Providers should return @@ -2389,7 +2416,7 @@
    2.6.3.10. getMembers
    PARENT_LEVEL DBTYPE_UI4   The distance of the member's parent from the root level of the hierarchy. The root level is zero (0).
    PARENT_UNIQUE_NAME DBTYPE_WSTR   The unique name of the member's parent. NULL is returned for any members at the root level.
    PARENT_COUNT DBTYPE_UI4   The number of parents that this member has.
    DESCRIPTION DBTYPE_WSTR   Always returns NULL.
    EXPRESSION DBTYPE_WSTR   The expression for calculations, if the member is of type MDMEMBER_TYPE_FORMULA.
    MEMBER_KEY DBTYPE_WSTR   The value of the member's key column. Returns NULL if the member has a composite key.
    IS_PLACEHOLDERMEMBER DBTYPE_BOOL   A Boolean that indicates whether a member is a placeholder member for an empty position in a dimension hierarchy.

    It is valid only if the MDX Compatibility property has been set to 1. -

    IS_DATAMEMBER DBTYPE_BOOL   A Boolean that indicates whether the member is a - data member.

    Returns True if the member is a data - member.

    Zero or more additional columns DBTYPE_UI2   No properties are returned if the members could be returned from multiple levels. For example, if the Tree operator is PARENT and SELF for a non-parent child hierarchy, no member - properties are returned.

    This applies to ragged + properties are returned. + +

    This applies to ragged hierarchies where tree operators could return members from different levels (for example, if the prior level contains holes and parent on members is - requested).

    +

    The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME, DIMENSION_UNIQUE_NAME, @@ -2473,7 +2504,7 @@

    2.6.3.11. getProperties

    The returned result set contains the following columns.

    - + @@ -2576,32 +2607,39 @@
    2.6.3.11. getProperties
    + it is a character, binary, or bit type. + +

    Zero indicates there is no defined maximum length.

    + +

    Returns NULL for all other data types.

    + property, if it is a character or binary type. + +

    Zero indicates there is no defined maximum length.

    + +

    Returns NULL for all other data types.

    + a numeric data type. + +

    Returns NULL for all + other data types.

    + DBTYPE_DECIMAL type. + +

    Returns NULL for all other data types.

    @@ -2735,10 +2773,12 @@
    2.6.3.11. getProperties
    + visible. + +

    TRUE if the property is visible; + otherwise, FALSE.

    -
    Column name Type indicator Description CHARACTER_MAXIMUM_LENGTH DBTYPE_UI4 The maximum possible length of the property, if - it is a character, binary, or bit type.

    Zero - indicates there is no defined maximum length.

    -

    Returns NULL for all other data types.

    CHARACTER_OCTET_LENGTH DBTYPE_UI4 The maximum possible length (in bytes) of the - property, if it is a character or binary type.

    - Zero indicates there is no defined maximum length.

    -

    Returns NULL for all other data types.

    NUMERIC_PRECISION DBTYPE_UI2 The maximum precision of the property, if it is - a numeric data type.

    Returns NULL for all - other data types.

    NUMERIC_SCALE DBTYPE_I2 The number of digits to the right of the decimal point, if it is a DBTYPE_NUMERIC or - DBTYPE_DECIMAL type.

    Returns NULL for - all other data types.

    DESCRIPTION PROPERTY_IS_VISIBLE DBTYPE_BOOL A Boolean that indicates whether the property is - visible.

    TRUE if the property is visible; - otherwise, FALSE.

    +

    This schema rowset is not sorted.

    @@ -2749,7 +2789,7 @@
    2.6.3.12. getSets

    The returned result set contains the following columns.

    - + @@ -2815,17 +2855,15 @@
    2.6.3.12. getSets
    backslash (\), folders are separated by a semicolon (;). -
    Column name Type indicator Description
    +

    The rowset is sorted on CATALOG_NAME, SCHEMA_NAME, CUBE_NAME.

    -

     

    -

    2.6.4. Other methods

    - + @@ -2833,7 +2871,7 @@

    2.6.4. Other methods

    -
    Method Description
    getMdxKeywords() Returns
    +

    OlapDatabaseMetaData extends

    Classes:

    @@ -2856,7 +2894,6 @@

    2.6.4. Other methods

  13. Cube contains Dimensions, Hierarchies, Measures, Sets
  14. Hierarchy contains Levels
  15. -

     

    2.7. Transform

    @@ -2868,7 +2905,7 @@

    2.7. Transform

    SELECT {[Measures].[Store Sales], [Measures].[Unit Sales]} ON COLUMNS,
    -  {[Product].Members} ON ROWS
    +  {[Product].Members} ON ROWS
    FROM [Sales] @@ -2877,13 +2914,136 @@

    2.7. Transform

    SELECT {[Measures].[Store Sales], [Measures].[Unit Sales]} ON COLUMNS,
    -  Order({[Product].Members}, [Measures].[Unit Sales], ASC) ON ROWS
    +  Order({[Product].Members}, [Measures].[Unit Sales], ASC) ON ROWS
    FROM [Sales]
    +

    Transformations can only modify a query within a cube - it cannot be used to +change the cube that the query is against or to join two cubes. Similarly, the +transform package only supports modifying a MDX query model. For example, a +"drill" transform can not be used to produce a SQL query that returns data +outside of the cube.

    +

    Package name: org.olap4j.transform

    -

    Classes: TBD

    +

    Classes: (incomplete)

    + + +

    2.7.1. Query Model Details

    +

    This section should probably be moved into Section 2.4

    + +

    The MDX query language uses a data model based on cubes, dimensions, tuples +and sets. The transformation package allows direct manipulation of a query +exploring a cube.

    + +

    A tuple is a multidimensional member. It is a combination of members from one +or more dimensions, with the limitation that only one member can be used from each +dimension. A set is an ordered collection of tuples. An MDX query selects +zero or more axes using a data slicer. (The axes loosely correspond to the "SELECT" +clause in a SQL query, and the slicer to the "WHERE".) + +

    2.7.2. Navigation Actions

    + +

    The defined set of navigations can be divided into four categories: Slicing, +Restructuring, Drilling, Scoping.

    + +
    2.7.2.1. Slicing Navigations
    +
    +
    setSlicer
    Secifies the slicer to use, replacing any current one.
    +
    getSlicer
    Retrieve the current slicer.
    +
    excludeEmpty
    Removes empty slices from the results.
    +
    setLimit
    Limits the results to the top/bottom n results + for a specified measure.
    +
    + +
    2.7.2.2. Restructuring Navigations
    +

    Restructuring navigations change the axes of the returned cube.

    + +
    +
    getAxis
    +
    setAxis
    Specifies the Set to use for an Axis. Can be used to add or + replace a axis.
    +
    deleteAxis
    Removes the specified Axis from the results.
    +
    addToAxis
    Appends a new Tuple or Set to an Axis.
    +
    moveTuple
    Moves a tuple from one Axis to another. If the tuple + is not contained in the first axis this method behaves like addToAxis on + the second axis.
    +
    reorderAxis
    Reorders the tuples in the axis.
    +
    addTotal
    Adds an aggregation (total, min, max, count, distinct) + to the specified member. More than one aggregation can be added to a single + member.
    +
    deleteTotal
    Deletes an aggregation from the specified member.
    +
    + +
    2.7.2.3. Drilling Navigations
    +

    Navigations that allow a user to move through the levels in a hierarchy. All +drill navigations operate on a single Axis.

    + + +
    2.7.2.4. Scoping Navigations
    +

    Navigations that allow a user to expand/collapse sections of a result set. +All scoping navigations operate on single Axis.

    + + +
    2.7.2.5. Supporting Actions
    +

    Axis Operations

    + + +

    Set Operations

    + + +

    Tuple Operations

    + + +

    Open Issues

    +

    2.8. Layout

    @@ -2982,15 +3142,15 @@

    Appendix B. Feedback

    Richard Emberson, email, 2006/8/15

    -

    "One thing we found about XMLA was that our users wanted all roles to be -defined, stored, modified, and accessed though the same mechanism. With a large -application with many areas that can be permissioned, it is important that -olap4j let an application builder manage roles externally and apply them as part -of an individual's execution context."

    +

    "One thing we found about XMLA was that our users wanted all roles to be +defined, stored, modified, and accessed though the same mechanism. With a large +application with many areas that can be permissioned, it is important that +olap4j let an application builder manage roles externally and apply them as part +of an individual's execution context."

    Appendix C. Open issues

    -

    These issues will be voted upon at the next meeting. If they are accepted, +

    These issues will be voted upon at the next meeting. If they are accepted, they will generally be put into the spec.

    (No issues are currently open.)

    @@ -3006,7 +3166,7 @@

    D.2. Design notes

    JDK. We are targeting JDK 1.5, and running retroweaver for backward compatibility for JDK 1.4. See forum thread: - + olap4j, JDK 1.5 and generics.

    Appendix E. References

    @@ -3014,8 +3174,6 @@

    Appendix E. References

    1. XMLA: XML for Analysis Specification, version 1.1

    -
    - - +
    - \ No newline at end of file +