DBMS_CUBE contains subprograms that create OLAP cubes and dimensions, and that load and process the data for querying.
See Also:
Oracle OLAP User's Guide regarding use of the OLAP option to support business intelligence and analytical applicationsThis chapter contains the following topics:
Cubes and dimensions are first class data objects that support multidimensional analytics. They are stored in a container called an analytic workspace. Multidimensional objects and analytics are available with the OLAP option to Oracle Database.
The metadata for cubes and dimensions is defined in XML templates, which you can generate interactively using a graphical tool named Analytic Workspace Manager.
The IMPORT_XML procedure creates an analytic workspace with its cubes and dimensions. The BUILD procedure loads data into the cubes and dimensions from their data sources and performs whatever processing steps are needed to prepare the data for querying. You can also use Analytic Workspace Manager to create analytic workspaces from XML and initiate a data load. The two methods are completely interchangeable.
Table 36-1 DBMS_CUBE Subprograms
| Subprogram | Description | 
|---|---|
| Loads data into one or more cubes and dimensions, and prepares the data for querying. | |
| Creates an analytic workspace, or adds objects to an existing analytic workspace, from an XML template. | |
| Checks the XML to assure that it is valid, without committing the results to the database. | 
This procedure loads data into one or more cubes and dimensions, and generates aggregate values in the cubes. The results are automatically committed to the database.
DBMS_CUBE.BUILD (
       SCRIPT                IN  VARCHAR2,
       METHOD                IN  VARCHAR2        DEFAULT NULL,
       REFRESH_AFTER_ERRORS  IN  BOOLEAN         DEFAULT FALSE,
       PARALLELISM           IN  BINARY_INTEGER  DEFAULT 0,
       ATOMIC_REFRESH        IN  BOOLEAN         DEFAULT FALSE,
       AUTOMATIC_ORDER       IN  BOOLEAN         DEFAULT TRUE,
       ADD_DIMENSIONS        IN  BOOLEAN         DEFAULT TRUE,
       SCHEDULER_JOB         IN  VARCHAR2        DEFAULT NULL);
Table 36-2 BUILD Procedure Parameters
| Parameter | Description | 
|---|---|
| 
 | A list of cubes and dimensions and their build options (see "SCRIPT Parameter"). | 
| 
 | A full or a fast (partial) refresh. In a fast refresh, only changed rows are inserted in the cube and the affected areas of the cube are re-aggregated. You can specify a method for each cube in sequential order, or a single method to apply to all cubes. If you list more cubes than methods, then the last method applies to the additional cubes. 
 See the "Usage Notes" for additional details. Methods do not apply to dimensions. | 
| 
 | 
 
 | 
| 
 | Number of parallel processes to allocate to this job (see Usage Notes). | 
| 
 | 
 FALSE enables users to access intermediate results during an build. | 
| 
 | 
 
 | 
| 
 | 
 
 | 
| 
 | Any text identifier for the job, which will appear in the log table. | 
The SCRIPT parameter identifies the objects that will be included in the build, and specifies the type of processing that will be performed on each one. The parameter has this syntax:
object [ USING ( commands ) ][,...]
Where:
object is the fully qualified name of a cube or a dimension in the form aw_name.object, such as GLOBAL.TIME.
SCRIPT Parameter: USING Clause
The USING clause specifies the processing options. It consists of one or more commands separated by commas.
Note:
A cube with a rewrite materialized view cannot have aUSING clause, except for the ANALYZE command. It uses the default build options.The commands can be any of the following.
CLEAR [ VALUES | LEAVES | AGGREGATES ]
Prepares the cube for a data refresh. It can also be used on dimensions, but CLEAR removes all dimension keys, and thus deletes all data values for cubes that use the dimension.
The optional arguments control the refresh method:
VALUES: Clears all data in the cube. This option supports the COMPLETE refresh method. (Default for the C and F methods)
LEAVES: Clears the detail data and retains the aggregates. This option supports the FAST refresh method. (Default for the ? method)
AGGREGATES: Clears the aggregates and retains the detail data.
LOAD [SYNCH | NO SYNCH]
Loads data into the dimension or cube. The optional arguments apply only to dimensions:
SYNCH matches the dimension keys to the relational data source. (Default)
NO SYNCH loads new dimension keys but does not delete old keys.
SOLVE
Aggregates the cube using the rules defined for the cube, including the aggregation operator and the precompute specifications. (Cubes only)
COMPILE
Creates the supporting structures for the dimension. (Dimensions only)
ANALYZE
Runs DBMS_AW_STATS.ANALYZE, which generates and stores optimizer statistics for cubes and dimensions.
EXECUTE OLAP DML string
Executes an OLAP DML command or program in the analytic workspace.
EXECUTE PLSQL string
Executes a PL/SQL command or script in the database.
MODEL model_name
Executes a model previously created for the cube.
AGGREGATE USING [MEASURE]
Generates aggregate values using the syntax described in "SCRIPT Parameter: USING Clause: AGGREGATE command".
SCRIPT Parameter: USING Clause: AGGREGATE command
The AGGREGATE command in a script specifies the aggregation rules for one or more measures.
Note:
TheAGGREGATE command is available only for uncompressed cubes.AGGREGATE has the following syntax:
{ AGGREGATE USING MEASURE
     WHEN measure1 THEN operator1
     WHEN measure2 THEN operator2...
          ELSE default_operator
|
 [AGGREGATE USING] operator_clause }
processing_options
OVER { ALL | dimension | dimension HIERARCHIES (hierarchy)}
This clause enables you to specify different aggregation operators for different measures in the cube.
The operator_clause has this syntax:
operator(WEIGHTBY expression | SCALEBY expression)
WEIGHTBY multiplies each data value by an expression before aggregation.
SCALEBY adds the value of an expression to each data value before aggregation.
Table 36-3 Aggregation Operators
| Operator | Option | Description | 
|---|---|---|
| 
 | 
 | Adds data values, then divides the sum by the number of data values that were added together. | 
| 
 | 
 | The first real data value. | 
| 
 | 
 | Adds data values, then divides the sum by the number of the children in the dimension hierarchy. Unlike AVERAGE, which counts only non-NA children, HAVERAGE counts all of the logical children of a parent, regardless of whether each child does or does not have a value. | 
| 
 | 
 | The first data value in the hierarchy, even when that value is NA. | 
| 
 | 
 | The last data value in the hierarchy, even when that value is NA. | 
| 
 | 
 | The last real data value. | 
| 
 | 
 | The largest data value among the children of each parent. | 
| 
 | 
 | The smallest data value among the children of each parent. | 
| 
 | 
 | Adds data values. (Default) | 
You can specify these processing options for aggregation:
(ALLOW | DISALLOW) OVERFLOW
Specifies whether to allow decimal overflow, which occurs when the result of a calculation is very large and can no longer be represented by the exponent portion of the numerical representation.
ALLOW: A calculation that generates overflow executes without error and produces null results. (Default)
DISALLOW: A calculation involving overflow stops executing and generates an error message.
(ALLOW | DISALLOW) DIVISION BY ZERO
Specifies whether to allow division by zero.
ALLOW: A calculation involving division by zero executes without error but returns a null value. (Default)
DISALLOW: A calculation involving division by zero stops executing and generates an error message.
(CONSIDER | IGNORE) NULLS
Specifies whether nulls are included in the calculations.
CONSIDER: Nulls are included in the calculations. A calculation that includes a null value returns a null value.
IGNORE: Only actual data values are used in calculations. Nulls are treated as if they do not exist. (Default)
MAINTAIN COUNT
Stores an up-to-date count of the number of dimension members for use in calculating averages. Omit this option to count the members on the fly.
The C, S, and ? methods always succeed and can be used on any cube.
The F and P methods require that the cube have a materialized view that was created as a fast or a rewrite materialized view.
Partitioned cubes can be loaded and aggregated in parallel processes. For example, a cube with five partitions can use up to five processes. Dimensions are always loaded serially.
The number of parallel processes actually used by a build is controlled by the smallest of these factors:
Number of cubes in the build and the number of partitions in each cube.
Setting of the PARALLELISM argument of the BUILD procedure.
Setting of the JOB_QUEUE_PROCESSES database initialization parameter.
Suppose UNITS_CUBE has 12 partitions, PARALLELISM is set to 10, and JOB_QUEUE_PROCESSES is set to 4. The build will use four processes, which will appear as slave processes in the build log.
The build log is stored as a table named CUBE_BUILD_LOG in the owner's schema. It is updated dynamically, so that you can monitor the progress of a build. Analytic Workspace Manager creates this log automatically. Otherwise, you can create the log file by running $ORACLE_HOME/olap/admin/utlolaplog.sql.
The following is an example of some columns from the default build of a cube named UNITS_CUBE.
SQL> SELECT command, status, build_object, build_object_type type 
     FROM cube_build_log WHERE build_id='1';
 
COMMAND              STATUS     BUILD_OBJECT                         TYPE
-------------------- ---------- ------------------------------------ ----------
BUILD                STARTED                                         BUILD
LOAD SYNCH           STARTED    TIME                                 DIMENSION
LOAD SYNCH           COMPLETED  TIME                                 DIMENSION
COMPILE              STARTED    TIME                                 DIMENSION
COMPILE              COMPLETED  TIME                                 DIMENSION
UPDATE               STARTED    TIME                                 DIMENSION
UPDATE               COMPLETED  TIME                                 DIMENSION
COMMIT               STARTED    TIME                                 DIMENSION
COMMIT               COMPLETED  TIME                                 DIMENSION
LOAD SYNCH           STARTED    PRODUCT                              DIMENSION
LOAD SYNCH           COMPLETED  PRODUCT                              DIMENSION
COMPILE              STARTED    PRODUCT                              DIMENSION
COMPILE              COMPLETED  PRODUCT                              DIMENSION
UPDATE               STARTED    PRODUCT                              DIMENSION
UPDATE               COMPLETED  PRODUCT                              DIMENSION
COMMIT               STARTED    PRODUCT                              DIMENSION
COMMIT               COMPLETED  PRODUCT                              DIMENSION
LOAD SYNCH           STARTED    CUSTOMER                             DIMENSION
LOAD SYNCH           COMPLETED  CUSTOMER                             DIMENSION
COMPILE              STARTED    CUSTOMER                             DIMENSION
COMPILE              COMPLETED  CUSTOMER                             DIMENSION
UPDATE               STARTED    CUSTOMER                             DIMENSION
UPDATE               COMPLETED  CUSTOMER                             DIMENSION
COMMIT               STARTED    CUSTOMER                             DIMENSION
COMMIT               COMPLETED  CUSTOMER                             DIMENSION
LOAD SYNCH           STARTED    CHANNEL                              DIMENSION
LOAD SYNCH           COMPLETED  CHANNEL                              DIMENSION
COMPILE              STARTED    CHANNEL                              DIMENSION
COMPILE              COMPLETED  CHANNEL                              DIMENSION
UPDATE               STARTED    CHANNEL                              DIMENSION
UPDATE               COMPLETED  CHANNEL                              DIMENSION
COMMIT               STARTED    CHANNEL                              DIMENSION
COMMIT               COMPLETED  CHANNEL                              DIMENSION
LOAD                 STARTED    UNITS_CUBE                           CUBE
LOAD                 COMPLETED  UNITS_CUBE                           CUBE
SOLVE                STARTED    UNITS_CUBE                           CUBE
SOLVE                COMPLETED  UNITS_CUBE                           CUBE
UPDATE               STARTED    UNITS_CUBE                           CUBE
UPDATE               COMPLETED  UNITS_CUBE                           CUBE
COMMIT               STARTED    UNITS_CUBE                           CUBE
COMMIT               COMPLETED  UNITS_CUBE                           CUBE
BUILD                COMPLETED                                       BUILD
 
42 rows selected.
This example uses the default parameters to build UNITS_CUBE.
EXECUTE DBMS_CUBE.BUILD('GLOBAL.UNITS_CUBE');
The next example builds UNITS_CUBE and explicitly builds two of its dimensions, TIME and CHANNEL.
BEGIN
      DBMS_CUBE.BUILD(
          'GLOBAL.TIME USING (LOAD NO SYNCH, COMPILE),
           GLOBAL.CHANNEL,
           GLOBAL.UNITS_CUBE USING (CLEAR LEAVES, LOAD, SOLVE, ANALYZE)
          ',
               '?',           -- solve
               false,         -- refresh after errors
               2,             -- parallelism
               false,         -- atomic refresh
               true,          -- automatic order
               false,         -- add dimensions
               'Units Cube'   -- identify job
      );
END;
/
This procedure creates an analytic workspace from an XML template.
DBMS_CUBE.IMPORT_XML
       (DIRNAME               IN      VARCHAR2,
        FILENAME              IN      VARCHAR2;
DBMS_CUBE.IMPORT_XML
       (IN_XML                IN      CLOB;
DBMS_CUBE.IMPORT_XML
       (IN_XML                IN      CLOB,
        OUT_XML               IN/OUT  CLOB );
Table 36-4 IMPORT_XML Procedure Parameters
| Parameter | Description | 
|---|---|
| 
 | The case-sensitive name of a database directory. | 
| 
 | The name of a file containing an XML template. | 
| 
 | The name of a CLOB containing an XML template. | 
| 
 | An XML file generated by  | 
The XML can define an entire analytic workspace, a single cube, or a single dimension. When re-creating just a cube or dimension, you must provide the context of an existing analytic workspace.
This example loads an XML template from a file named GLOBAL.XML and located in a database directory named XML_DIR.
SQL> EXECUTE dbms_cube.import_xml('XML_DIR', 'GLOBAL.XML');
The next example is a SQL script that creates the GLOBAL analytic workspace from an XML template stored in a CLOB. The file is named GLOBAL.XML, and it is located in a database directory named XML_DIR. The previous example shows a more direct method for using an XML file.
DEFINE xml_file = 'GLOBAL.XML';
SET ECHO ON;
SET SERVEROUT ON;
 
DECLARE
     xml_file     BFILE := bfilename('XML_DIR', '&xml_file');
     in_xml       CLOB;
     out_xml      CLOB := NULL;
     dest_offset  INTEGER := 1;
     src_offset   INTEGER := 1;
     lang_context INTEGER := 0;
     warning      INTEGER;
BEGIN
     -- Setup the clob from a file
     DBMS_LOB.CREATETEMPORARY(in_xml, TRUE);
     DBMS_LOB.OPEN(in_xml, DBMS_LOB.LOB_READWRITE);
     DBMS_LOB.OPEN(xml_file, DBMS_LOB.FILE_READONLY);
     DBMS_LOB.LOADCLOBFROMFILE(in_xml, xml_file, DBMS_LOB.LOBMAXSIZE,
        dest_offset, src_offset, 0, lang_context, warning);
  
     -- Import the xml
     DBMS_CUBE.IMPORT_XML(in_xml);
END;
/
This procedure checks the XML to assure that it is valid without committing the results to the database. It does not create an analytic workspace.
DBMS_CUBE.VALIDATE_XML
       (IN_XML                IN  CLOB ); 
Table 36-5 VALIDATE_XML Procedure Parameters
| Parameter | Description | 
|---|---|
| 
 | The name of a CLOB containing an XML template. | 
The XML template must be loaded into a CLOB (see Example).
You should always load a template into the same version and release of Oracle Database as the one used to generate the template. The XML may not be valid if it was generated by a different release of the software.
This example loads an XML template into a temporary CLOB, then validates it. The script is named GLOBAL.XML, and it is located in a database directory named XML_DIR.
DEFINE xml_file = 'GLOBAL.XML';
 
SET ECHO ON;
SET SERVEROUT ON;
 
 
DECLARE
     xml_file     BFILE := bfilename('XML_DIR', '&xml_file');
     in_xml       CLOB;
     out_xml      CLOB := NULL;
     dest_offset  INTEGER := 1;
     src_offset   INTEGER := 1;
     lang_context INTEGER := 0;
     warning      INTEGER;
BEGIN
     -- Setup the clob from a file
     DBMS_LOB.CREATETEMPORARY(in_xml, TRUE);
     DBMS_LOB.OPEN(in_xml, DBMS_LOB.LOB_READWRITE);
     DBMS_LOB.OPEN(xml_file, DBMS_LOB.FILE_READONLY);
     DBMS_LOB.LOADCLOBFROMFILE(in_xml, xml_file, DBMS_LOB.LOBMAXSIZE,
        dest_offset, src_offset, 0, lang_context, warning);
  
     -- Validate the xml
     DBMS_CUBE.VALIDATE_XML(in_xml);
END;
/