Delete dimension/cube in Analytic Workspace

Hello, I've created some dimensions and cubes in an analytic workspace using DBMS_AW package. But, How can I delete these objects using a similar methodology? I have not found any procedure like CREATE_AWDIMENSION/CREATE_AWCUBE that helps me to delete the object.
Thanks by your help.

In 9.2x code stream, having it not in cwm2/all_olap2_dimensions means it will be invisible/unaccessible to the OLAP API but, as you point out, it still exists in the AW, and as such, it still exists in all_olap2_aw_dimensions.
The early comment was a way to potentially "work around" the inability of no automation to "fully" delete it, by suggesting a way to "partially" delete it so as to "hide" the dimension from the OLAP API, without actually deleting it (or any of it's storage, obviously) from the AW.

Similar Messages

  • Dimension updates in Analytic workspace:Materialized views?

    We are using the 10g version of Oracle OLAP. We have 1 materialized view joining with our custom table and forming 1 source view per dimension. We load the cube programatically by refresh the dimension materialized views, followed by loading fact data to views against cube and then the actual workspace and cube creation..
    Question is :
    1) Do dimensions get loaded to analytic workspace only when the analytic workspace is created (programatically or maintain dimension via AW)?
    2) Assume we do not create the analytic workspace programatically or do not do a maintain dimension. In this case willl the dimensions in the analytic workspace get refreshed any time the data in source tables in the materialized view or custom table used in dimension source view change?
    Please advise.
    Thanks,
    Sudip

    If the data source changes for OLAP 10g then you must maintain the AW/ dimensions/cubes. There is no ability to check if anything in the source has changed.
    If using 11g, then you can use the MV refresh capabilities to maintain your AW (if your model conforms)...MV refresh features detects changes in the source tables.
    Hope I understood your question correctly.

  • Cannot drop cube or analytic workspace due to ORA-37409

    The error is ORA-37409: cannot delete or truncate AW used by CUBE ORGANIZED table.
    This seems very closely related to the bug discussed in this thread: Drop cube organized table
    We need to drop and rebuild a cube due to a design change. It looks like there are some CR$ tables related to the cube preventing the drop.
    We cannot drop the CR$ table, nor can we drop the cube, nor can we drop the analytic workspace. We have tried disabling materialized view refresh on the cubes (which works but leaves the CR$ tables out there). We have tried the drop using dbms_aw.aw_delete and with dbms_cube.import_xml (to remove everything). No such luck.
    Is there a workaround you can give me that will allow us to drop the CR$ tables? Or a workaround that will allow us to drop the workspace?

    Update:
    Our last attempt to drop the analytic workspace did remove almost all OLAP metadata. However, there were still rows in sys.olap_tab$ with object IDs relating the problem CR$ tables. In a test database, we confirmed that deleting these rows does allow us to drop the CR$ tables that cannot otherwise be dropped. However, running DML against a sys-owned table like this is unwise at best, and certainly an unsupported workaround (unless we can get Oracle's blessing to do it).
    We may go through MOS and see if Oracle can provide a one-off patch for the bug listed above, to correct this situation. Or perhaps they may be able to provide some other direction.
    This puts us in a situation where our only immediate option may be to uninstall the OLAP option and reinstall it.

  • Analytic Workspace Manager

    Hi
    I am completely new to Oracle OLAP.
    I have installed Oracle 10g(10.1.0.2) with OLAP option enabled.
    I would like to create some cubes using Analytic Workspace manager. When I look into Oracle HomeIntegrated Management Tools, I wouldn’t find Analytic Workspace manager.
    Do I need to install Analytic Workspace manager separately? If it comes along with the oracle suite, what did I want to do to have analytic workspace manager in my machine?
    Please help me.
    Thanks,
    Deepa

    Hi
    Thanks for the info.
    I like to get more information regarding the same in version 10.1.0.2
    Thanks,
    Deepa

  • Install Analytic Workspace Manager

    Hi
    I have installed Oracle 10g(10.1.0.2) with OLAP option enabled.
    I would like to create some cubes using Analytic Workspace manager. When I look into Oracle HomeàIntegrated Management Tools, I wouldn’t find Analytic Workspace manager.
    Do I need to install Analytic Workspace manager separately? If it comes along with the oracle suite, what did I want to do to have analytic workspace manager in my machine?
    Please help me.
    Thanks,
    Deepa

    AWM does need to be installed separately. Download it from OTN and install (really just unzip!). http://www.oracle.com/technology/software/htdocs/devlic.html?=http://download.oracle.com/otn/java/olap/AWM102030_Win.zip

  • Cannot able to delete the Analytical Workspace and its objects.

    Hi,
    My Analytical workspace (11.2.0.2 B) seems to be corrupted. I could not able to attach the workspace through AWM and i cannot even able to delete it. I found there is no other session attached the Work space. I used the below query to find the locks on the work space.
    SELECT
    username || ' ('||SID||','||serial#||','||
    DECODE(server,
    'DEDICATED','D',
    'SHARED', 'S', 'U')||')' usn,
    gvawo.inst_id,
    owner||'.'||daws.aw_name||' ('||
    DECODE(attach_mode,
    'READ WRITE', 'RW',
    'READ ONLY', 'RO',
    'MULTIWRITE', 'MW',
    'EXCLUSIVE', 'XW', attach_mode)||')' aw,
    generation
    FROM
    DBA_AWS daws,
    gv$aw_olap gvawo,
    gv$aw_calc gvawc,
    gv$session gvses
    WHERE
    daws.aw_number = gvawo.aw_number
    AND SID = gvawo.session_id
    AND gvawc.session_id = SID
    AND gvawo.inst_id = gvawc.inst_id
    AND gvses.inst_id = gvawc.inst_id
    ORDER BY
    username,
    SID,
    daws.aw_name
    When i try to delete the work space i am getting the following error. I cannot able to attach the work space also.
    An error has occurred on the server
    Error class: Express Failure
    Server error descriptions:
    DPR: cannot create server cursor, Generic at TxsOqDefinitionManager::generic<CommitRoot>
    INI: XOQ-00703: error executing OLAP DML command "(AW DELETE DWH_REP.SAMPLE : ORA-37163: cannot delete or truncate AW with dependent CUBES or CUBE DIMENSIONS
    *)", Generic at TxsOqAWManager::executeCommand*
    Please help me to resolve this.
    Regards,
    Raghav

    Hi,
    When i try to execute your statement through Toad, i am getting the below error.
    ORA-03113: end-of-file on communication channel
    But the same is working for other AW which has not corrupted.
    When i try to open the corrupted work space through AWM, i get the below error.
    Unable to attach DWH_REP.SAMPLE Analytic Workspace read write
    java.sql.SQLException: No more data to read from socket
    at oracle.olap.awm.connection.AwAttachmentManager.attachInThread(Unknown Source)
    at oracle.olap.awm.navigator.node.WorkspaceNode.setExpanded(Unknown Source)
    at oracle.bali.ewt.dTree.DTreeButtonDecoration.processMouseEvent(Unknown Source)
    at oracle.bali.ewt.dTree.DTreeStackingDecoration.processMouseEvent(Unknown Source)
    at oracle.bali.ewt.dTree.DTree.processMouseEvent(Unknown Source)
    at oracle.olap.awm.navigator.Navigator.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at oracle.bali.ewt.LWComponent.processEventImpl(Unknown Source)
    at oracle.bali.ewt.dTree.DTree.processEventImpl(Unknown Source)
    at oracle.bali.ewt.LWComponent.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$000(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.awt.EventQueue$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.awt.EventQueue$2.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.AccessControlContext$1.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

  • Unable to create dimension in Analytic Workspace manager

    Hi all,
    I am trying to create dimension using Analytic Workspace Manager(AWM) and it throws the following error.
    *"The transaction is not committable: "java.lang.RuntimeException: org.xml.sax.SAXException: Missing XML attribute: Attribute for tag: <Metadata><StandardDimension><Organization><AWPrimaryDimensionOrganization><AttributeOrganization>"*
    Kindly share your comments.
    I am using Oracle 11g r1 client to connect with oracle 11g R2 database.
    Please let me know the steps to create a OLAP cube using AWM
    Regards
    Mukhil

    It sounds like a mismatch between an old version of AWM and a new version of the server. Please try a more recent version of AWM.
    http://www.oracle.com/technetwork/database/options/olap/olap-downloads-098860.html

  • Creating a DWMQY DIMENSION using Analytic Workspace Manager

    Hi everyone,
    I need some help creating a "time aware" (DAY, WEEK, MONTH, QUARTER, and YEAR) dimension using Analytic Workspace Manager.
    Let me give you some background. I'm coming from a traditional "Oracle Express" OLAP background where all our data is stored in cubes and these are defined, populated and operated on using OLAP DML, there is no SQL or traditional relational tables involved.
    I now want to pull data from relational tables into some OLAP cubes and am using Analytic Workspace Manager to do this (maybe this is not the best way?)
    Let me explain what I'm trying to achieve. In OLAP worksheet I can type the following DML commands:
    DEFINE MY_DAY DIMENSION DAY
    MAINTAIN MY_DAY ADD TODAY '01JAN2011'
    What this will do is create a "day dimension" and will populate it with values for each and every day between 1st Jan 2011 and today. It will be fully "time aware" and thus you can use date functions such as DAYOF to limit the MY_DAY dimension to all the Fridays etc. Similarly if I define a "month dimension" there will be an automatic implicit relationship between these two dimensions, this relationship and time aware cleverness is built into Oracle.
    However, a dimension defined using DML commands (and indeed all objects created using DML language) is not visible in Analytic Workspace Manager (as there is no metadata for them?) and for the life of me I cannot work out how to create such a dimension using AWM. If I create a "Time Dimension" then, as far as I can tell, this is not a proper time dimension but merely a text dimension and I, presume, I have to teach it time awareness.
    Can anyone help me? I have no issues creating, and populating cubes from relational tables using Analytic Workspace Manager, the only issue I have is creating a "proper" time aware dimension.
    Many thanks in anticipation.
    Ian.

    When a dimension is of type "TIME" in AWM, then for each member of that dimension, you need END_DATE and TIMESPAN attributes in addition to the key column and description column.
    So in your case, if there are 5 levels: DAY->WEEK->MONTH->QTR->YEAR
    then you will need atleast 15 columns in your source sql table/view
    or 20 columns if you have separate column for description.
    For example the columns in your source table/view could be:
    DAY_ID,
    DAY_DESC,
    DAY_END_DATE, (which will be that day's date)
    DAY_TIMESPAN, (which will be 1)
    WEEK_ID,
    WEEK_DESC,
    WEEK_END_DATE,
    WEEK_TIMESPAN,
    MONTH_ID,
    MONTH_DESC,
    MONTH_END_DATE,
    MONTH_TIMESPAN,
    QTR_ID,
    QTR_DESC,
    QTR_END_DATE,
    QTR_TIMESPAN,
    YEAR_ID,
    YEAR_DESC,
    YEAR_END_DATE,
    YEAR_TIMESPAN
    Just "map" this table/view to the 5-level time dimension in AWM.
    NOTE that behind-the-scenes lot of useful structures are automatically defined to support time-series measures,
    and there are lot of calculation templates available also.
    Since you came from Express background, I have to say that try to use new OLAP Expression Syntax when creating calculated measures instead of OLAP DML.
    Its very rare these days that we need OLAP DML.
    Edited by: Nasar on Nov 22, 2012 12:11 PM

  • Creating Dimension using template in Analytical workspace manager

    Hi,
    I am rajan, I am working with Oracle's Analytical workspace manager Release 2.
    I am trying to create the dimension using the templates from the file. it throws the following error,
    The following errors have occurred when loading contents:
    Closed Connection
    Note :     I am referring the tutorial in the following URL,
    http://st-curriculum.oracle.com/obe/db/10g/r2/prod/bidw/awm/awm_otn.htm and also i have downloaded the awm.zip file from the same URL and imported into my desktop.
    Right now, I am working based on this tutorial only.
    Kindly,help me to resolve this issue.
    Thanks
    Rajan

    Francisco,
    Query DBA_REGISTRY to verify the status of "OLAP Analytic Workspace" component.
    Also, wait for the script to finish and check the status of the objects then.
    Thanks,
    Hussein

  • Analytic Workspace Manager possible bug: Maintain Cube hangs

    Hi All,
    I am a newbe, I have been following the tutorial "Building OLAP 11g Cubes". http://www.oracle.com/technology/obe/olap_cube/buildicubes.htm
    After the step "Maintain Cube SALES_CUBE", I got the information box "Loading facts for cube SALES_CUBE"...on the screen for the last 4 hours.
    Is this normal? Should I kill the process and start again?
    I am running Oracle 11g Enterprise Edition Release 11.1.0.7.0 on a Virtual Machine with Windows Server 2008 Standard SP1 with 1GB RAM.
    The Analytic Workspace Manager is 11.2.0.1.0 running on a Windows XP SP3.
    Any help is much appreciated

    I'm getting a similar problem, I cannot maintain cubes that worked fine yesterday:
    An error has occurred on the server
    Error class: Express Failure
    Server error descriptions:
    INI: error creating a definition manager, Generic at TxsOqConnection::generic<BuildProcess>
    INI: XOQ-01706: An unexpected condition occurred during the build: "TxsOqLoadCommandProcessor::generatePartitionListSource-unsupported join condition-table"., Generic at xsoqBuild
    at oracle.olapi.data.source.DataProvider.callGeneric(Unknown Source)
    at oracle.olapi.data.source.DataProvider.callGeneric(Unknown Source)
    at oracle.olapi.data.source.DataProvider.executeBuild(Unknown Source)
    at oracle.olap.awm.wizard.awbuild.UBuildWizardHelper$1.construct(Unknown Source)
    at oracle.olap.awm.ui.SwingWorker$2.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)
    It all started after I tried to add a calculated measure to an existing cube (something I have done before in 11g...a feature I love).
    This is too bad, so far I've been loving 11g Olap as compared to 10g Olap. But now 11g is starting to crop up these bullshit bugs as well. I guess OLAP is still too crappy to rely on for production....good thing I won't recommend a rollout of this product to my clients. It's a great tool for having fun with development, but using Oracle Olap + AWM in a real company is career suicide.
    AWM 11.2.01

  • How to delete a Analytic Workspace even other session still attached it

    how to delete a Analytic Workspace even other session still attached that Analytic Workspace?
    or how to detach the Analytic Workspace with other session?
    or how to find session which connected to the Analytic Workspace?
    Thanks

    Here are the sql queries which will tell you who is attached to which aw in which mode.
    select username, sid, serial#, owner||'.'||daws.aw_name aw,
    decode(attach_mode, 'READ WRITE', 'RW',
    'READ ONLY', 'RO', attach_mode) attch,
    trunc(pool_size/1024)||' KB' as curr_opp_kb
    from dba_aws daws, gv$aw_olap gvawo , gv$aw_calc gvawc, gv$session
    where daws.aw_number = gvawo.aw_number and
    sid = gvawo.session_id and gvawc.session_id=sid
    order by owner, sid, daws.aw_name;
    select a.owner,a.aw_name,b.attach_mode
    from dba_aws a ,v$aw_olap b
    where a.aw_number = b.aw_number;
    You might have to kill the RO session before deleting the AW.
    Thanks
    Brijesh

  • TWO ANALYTIC WORKSPACES - SAME DIMENSION HOW TO REFER

    Hi All,
    I have two analytic workspaces MSD.MSD3765 and MSD.MSD13834. I attach both of them using the following.
    begin
    dbms_aw.execute('aw attach MSD.MSD13834 ');
    dbms_aw.execute('aw attach MSD.MSD3765;');
    code to refer a dimension with the same name which exists in both the aws
    dbms_aw.execute('aw detach MSD.MSD3765');
    dbms_aw.execute('aw detach MSD.MSD13834;');
    end;
    I would like to refer a dimension dmentry, which exists in both the aws. Can some one help me out regarding this? I tried MSD.MSD3765.dmentry and MSD.MSD13834.dmentry. It isn't working.
    Request your help in this. Thanks in anticipation.
    Regards,
    Vikram

    I could find the answer for the same in this thread.
    How to control the same dimension data manipulation in multiple attached AW
    Regards
    Vikram

  • Deployment of Analytic Workspace

    Hi,
    I have a query regarding the deployment of an AW in various environments like dev, test and live.
    When we first create the AW in dev environment, we specify an AW name and the tablespace to be allocated for that particular AW. For deploying the AW in different environment, we use the XML template that is exported from the AW using 'Export Analytic Workspace to Template' option. But while creating the AW from template, there is no option to specify the tablespace for the new environment.
    Could anyone please help me how tablespace can be specified while deploying AW in other environments.
    Thanking in advance,
    Mainak

    This is a bit of a hack, but it will work
    Towards the end of the XML template file you should see an entry something like this.
    <AW
      Name="MY_AW"
      Version="11.2">
    </AW>The name of the AW will obviously be different, and the version may be different as well. It doesn't matter because you will just delete the section from the XML document.
    Now in AWM you first create an empty AW using the simple "Create Analytical Workspace..." option. This will allow you to specify a tablespace. Once you have done this you select "Create Analytical Workspace From Template..." and import your objects into the AW you just created. Note that you must create an AW with the same name as the original as it is embedded into the XML for the cubes and dimensions.
    The more sophisticated version of this is to delete the AW section above and then add a header to the XML template
    <!DOCTYPE Metadata [
      <!ENTITY % BIND_VALUES PUBLIC "OLAP BIND VALUES" "OLAP METADATA">
      %BIND_VALUES;
      ]>Finally you replace all occurrences of your AW name with the string
    &AW_NAME;For example, instead of
    <AWPrimaryDimensionOrganization
      MVOption="NONE"
      HierarchyConsistencyRule="STAR_CONSISTENT"
      AddUniqueKeyPrefix="False"
      AW="MY_AW">you would have
    <AWPrimaryDimensionOrganization
      MVOption="NONE"
      HierarchyConsistencyRule="STAR_CONSISTENT"
      AddUniqueKeyPrefix="False"
      AW="&AW_NAME;">You can see this type of XML if you export a single cube or dimension to a template. I don't know why AWM doesn't let you do the same thing for the whole AW.

  • Deleting dimension members

    We have an AW with cubes refreshing every day. Fast solve of these cubes with incremental set of data finishes usually within an hour or two.
    Our recent requirement needs for us to remove some old facts as well as a few dimension members. The facts can be cleared but we noticed that deleting dimension members (using synch load) is causing a full cube solve due to changed relations. With the amount of data existing in this AW, full solve takes about 2 days to complete. Deleting dimension members for which we never ever loaded any facts also causes the same result as above.
    I was wondering if there is any way we can delete these dimension members without triggering a full cube solve.
    Another question is if it is possible to update dimension primary keys inside of the AW?
    Any help is really appreciated.
    Database Version 11.2.0.3

    These types of questions have been answered in the past by David Greenfield.
    There are two ways to delete a dimension member through commands.
    (1). OLAP dml command "REMOVE_DIMENSION_MEMBER"  explained here:   http://docs.oracle.com/cd/E11882_01/olap.112/e17122/dml_commands_2042.htm#OLADM2692
    OR
    (2). dbms_cube.build  command: 
    exec dbms_cube.build(q'! "TIME" USING (DELETE FROM DIMENSION WHERE MEMBER = 'APR-2011') !');
    Take a look at this old post, where David Greenfield explained it.
    https://forums.oracle.com/message/9426946
    There is no way to rename a dimension member in a standard-form analytical workspace.  There is  "MAINTAIN RENAME" olap dml command, but it will not work with dimensions created through AWM.  You can add the new dimension member, then copy cube data associated with old/existing member to the new member and then delete the old member.
    For cube copy data example, take a look at these old (15-Feb-2011, 16-Feb-2011 and 17-Feb-2011) posts by David Greenfield:
    https://forums.oracle.com/thread/2176409

  • Creating an Analytic Workspace

    Hi,
    i want to create an analytic Workspace without the AWM, but I want to see the Dimensions Cubes, etc what I create in the AWM. I Work with the AWM 10.2.0.3.0. What packages must I use for it? Someone say I must use the cwm2 and the dbms package an otherone say that I must use the AW/XML package.
    Give it a Example for Creating an AWM??
    Thanks

    If you want to create the AW without manually sitting in front of the AWM, Oracle prefers you to use the AWXML and AWAction packages in Java. If you have the AWM installed on your machine, you have the jar files you need in the AWM install directory. Download JDEV and try to load and compile this example program as a way to start learning the library.
    package oracle.olapi.examples;
    import oracle.AWAction.BuildDatabase;
    import oracle.AWAction.Interaction;
    import oracle.AWXML.AggregationDefinition;
    import oracle.AWXML.AggregationHierarchySpecification;
    import oracle.AWXML.Attribute;
    import oracle.AWXML.AttributeProjection;
    import oracle.AWXML.AttributeSourceExpression;
    import oracle.AWXML.AW;
    import oracle.AWXML.AWConnection;
    import oracle.AWXML.Cube;
    import oracle.AWXML.CubeDimensionSourceExpression;
    import oracle.AWXML.CubeDimRef;
    import oracle.AWXML.CubeMapGroup;
    import oracle.AWXML.Dimension;
    import oracle.AWXML.DimensionKeySourceExpression;
    import oracle.AWXML.DimensionMapGroup;
    import oracle.AWXML.DimensionMemberExpression;
    import oracle.AWXML.HierarchicalParentSourceExpression;
    import oracle.AWXML.Hierarchy;
    import oracle.AWXML.HierarchyLevelAssociation;
    import oracle.AWXML.Level;
    import oracle.AWXML.Measure;
    import oracle.AWXML.MeasureFolder;
    import oracle.AWXML.MeasureSourceExpression;
    import oracle.AWXML.PreComputeClause;
    import oracle.AWXML.SourceColumn;
    import oracle.express.spl.SPLExecutor;
    import oracle.jdbc.OracleConnection;
    import java.io.File;
    import java.io.FileWriter;
    import java.sql.DriverManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.Iterator;
    import java.util.Properties;
    import java.util.StringTokenizer;
    import java.util.Vector;
    * Creates an analytic workspace based on the Global schema and populates
    * the analytic workspace with data from the tables of that relational schema.
    * Before creating the analytic workspace, the program deletes an analytic
    * workspace of the same name if it already exists.
    * The program generates a log file and it creates a file that records the
    * creation of the Oracle OLAP Analytic Workspace Java API objects as an XML string.
    * This program requires the Global schema, which is available on the Oracle
    * Technology Network at
    * http://www.oracle.com/technology/products/bi/olap/olap.html
    * To download the sample schema, in the Documentation section see Sample
    * Schemas for Documentation.
    * To run this program, use the following command-line arguments, where
    * server_name is the server on which the Oracle Database is running,
    * port is the number of the port on which Oracle OLAP is listening,
    * and sid is the system identifier (SID) of the database instance:
    * -conn server_name:port:sid -user global_aw -password global_aw
    * Instead of the -conn argument, you could substitute a -url argument
    * of the following form:
    * -url jdbc:oracle:thin:@server_name:port:sid
    * An example of the command-line arguments is the following:
    * -conn myOracleServer:1521:orcl -user global_aw -password global_aw
    public class BuildAWExample extends BaseExample
    public static AWConnection awConnection;
    private Interaction curInteraction;
    // The elements in the _keys Vector are the relational key columns to which
    // a Level is mapped.
    Vector _keys = new Vector(0);
    // The elements in the _cols Vector are the relational columns to which
    // the attributes for a Level are mapped.
    Vector _cols = new Vector(0);
    // The elements in the _levels Vector are the Level objects for specifying
    // the levels of a hierarchy.
    Vector _levels = new Vector(0);
    // The elements in the _levColumns Vector are the relation columns to which
    // the levels of the hierarchy are mapped.
    Vector _levColumns = new Vector(0);
    Vector _dimList = new Vector(0);
    Vector _measures = new Vector(0);
    Vector _measCols = new Vector(0);
    // File name for writing the XML string.
    String xmlStr = "buildAWEx.xml";
    // File for AW build log.
    String xmlBldStr = "buildAWEx.log";
    * Constructor.
    public void BuildAWExample()
    * Creates the top-level objects for the analytic workspace and calls methods
    * that create the lower-level objects.
    * Writes the analytic workspace objects to an XML string.
    * Builds the analytic workspace framework and populates the analytic
    * workspace with data.
    * Connects to the Oracle Database instance, retrieves information
    * about the construction of the analytic workspace, and writes the
    * information to a log file.
    * Finally, closes the connection to the database.
    public void run() throws Exception
    // Get the command line arguments that are stored in the Properties object.
    String connection = getConnectionProperty(props);
    String user = props.getProperty("user");
    String password = props.getProperty("password");
    // Create the AWConnection.
    try
    System.out.println("Connecting to " + connection + ".");
    awConnection = new AWConnection(user, password, connection);
    catch(Exception e)
    System.out.println("Error connecting to " + connection + ".\n" + e);
    // Specify a name for the analytic workspace.
    String awName = "GLOBALAW";
    // Delete the analytic workspace if it already exists.
    deleteExistingAW(awConnection, user, awName);
    // Create an AW object and give it a name.
    AW globalAW = new AW();
    globalAW.setName(awName);
    // Create Dimension objects, and pass each Dimension to a method that
    // creates Attribute, Hierarchy, and Level objects for it.
    // Create the TIME_AW Dimension and set names for the object.
    Dimension timeDim = globalAW.createDimension();
    timeDim.setName("TIME_AW");
    timeDim.setShortName("TIME_AW");
    timeDim.setLongName("TIME_AW dimension");
    timeDim.setIsTime(true);
    // Create the Attribute, Level, and Hierarchy objects for the Dimension.
    this.createTimeDim(timeDim);
    // Get the detail level to use when creating a Cube.
    Vector timelevels = timeDim.getLevels();
    Level monthLevel = (Level)_time_levels.elementAt(0);
    // Create the CUSTOMER_AW Dimension and set names for the object.
    Dimension customerDim = globalAW.createDimension();
    customerDim.setName("CUSTOMER_AW");
    customerDim.setShortName("CUSTOMER_AW");
    customerDim.setLongName("CUSTOMER_AW dimension");
    // Create the Attribute, Level, and Hierarchy objects for the Dimension.
    this.createCustomerDim(customerDim);
    // Get the detail level to use when creating a Cube.
    Vector customerDim_levels = customerDim.getLevels();
    Level shipToLevel = (Level)customerDim_levels.elementAt(0);
    // Create the PRODUCT_AW Dimension and set names for the object.
    Dimension productDim = globalAW.createDimension();
    productDim.setName("PRODUCT_AW");
    productDim.setShortName("PRODUCT_AW");
    productDim.setLongName("PRODUCT_AW Dimension");
    // Create the Attribute, Level, and Hierarchy objects for the Dimension.
    this.createProductDim(productDim);
    // Get the detail level to use when creating a Cube.
    Vector productDim_levels = productDim.getLevels();
    Level itemLevel = (Level)productDim_levels.elementAt(0);
    // Create the CHANNEL_AW Dimension and set names for the object.
    Dimension channelDim = globalAW.createDimension();
    channelDim.setName("CHANNEL_AW");
    channelDim.setShortName("CHANNEL_AW");
    channelDim.setLongName("CHANNEL_AW dimension");
    // Create the Attribute, Level, and Hierarchy objects for the Dimension.
    this.createChannelDimension(channelDim);
    // Get the detail level, which is shared by all dimension hierarchies,
    // to use when creating a Cube.
    Vector channellevels = channelDim.getLevels();
    Level channelLevel = (Level)_channel_levels.elementAt(0);
    // Create the UNITS_CUBE_AW Cube and the measures to associate with it.
    this.clearCubeMapVectors();
    Cube unitsCube = globalAW.createCube();
    unitsCube.setName("UNITS_CUBE_AW");
    // Add the dimensions to the _dimList Vector.
    _dimList.add(timeDim);
    _dimList.add(customerDim);
    _dimList.add(productDim);
    _dimList.add(channelDim);
    // Specify the dimensions for the Cube.
    this.associateCubeDimensions(unitsCube, _dimList);
    // Create an aggregation map for the Cube.
    this.precomputeNA(unitsCube, "AGGMAP_UC");
    // Create a Measure for the quantities of units sold.
    Measure units = unitsCube.createMeasure();
    units.setName("UNITS_AW");
    units.setShortName("UNITS_AW");
    units.setLongName("UNITS_AW measure");
    units.setDataType("NUMBER");
    // Add the Measure to the _measures Vector.
    _measures.add(units);
    // Add the column of the Global schema relational table to the
    // _measCols Vector.
    measCols.add("GLOBAL.UNITSHISTORY_FACT.UNITS");
    // Create a Measure for the monetary amount of units sold.
    Measure sales = unitsCube.createMeasure();
    sales.setName("SALES_AW");
    sales.setShortName("SALES_AW");
    sales.setLongName("SALES_AW measure");
    sales.setDataType("NUMBER");
    _measures.add(sales);
    _measCols.add("GLOBAL.UNITS_HISTORY_FACT.SALES");
    // Add the detail levels for the dimensions to the _levels Vector and
    // the relational columns for the levels to the _cols Vector.
    _levels.add(monthLevel);
    _cols.add("GLOBAL.UNITS_HISTORY_FACT.MONTH_ID");
    _levels.add(shipToLevel);
    _cols.add("GLOBAL.UNITS_HISTORY_FACT.SHIP_TO_ID");
    _levels.add(itemLevel);
    _cols.add("GLOBAL.UNITS_HISTORY_FACT.ITEM_ID");
    _levels.add(channelLevel);
    _cols.add("GLOBAL.UNITS_HISTORY_FACT.CHANNEL_ID");
    // Map the columns of the relational tables to the dimensions and measures
    // of the analytic workspace Cube.
    this.createCubeMap(unitsCube, _levels, _cols, _measures, _measCols);
    // Create the PRICE_COST_CUBE_AW Cube and the measures to associate with it.
    this.clearCubeMapVectors();
    Cube priceCostCube = globalAW.createCube();
    priceCostCube.setName("PRICE_COST_CUBE_AW");
    _dimList.add(productDim);
    _dimList.add(timeDim);
    this.associateCubeDimensions(priceCostCube, _dimList);
    this.precomputeNA(priceCostCube, "AGGMAP_PCC");
    // Create a Measure for unit prices.
    Measure price = priceCostCube.createMeasure();
    price.setName("UNIT_PRICE_AW");
    price.setShortName("UNIT_PRICE_AW");
    price.setLongName("UNIT_PRICE_AW measure");
    price.setDataType("NUMBER");
    _measures.add(price);
    _measCols.add("GLOBAL.PRICE_AND_COST_HIST_FACT.UNIT_PRICE");
    // Create a Measure for unit costs.
    Measure cost = priceCostCube.createMeasure();
    cost.setName("UNIT_COST_AW");
    price.setShortName("UNIT_COST_AW");
    cost.setLongName("UNIT_COST_AW measure");
    cost.setDataType("NUMBER");
    _measures.add(cost);
    _measCols.add("GLOBAL.PRICE_AND_COST_HIST_FACT.UNIT_COST");
    _levels.add(itemLevel);
    _cols.add("GLOBAL.PRICE_AND_COST_HIST_FACT.ITEM_ID");
    _levels.add(monthLevel);
    _cols.add("GLOBAL.PRICE_AND_COST_HIST_FACT.MONTH_ID");
    this.createCubeMap(priceCostCube, _levels, _cols, _measures, _measCols);
    // Create a MeasureFolder and add the measures to it.
    // A MeasureFolder appears as an MdmSchema object to an
    // Oracle OLAP Java API application.
    MeasureFolder measureFolder = globalAW.createMeasureFolder();
    measureFolder.setName("GLOBALAW_SCHEMA");
    measureFolder.setShortName("GLOBALAW_SCHEMA");
    measureFolder.setLongName("GLOBALAW_SCHEMA schema");
    measureFolder.addMeasure(units);
    measureFolder.addMeasure(sales);
    measureFolder.addMeasure(cost);
    measureFolder.addMeasure(price);
    // Write the XML string for the analytic workspace.
    String XML = globalAW.WriteToXML();
    try
    File xmlFile = new File(xmlStr);
    FileWriter xmlout = new FileWriter(xmlFile);
    xmlout.write(XML);
    xmlout.write("\n");
    xmlout.close();
    catch (Exception e)
    System.out.println("Failure to write XML string to file: " +
    e.toString());
    // Build the analytic workspace framework.
    System.out.println("Building the " + awName + " framework.");
    globalAW.Create(awConnection);
    globalAW.Commit(awConnection);
    System.out.println(awName + " framework built!");
    // Populate the analytic workspace with the metadata objects and
    // the data from the relational schema.
    System.out.println("Populating " + awName + "." );
    try
    xml_build_global_aw(awName);
    catch(Exception e)
    System.out.println("The following error occurred while building "
    + awName + ":\n\t" + e.toString());
    // Connect to the Oracle Database instance and retrieve information
    // about building the analytic workspace.
    try
    // Create a DriverManager.
    DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
    // Create a connection to the Oracle Database instance.
    OracleConnection o_connection =
    (OracleConnection)DriverManager.getConnection("jdbc:oracle:thin:@" +
    connection, user, password);
    // Get information from the olapsys.xml_load_log table.
    String result = null;
    String sqlText = "select distinct xml_loadid " +
    "from olapsys.xml_load_log " +
    "order by xml_loadid desc";
    Statement sqlStmt = o_connection.createStatement();
    ResultSet rs = sqlStmt.executeQuery(sqlText);
    if(rs.next())
    // Get the first value.
    int loadid = rs.getInt(1);
    rs.close();
    // Now get the rest of the log without the timestamp for easy diffing.
    sqlText = "select SUBSTR(xml_message, 9) xml_message " +
    "from olapsys.xml_load_log " +
    "where xml_loadid = " + loadid + " " +
    "order by xml_loadid, xml_recordid";
    rs = sqlStmt.executeQuery(sqlText);
    String tempResult;
    while(rs.next())
    tempResult = rs.getString(1);
    if(result == null)
    result = tempResult.trim();
    else
    result = result + "\n" + tempResult.trim();
    // Write the information to a file.
    try
    File xmlBuildLog = new File(xmlBldStr);
    FileWriter xmlBldout = new FileWriter(xmlBuildLog);
    xmlBldout.write(result);
    xmlBldout.write("\n");
    xmlBldout.close();
    catch (Exception e)
    System.out.println("Failure to write XML build log: " + e.toString());
    catch(Exception e)
    System.out.println("Verifier failure with " + e.toString());
    // Close the connection to the database.
    awConnection.close();
    * Builds the analytic workspace.
    public void xml_build_global_aw(String awName)
    // Create an Interaction object for building the analytic workspace.
    curInteraction = new Interaction();
    // Set the AWConnection to use when building the analytic workspace.
    curInteraction.setConnection(awConnection);
    // Create an BuildDatabase object.
    BuildDatabase myBuild =
    (BuildDatabase)curInteraction.createAction("BUILDDATABASE");
    // Set the name of the analytic workspace.
    myBuild.setAWName(awName);
    // Specify not running solves when building the database.
    myBuild.setRunSolve(false);
    // Build the analytic workspace.
    myBuild.Execute();
    * Creates Attribute, Level, and Hierarchy objects for the Time Dimension.
    public void createTimeDim(Dimension timeDim)
    // Indicate that the primary key of the dimension table contains the
    // lowest-level dimension members.
    timeDim.setUseNativeKey(true);
    // Create the Long and Short Description Attribute objects for the Dimension.
    Attribute timeLDAttr = createLongDescAttr(timeDim);
    Attribute timeSDAttr = createShortDescAttr(timeDim);
    // Create the End_Date and Time_Span Attribute objects.
    Attribute timeEndDateAttr = timeDim.createAttribute();
    timeEndDateAttr.setName("End_Date");
    timeEndDateAttr.setClassification("END_DATE");
    Attribute timeTimeSpanAttr = timeDim.createAttribute();
    timeTimeSpanAttr.setName("Time_Span");
    timeTimeSpanAttr.setClassification("TIME_SPAN");
    // Create the Level objects for the Dimension.
    // Create the detail level, MONTH_AW.
    Level monthLevel = timeDim.createLevel();
    monthLevel.setName("MONTH_AW");
    monthLevel.setShortName("MONTH_AW");
    monthLevel.setLongName("MONTH_AW level");
    // Create AttributeProjection objects for the attributes for the
    // MONTH_AW Level.
    this.setupAttributeProjection(monthLevel, "Long Description", timeLDAttr);
    this.setupAttributeProjection(monthLevel, "Short Description", timeSDAttr);
    this.setupAttributeProjection(monthLevel, "End Date", timeEndDateAttr);
    this.setupAttributeProjection(monthLevel, "Time Span", timeTimeSpanAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.TIME_DIM.MONTH_ID");
    _cols.add("GLOBAL.TIME_DIM.MONTH_DSC"); // Long description
    _cols.add("GLOBAL.TIME_DIM.MONTH_DSC"); // Short description
    _cols.add("GLOBAL.TIME_DIM.MONTH_END_DATE");
    _cols.add("GLOBAL.TIME_DIM.MONTH_TIMESPAN");
    this.createLevelMap(monthLevel, _keys,_cols);
    // Create the QUARTER_AW Level.
    Level quarterLevel = timeDim.createLevel();
    quarterLevel.setName("QUARTER_AW");
    quarterLevel.setShortName("QUARTER_AW");
    quarterLevel.setLongName("QUARTER_AW level");
    // Create AttributeProjection objects for the attributes for the
    // QUARTER_AW Level.
    this.setupAttributeProjection(quarterLevel, "Long Description",
    timeLDAttr);
    this.setupAttributeProjection(quarterLevel, "Short Description",
    timeSDAttr);
    this.setupAttributeProjection(quarterLevel, "End Date", timeEndDateAttr);
    this.setupAttributeProjection(quarterLevel, "Time Span", timeTimeSpanAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.TIME_DIM.QUARTER_ID");
    _cols.add("GLOBAL.TIME_DIM.QUARTER_DSC"); // Long description
    _cols.add("GLOBAL.TIME_DIM.QUARTER_DSC"); // Short description
    _cols.add("GLOBAL.TIME_DIM.QUARTER_END_DATE");
    _cols.add("GLOBAL.TIME_DIM.QUARTER_TIMESPAN");
    this.createLevelMap(quarterLevel, _keys, _cols);
    // Create the top level, YEAR_AW.
    Level yearLevel = timeDim.createLevel();
    yearLevel.setName("YEAR_AW");
    yearLevel.setShortName("YEAR_AW");
    yearLevel.setLongName("YEAR_AW level");
    // Create AttributeProjection objects for the attributes for the
    // YEAR_AW Level.
    this.setupAttributeProjection(yearLevel, "Long Description", timeLDAttr);
    this.setupAttributeProjection(yearLevel, "Short Description", timeSDAttr);
    this.setupAttributeProjection(yearLevel, "End Date", timeEndDateAttr);
    this.setupAttributeProjection(yearLevel, "Time Span", timeTimeSpanAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.TIME_DIM.YEAR_ID");
    _cols.add("GLOBAL.TIME_DIM.YEAR_DSC"); // Long description
    _cols.add("GLOBAL.TIME_DIM.YEAR_DSC"); // Short description
    _cols.add("GLOBAL.TIME_DIM.YEAR_END_DATE");
    _cols.add("GLOBAL.TIME_DIM.YEAR_TIMESPAN");
    this.createLevelMap(yearLevel, _keys, _cols);
    // Create the CALENDAR_YEAR_AW Hierarchy.
    Hierarchy calendarYearHier = timeDim.createHierarchy();
    calendarYearHier.setName("CALENDAR_YEAR_AW");
    calendarYearHier.setShortName("CALENDAR_YEAR_AW");
    calendarYearHier.setLongName("CALENDAR_YEAR_AW hierarchy");
    // Add the Level objects for the Hierarchy, and the columns for them,
    // to Vector objects in the hierarcharchical order of the levels,
    // with the top level first.
    this.clearHierarchyMapVectors();
    _levels.add(yearLevel);
    _levColumns.add("GLOBAL.TIME_DIM.YEAR_ID");
    _levels.add(quarterLevel);
    _levColumns.add("GLOBAL.TIME_DIM.QUARTER_ID");
    _levels.add(monthLevel);
    _levColumns.add("GLOBAL.TIME_DIM.MONTH_ID");
    // Specify the levels for the hierarchy and map them to relational columns.
    this.createHierarchyMap(calendarYearHier, _levels, _levColumns);
    * Create the Long_Description Attribute for a Dimension.
    public Attribute createLongDescAttr(Dimension dim)
    Attribute ldAttr = dim.createAttribute();
    ldAttr.setName("Long_Description");
    ldAttr.setClassification("MEMBER_LONG_DESCRIPTION");
    return ldAttr;
    * Creates Attribute, Hierarchy, and Level objects for the Customer Dimension.
    public void createCustomerDim(Dimension customerDim)
    // Indicate that the primary key of the dimension table contains the
    // lowest-level dimension members.
    customerDim.setUseNativeKey(true);
    // Create the Long and Short Description Attribute objects for the Dimension.
    Attribute customerLDAttr = createLongDescAttr(customerDim);
    Attribute customerSDAttr = createShortDescAttr(customerDim);
    // Create Level objects for the SHIPMENTS_AW Hierarchy.
    // Create the detail level, SHIP_TO_AW.
    // This level is in both of the hierarchies of the Customer Dimension.
    Level customerShip_ToLevel = customerDim.createLevel();
    customerShip_ToLevel.setName("SHIP_TO_AW");
    customerShip_ToLevel.setShortName("SHIP_TO_AW");
    customerShip_ToLevel.setLongName("SHIP_TO_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // SHIP_TO_AW Level.
    this.setupAttributeProjection(customerShip_ToLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(customerShip_ToLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.SHIP_TO_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.SHIP_TO_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.SHIP_TO_DSC"); // Short description
    this.createLevelMap(customerShip_ToLevel, _keys, _cols);
    // Create the WAREHOUSE_AW level.
    Level customerWarehouseLevel = customerDim.createLevel();
    customerWarehouseLevel.setName("WAREHOUSE_AW");
    customerWarehouseLevel.setShortName("WAREHOUSE_AW");
    customerWarehouseLevel.setLongName("WAREHOUSE_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // WAREHOUSE_AW Level.
    this.setupAttributeProjection(customerWarehouseLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(customerWarehouseLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.WAREHOUSE_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.WAREHOUSE_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.WAREHOUSE_DSC"); // Short description
    this.createLevelMap(customerWarehouseLevel, _keys, _cols);
    // Create the REGION_AW Level.
    Level custRegionLevel = customerDim.createLevel();
    custRegionLevel.setName("REGION_AW");
    custRegionLevel.setShortName("REGION_AW");
    custRegionLevel.setLongName("REGION_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // the REGION_AW Level.
    this.setupAttributeProjection(custRegionLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(custRegionLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.REGION_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.REGION_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.REGION_DSC"); // Short description
    this.createLevelMap(custRegionLevel, _keys, _cols);
    // Create the top level, TOTAL_CUSTOMER_AW.
    Level allCustomersLevel = customerDim.createLevel();
    allCustomersLevel.setName("TOTAL_CUSTOMER_AW");
    allCustomersLevel.setShortName("TOTAL_CUSTOMER_AW");
    allCustomersLevel.setLongName("TOTAL_CUSTOMER_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // the ALL_CUSTOMERS_AW Level.
    this.setupAttributeProjection(allCustomersLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(allCustomersLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.TOTAL_CUSTOMER_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.TOTAL_CUSTOMER_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.TOTAL_CUSTOMER_DSC"); // Short description
    this.createLevelMap(allCustomersLevel, _keys, _cols);
    // Create the SHIPMENTS_AW Hierarchy.
    Hierarchy shipmentsHier = customerDim.createHierarchy();
    shipmentsHier.setName("SHIPMENTS_AW");
    shipmentsHier.setShortName("SHIPMENTS_AW");
    shipmentsHier.setLongName("SHIPMENTS_AW hierarchy");
    // Add the Level objects for the Hierarchy, and the columns for them,
    // to Vector objects in the hierarcharchical order of the levels,
    // with the top level first.
    this.clearHierarchyMapVectors();
    _levels.add(allCustomersLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.TOTAL_CUSTOMER_ID");
    _levels.add(custRegionLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.REGION_ID");
    _levels.add(customerWarehouseLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.WAREHOUSE_ID");
    _levels.add(customerShip_ToLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.SHIP_TO_ID");
    // Specify the levels for the hierarchy and map them to relational columns.
    this.createHierarchyMap(shipmentsHier, _levels, _levColumns);
    // Create Level objects for the MARKET_SEGMENT_AW Hierarchy.
    // Create the ACCOUNT_AW Level.
    Level customerAccountLevel = customerDim.createLevel();
    customerAccountLevel.setName("ACCOUNT_AW");
    customerAccountLevel.setShortName("ACCOUNT_AW");
    customerAccountLevel.setLongName("ACCOUNT_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // the ACCOUNT_AW Level.
    this.setupAttributeProjection(customerAccountLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(customerAccountLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.ACCOUNT_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.ACCOUNT_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.ACCOUNT_DSC"); // Short description
    this.createLevelMap(customerAccountLevel, _keys, _cols);
    // Create the MARKET_SEGMENT_AW Level.
    Level customerMktSegmentLevel = customerDim.createLevel();
    customerMktSegmentLevel.setName("MARKET_SEGMENT_AW");
    customerMktSegmentLevel.setShortName("MARKET_SEGMENT_AW");
    customerMktSegmentLevel.setLongName("MARKET_SEGMENT_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // the MARKET_SEGMENT_AW Level.
    this.setupAttributeProjection(customerMktSegmentLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(customerMktSegmentLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.MARKET_SEGMENT_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.MARKET_SEGMENT_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.MARKET_SEGMENT_DSC"); // Short description
    this.createLevelMap(customerMktSegmentLevel, _keys, _cols);
    // Create the top level, TOTAL_MARKET_AW.
    Level customerTotalMktLevel = customerDim.createLevel();
    customerTotalMktLevel.setName("TOTAL_MARKET_AW");
    customerTotalMktLevel.setShortName("TOTAL_MARKET_AW");
    customerTotalMktLevel.setLongName("TOTAL_MARKET_AW level");
    // Create AttributeProjection objects for the long and short description
    // attributes for the TOTAL_MARKET_AW Level.
    this.setupAttributeProjection(customerTotalMktLevel, "Long Description",
    customerLDAttr);
    this.setupAttributeProjection(customerTotalMktLevel, "Short Description",
    customerSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CUSTOMER_DIM.TOTAL_MARKET_ID");
    _cols.add("GLOBAL.CUSTOMER_DIM.TOTAL_MARKET_DSC"); // Long description
    _cols.add("GLOBAL.CUSTOMER_DIM.TOTAL_MARKET_DSC"); // Short description
    this.createLevelMap(customerTotalMktLevel, _keys, _cols);
    // Create the MARKET_SEGMENT_AW Hierarchy.
    Hierarchy marketSegmentHier = customerDim.createHierarchy();
    marketSegmentHier.setName("MARKET_SEGMENT_AW");
    marketSegmentHier.setShortName("MARKET_SEGMENT_AW");
    marketSegmentHier.setLongName("MARKET_SEGMENT_AW hierarchy");
    // Add the Level objects for the Hierarchy, and the columns for them,
    // to Vector objects in the hierarcharchical order of the levels,
    // with the top level first.
    this.clearHierarchyMapVectors();
    _levels.add(customerTotalMktLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.TOTAL_MARKET_ID");
    _levels.add(customerMktSegmentLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.MARKET_SEGMENT_ID");
    _levels.add(customerAccountLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.ACCOUNT_ID");
    _levels.add(customerShip_ToLevel);
    _levColumns.add("GLOBAL.CUSTOMER_DIM.SHIP_TO_ID");
    // Specify the levels for the hierarchy and map them to relational columns.
    this.createHierarchyMap(marketSegmentHier, _levels, _levColumns);
    * Creates Attribute, Level, and Hierarchy objects for the Product Dimension.
    public void createProductDim(Dimension productDim)
    // Indicate that the primary key of the dimension table contains the
    // lowest-level dimension members.
    productDim.setUseNativeKey(true);
    // Create the Attribute objects for the Dimension.
    Attribute packageAttr = productDim.createAttribute();
    packageAttr.setName("PACKAGE_AW");
    packageAttr.setClassification("USER");
    Attribute buyerAttr = productDim.createAttribute();
    buyerAttr.setName("BUYER_AW");
    buyerAttr.setClassification("USER");
    Attribute mktMngrAttr = productDim.createAttribute();
    mktMngrAttr.setName("MARKETING_MANAGER_AW");
    mktMngrAttr.setClassification("USER");
    Attribute productLDAttr = createLongDescAttr(productDim);
    Attribute productSDAttr = createShortDescAttr(productDim);
    // Create the detail level, ITEM_AW.
    Level itemLevel = productDim.createLevel();
    itemLevel.setName("ITEM_AW");
    itemLevel.setShortName("ITEM_AW");
    itemLevel.setLongName("ITEM_AW level");
    // Create AttributeProjection objects for the attributes for the
    // ITEM_AW Level.
    this.setupAttributeProjection(itemLevel, "PACKAGE_AW", packageAttr);
    this.setupAttributeProjection(itemLevel, "BUYER_AW", buyerAttr);
    this.setupAttributeProjection(itemLevel, "MARKETING_MANAGER_AW", mktMngrAttr);
    this.setupAttributeProjection(itemLevel, "Long Description", productLDAttr);
    this.setupAttributeProjection(itemLevel, "Short Description", productSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.PRODUCT_DIM.ITEM_ID");
    _cols.add("GLOBAL.PRODUCT_DIM.ITEM_PACKAGE_ID");
    _cols.add("GLOBAL.PRODUCT_DIM.ITEM_BUYER");
    _cols.add("GLOBAL.PRODUCT_DIM.ITEM_MARKETING_MANAGER");
    _cols.add("GLOBAL.PRODUCT_DIM.ITEM_DSC"); // Long description
    _cols.add("GLOBAL.PRODUCT_DIM.ITEM_DSC"); // Short description
    this.createLevelMap(itemLevel, _keys,_cols);
    // Create the FAMILY_AW level.
    Level familyLevel = productDim.createLevel();
    familyLevel.setName("FAMILY_AW");
    familyLevel.setShortName("FAMILY_AW");
    familyLevel.setLongName("FAMILY_AW level");
    // Create AttributeProjection objects for the attributes for the
    // FAMILY_AW Level.
    this.setupAttributeProjection(familyLevel, "Long Description",
    productLDAttr);
    this.setupAttributeProjection(familyLevel, "Short Description",
    productSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.PRODUCT_DIM.FAMILY_ID");
    _cols.add("GLOBAL.PRODUCT_DIM.FAMILY_DSC"); // Long description
    _cols.add("GLOBAL.PRODUCT_DIM.FAMILY_DSC"); // Short description
    this.createLevelMap(familyLevel, _keys,_cols);
    // Create the CLASS_AW level.
    Level classLevel = productDim.createLevel();
    classLevel.setName("CLASS_AW");
    classLevel.setShortName("CLASS_AW");
    classLevel.setLongName("CLASS_AW level");
    // Create AttributeProjection objects for the attributes for the
    // CLASS_AW Level.
    this.setupAttributeProjection(classLevel, "Long Description",
    productLDAttr);
    this.setupAttributeProjection(classLevel, "Short Description",
    productSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.PRODUCT_DIM.CLASS_ID");
    _cols.add("GLOBAL.PRODUCT_DIM.CLASS_DSC"); // Long description
    _cols.add("GLOBAL.PRODUCT_DIM.CLASS_DSC"); // Short description
    this.createLevelMap(classLevel, _keys,_cols);
    // Create the top level, TOTAL_PRODUCT_AW.
    Level totalProductLevel = productDim.createLevel();
    totalProductLevel.setName("TOTAL_PRODUCT_AW");
    totalProductLevel.setShortName("TOTAL_PRODUCT_AW");
    totalProductLevel.setLongName("TOTAL_PRODUCT_AW level");
    // Create AttributeProjection objects for the attributes for the
    // TOTAL_PRODUCT_AW Level.
    this.setupAttributeProjection(totalProductLevel, "Long Description",
    productLDAttr);
    this.setupAttributeProjection(totalProductLevel, "Short Description",
    productSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.PRODUCT_DIM.TOTAL_PRODUCT_ID");
    _cols.add("GLOBAL.PRODUCT_DIM.TOTAL_PRODUCT_DSC"); // Long description
    _cols.add("GLOBAL.PRODUCT_DIM.TOTAL_PRODUCT_DSC"); // Short description
    this.createLevelMap(totalProductLevel, _keys,_cols);
    // Create the PRODUCT_PRIMARY_AW Hierarchy.
    Hierarchy prodPrimaryHier = productDim.createHierarchy();
    prodPrimaryHier.setName("PRODUCT_PRIMARY_AW");
    prodPrimaryHier.setShortName("PRODUCT_PRIMARY_AW");
    prodPrimaryHier.setLongName("PRODUCT_PRIMARY_AW level");
    // Add the Level objects for the Hierarchy, and the columns for them,
    // to Vector objects in the hierarcharchical order of the levels,
    // with the top level first.
    this.clearHierarchyMapVectors();
    _levels.add(totalProductLevel);
    _levColumns.add("GLOBAL.PRODUCT_DIM.TOTAL_PRODUCT_ID");
    _levels.add(classLevel);
    _levColumns.add("GLOBAL.PRODUCT_DIM.CLASS_ID");
    _levels.add(familyLevel);
    _levColumns.add("GLOBAL.PRODUCT_DIM.FAMILY_ID");
    _levels.add(itemLevel);
    _levColumns.add("GLOBAL.PRODUCT_DIM.ITEM_ID");
    // Specify the levels for the hierarchy and map them to relational columns.
    this.createHierarchyMap(prodPrimaryHier, _levels, _levColumns);
    * Creates Attribute, Level, and Hierarchy objects for the Channel Dimension.
    public void createChannelDimension(Dimension channelDim)
    // Indicate that the primary key of the dimension table contains the
    // lowest-level dimension members.
    channelDim.setUseNativeKey(true);
    // Create the Long and Short Description Attribute objects for the Dimension.
    Attribute channelLDAttr = createLongDescAttr(channelDim);
    Attribute channelSDAttr = createShortDescAttr(channelDim);
    // Create the Level objects for the Dimension.
    // Create the detail level, CHANNEL_AW.
    Level channelLevel = channelDim.createLevel();
    channelLevel.setName("CHANNEL_AW");
    channelLevel.setShortName("CHANNEL_AW");
    channelLevel.setLongName("CHANNEL_AW level");
    // Create AttributeProjection objects for the long and short description
    // attributes for the CHANNEL_AW Level.
    this.setupAttributeProjection(channelLevel, "Long Description",
    channelLDAttr);
    this.setupAttributeProjection(channelLevel, "Short Description",
    channelSDAttr);
    this.clearLevelMapVectors();
    _keys.add("GLOBAL.CHANNEL_DIM.CHANNEL_ID");
    _cols.add("GLOBAL.CHANNEL_DIM.CHANNEL_DSC"); // Long description
    _cols.add("GLOBAL.CHANNEL_DIM.CHANNEL_DSC"); // Short description
    this.createLevelMap(channelLevel, _keys, _cols);
    // Create the top level, ALL_CHANNELS_AW.
    Level allChannelsLevel = channelDim.createLevel();
    allChannelsLevel.setName("TOTAL_CHANNEL_AW");
    allChannelsLevel.setShortName("TOTAL_CHANNEL_AW");
    allChannelsLevel.setLongName("TOTAL_CHANNEL_AW level");
    // Create the Long and Short Description AttributeProjection objects for
    // the TOTAL_CHANNEL_AW Level.
    this.setupAttributeProjection(allChannelsLevel, "Long Description",
    channelLDAttr);
    this.setupAttributeProjection(allChannelsLevel, "Short Description",
    channelSDAttr);
    this.clearLevelMapVectors();
    // The order of the elements in the _cols Vector depends on the order
    // in which the attributes are created.
    // Columns in the relational tables are specified in the form
    // user.tablename.column
    _keys.add("GLOBAL.CHANNEL_DIM.TOTAL_CHANNEL_ID");
    _cols.add("GLOBAL.CHANNEL_DIM.TOTAL_CHANNEL_DSC"); // Long description
    _cols.add("GLOBAL.CHANNEL_DIM.TOTAL_CHANNEL_DSC"); // Short description.
    this.createLevelMap(allChannelsLevel, _keys, _cols);
    // Create the CHANNEL_PRIMARY_AW Hierarchy.
    Hierarchy chanRollupHier = channelDim.createHierarchy();
    chanRollupHier.setName("CHANNEL_PRIMARY_AW");
    chanRollupHier.setShortName("CHANNEL_PRIMARY_AW");
    chanRollupHier.setLongName("CHANNEL_PRIMARY_AW hierarchy");
    // Add the Level objects for the Hierarchy, and the columns for them,
    // to Vector objects in the hierarcharchical order of the levels,
    // with the top level first.
    this.clearHierarchyMapVectors();
    _levels.add(allChannelsLevel);
    _levColumns.add("GLOBAL.CHANNEL_DIM.TOTAL_CHANNEL_ID");
    _levels.add(channelLevel);
    _levColumns.add("GLOBAL.CHANNEL_DIM.CHANNEL_ID");
    // Specify the levels for the hierarchy and map them to relational columns.
    this.createHierarchyMap(chanRollupHier, _levels, _levColumns);
    * Create the Short_Description Attribute for a Dimension.
    public Attribute createShortDescAttr(Dimension dim)
    Attribute sdAttr = dim.createAttribute();
    sdAttr.setName("Short_Description");
    sdAttr.setClassification("MEMBER_SHORT_DESCRIPTION");
    return sdAttr;
    * Creates an AttributeProjection for a Level and sets the name and the
    * Attribute to project onto the Level.
    public void setupAttributeProjection(Level _lev, String _name, Attribute _attr)
    AttributeProjection _ap = _lev.createAttributeProjection();
    _ap.setName(_name);
    _ap.setAttribute(_attr);
    * Creates the associations between Level objects and a Hierarchy.
    public void createHierarchyMap(Hierarchy _hier, Vector _levels, Vector columns)
    int i = 0;
    for(Iterator _lev = _levels.iterator(); _lev.hasNext();)
    Level _curLev = (Level)_lev.next();
    HierarchyLevelAssociation _hla = _hier.createHierarchyLevelAssociation();
    _hla.setLevel(_curLev);
    DimensionMapGroup _dmg = _hla.createSourceDimensionMapGroup();
    DimensionKeySourceExpression _dkse = _dmg.CreateKeyMap();
    SourceColumn _levColumn = _dkse.CreateSourceColumn();
    _levColumn.setColumn((String)columns.elementAt(i));
    // The first level has no parent.
    // Each subsequent level does have a parent.
    // The first element in the Vector must be the top-most level.
    if (i > 0)
    HierarchicalParentSourceExpression _hpse = _dmg.CreateParentMap();
    SourceColumn _hpsesc = _hpse.CreateSourceColumn();
    _hpsesc.setColumn((String)columns.elementAt(i-1));
    i++;
    * Clears the Vector objects that are used for specifying the Level objects
    * in a Hierarchy and for mapping the levels to the columns of a relational
    * table.
    public void clearHierarchyMapVectors()
    _levels.removeAllElements();
    _levColumns.removeAllElements();
    * Clears the Vector objects that are used for mapping a Level object to the
    * columns of a relational table.
    public void clearLevelMapVectors()
    _keys.removeAllElements();
    _cols.removeAllElements();
    * Creates a DimensionMapGroup that maps a Level to the columns of
    * a relational table.
    public void createLevelMap(Level _lev, Vector _keys, Vector _columns)
    // Map the keys of the relational table to the level.
    DimensionMapGroup _dmg = _lev.createSourceDimensionMapGroup();
    DimensionKeySourceExpression _key = _dmg.CreateKeyMap();
    for (int y=0; y < _keys.size(); y++)
    SourceColumn _keycol = _key.CreateSourceColumn();
    _keycol.setColumn((String)_keys.elementAt(y));
    // Map the columns of the relational tables or views to the
    // AttributeProjection objects.
    int i = 0;
    for(Iterator attrs = _lev.getAttributes().iterator(); attrs.hasNext();)
    AttributeProjection _curAttr = (AttributeProjection)attrs.next();
    AttributeSourceExpression _attrMap = _dmg.CreateAttributeMap();
    _attrMap.setTargetObject(_curAttr);
    SourceColumn _attrCol = _attrMap.CreateSourceColumn();
    _attrCol.setColumn((String)_columns.elementAt(i));
    i++;
    * Clears the Vector objects that are used for specifying the Level objects
    * in a Hierarchy and for mapping the levels to the columns of a relational
    * table.
    public void clearCubeMapVectors()
    _measures.removeAllElements();
    _measCols.removeAllElements();
    _levels.removeAllElements();
    _cols.removeAllElements();
    _dimList.removeAllElements();
    * Specifies the dimensions for a Cube.
    public void associateCubeDimensions(Cube _cube, Vector _dimList)
    for (int i=0; i < _dimList.size(); i++)
    CubeDimRef _cdr = _cube.createCubeDimRef();
    Dimension _dim = (Dimension)_dimList.elementAt(i);
    _cdr.setDimension(_dim);
    * Maps the columns of the relational tables to the dimensions and measures
    * of the analytic workspace Cube.
    public void createCubeMap(Cube _cube, Vector _levels, Vector _columns,
    Vector _measures, Vector _measCols)
    CubeMapGroup _cmg = _cube.createSourceCubeMapGroup();
    // Create the primary key in the fact table.
    for (int y=0; y < _levels.size(); y++)
    CubeDimensionSourceExpression _cdse = _cmg.CreateKeyMap();
    _cdse.addLevel((Level)_levels.elementAt(y));
    // Loop through the associated comma delimited
    // FKey columns in the fact table.
    StringTokenizer _st =
    new StringTokenizer((String)_columns.elementAt(y), "," );
    while (_st.hasMoreTokens())
    SourceColumn _keycol = _cdse.CreateSourceColumn();
    _keycol.setColumn(_st.nextToken());
    for(int x=0; x < _measures.size(); x++)
    Measure curMeasure = (Measure)_measures.elementAt(x);
    curMeasure.setAutoSolve("NO_AUTO_SOLVE");
    String curMeascol = (String)_measCols.elementAt(x);
    MeasureSourceExpression _measMap = _cmg.CreateAttributeMap();
    _measMap.setTargetObject(curMeasure);
    SourceColumn _meascol = _measMap.CreateSourceColumn();
    _meascol.setColumn(curMeascol);
    * Specifies excluding NA values when computing values while building the
    * analytic workspace.
    public void precomputeNA(Cube _cube, String _aggdef_name)
    // Rename the default aggregation definition that was implicitly created.
    AggregationDefinition _aggdef =_cube.getDefaultAggregationDefinition();
    _aggdef.setName(_aggdef_name);
    // Remove the default calculation specification.
    _aggdef.getCalculationSpecification().clear();
    Vector _dimrefs = _cube.getCubeDimRefs();
    for (Iterator _d = _dimrefs.iterator(); _d.hasNext();)
    AggregationHierarchySpecification _aggHierSpec =
    _aggdef.createAggregationHierarchySpecification();
    CubeDimRef _dimref = (CubeDimRef)_d.next();
    Dimension _dim = _dimref.getDimension();
    _aggHierSpec.setDimension(_dim);
    PreComputeClause _precompute_clause =
    _aggHierSpec.createPreComputeClause();
    DimensionMemberExpression _dimMemExp =
    _precompute_clause.createDimensionMemberExpression();
    _dimMemExp.setExpression("ALL");
    _dimMemExp.setExpressionType("EXCLUDE");
    * Deletes the analytic workspace if it already exists.
    private void deleteExistingAW(AWConnection awConnection, String user,
    String awName)
    try
    OracleConnection conn = (OracleConnection)
    awConnection.getSQLConnection();
    SPLExecutor splExec = new SPLExecutor(conn);
    splExec.initialize();
    try
    System.out.println("Deleting " + user + "." + awName + " if it exists.");
    splExec.executeCommand("aw delete " + user + "." + awName);
         // System.out.println("Deleted " + user + "." + awName + ".");
    catch(Exception e)
    // System.out.println("The " + user + "." + awName + " analytic workspace "
    // + "either did not exist or it could not be deleted.");
    catch(SQLException e)
    System.out.println("Could not initialize the SPL executor. " + e);
    private String getConnectionProperty(Properties props)
    String conn = props.getProperty("conn");
    if (conn == null)
    String url = props.getProperty("url");
    if (url.indexOf("@") > 0)
    conn = url.substring((url.lastIndexOf("@") + 1), url.length());
    props.put("conn", conn);
    return conn;
    public static void main(String[] args)
    new BuildAWExample().execute(args);
    }

Maybe you are looking for

  • Encrypted external drive not recognized

    I encrypted the FireWire drive I use for my Time Machine backup using Lion.  Due to other issues, I've done a clean Lion install from an installer I created on a USB drive. If I boot from the USB drive, I'm able to access my Time Machine backup witho

  • Spotlight Still not Working...Please Help!

    Originally my Spotlight was not working at all. No Search capability whatsoever. I had a Red X in the Top Right of the screen where the Spotlight icon was supposed to be. Spotlight also did not show up in System Prefs. I did an Archive and Reinstall

  • Stock in warehouse report - value not displayed.

    In the "Stock in warehouse report" I selected this option: Price source = Last purchase price. In the report, for an item, the value in the field "Item Price" is not displayed. This item has a good receipt (with value) in this year. Why the value is

  • CP 5 Project templates wrong after upgrade to CP 5.5

    Hi, I just upgraded my CP 5 to CP 5.5 and discovered that all my project templates are NOK anymore This is what I see: All Placeholders no matter which one have an angle of -1 in CP 5.5. I opened the templates in CP 5 and they are still OK. Reopen in

  • Pop Up message when clicking digital signature stating "this is an official document"

    How can I have a message pop up when clicking on digital signature that warns the person they are signing an official government document.  I invision the message popping up making the statement and a button within the message that can be clicked to