Analytic Workspaces and Database Tablespace

Hi,
I am trying to understand the intricacies in the setup of Analytic Workspaces and their corresponding tablespaces in the database, and here is the background:
I created an Analytic Workspace, say AW1 in a database that had a tablespace, say TS1. After sometime, I created another Tablespace, TS2 in the same database and using the same schema as before, created an Analytic Workspace, AW2 in TS2.
However, AW2 seems to get created in TS1 even though I select TS2 explicitly at the time of creating AW2. Also, if I drop an AW created using TS2 and then import it again (in the same schema) from the template, it gets created in TS1 and not TS2 as I would expect.
In essence, it seems to me that all AWs get created in the TS that was the first TS of my database (TS1 in this case), irrespective of the fact that I created them in different Tablespaces. Also, for all these experiments, the database and the environment is the same.
Can anyone please explain this behavior?
For reference, the database in use is Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
and the AWs have been created using Oracle Analytic Workspace Manager (AWM) v10.2.0.3.0A.
Any help is much appreciated.
Thanks and Regards,
Piyush

Hi Piyush,
AWM lets you specify the tablespace for your AW which allows you to override the default tablespace for the user. However, this information is not recorded in the XML template. Therefore, if you create an AW in a non-default tablespace, save the definition to an XML template, drop the AW and use the XML template to rebuild the AW then the AW will get created in the default tablespace.
There are two workarounds to this (that I can think of)
1) Use a script to rebuild the AW from the XML template and alter the users default tablespace as part of the script and then set it back after the AW has been built.
2) Use the AW Create packages that do allow you to specify the tablespace for the AW, run the DML command to create the standard form metadata and then script the loading of the XML definitions for each dimension and all your cubes.
Hope this helps
Keith Laker
Oracle EMEA Consulting
BI Blog: http://oraclebi.blogspot.com/
DM Blog: http://oracledmt.blogspot.com/
BI on Oracle: http://www.oracle.com/bi/
BI on OTN: http://www.oracle.com/technology/products/bi/
BI Samples: http://www.oracle.com/technology/products/bi/samples/

Similar Messages

  • 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)

  • Creating Database Standard Form Analytic Workspaces

    Just been looking through the new 9.2.0.4.1 documentation and came across the following. Thought it might be useful.
    The 9.2.0.4.1 release of Oracle OLAP introduces a new concept known as �Database Standard Form� Analytic Workspaces. This is a way of constructing analytic workspaces in a standard way such that they can be used by tools such as the Analytic Workspace Manager, the Java OLAP API, and BI Beans.
    When analytic workspaces are created from a relational star-schema using the Analytic Workspace Manager, it automatically creates the analytic workspace in standard form as part of the migration process. However, if you�re migrating an Express database to Oracle OLAP, the migrated database has to be processed to be in standard form before it is usable by any of the new Oracle OLAP GUI tools.
    If you create an analytic workspace using PL/SQL or the OLAP Worksheet, of course you can create dimensions, variables, relations and so on in any form, just as you can create table structures, joins, views and columns in any form in a relational database. However, the database standard form requirement stipulates that;
    Certain objects and properties need to be found in the analytic workspace, that are used by tools such as the Analytic Workspace Manager to perform tasks such as aggregation, data loads, and OLAP API enablement. OLAP DML views (beginning with AW$) need to created in the analytic workspace, to provide metadata and to identify relationships between objects in the analytic workspace. Objects need to be registered in the OLAP Catalog, and these registrations have to be kept in sync so that the OLAP tools are aware of changes to the base objects. Data that is migrated in to an analytic workspace, from a relational star-schema using the Analytic Workspace Manager, is already in database standard form and no further work is needed. However, some work is needed to get migrated Express databases into standard form, and Oracle have provided a utility with the 9.2.0.4.1 release of Oracle OLAP to help accomplish this.
    This utility, known as CREATE_DB_STDFORM, is an OLAP DML program that takes existing Oracle Express Objects metadata in a migrated Express database, and uses this to create the additional metadata required to make the analytic workspace �database standard form�.
    Once CREATE_DB_STDFORM has been used to create this additional metadata, it can also be used to import data into the workspace either from flat files, or from Oracle tables and views. If you don�t have Express Objects metadata in the Express database, CREATE_DB_STDFORM doesn�t work, and you�ll have to use Oracle Warehouse Builder 9.2 to initially create a relational star-schema that equates to the Express database, then use the OLAP Bridge within OWB to export the data into a database standard form analytic workspace.
    CREATE_DB_STDFORM, once run, allows the migrated Express database to be accessed via BI Beans straight afterwards, as it creates all the OLAP Catalog entries required for the OLAP API. If the Express database only contains data at the lowest level (i.e. it hasn�t been rolled up), aggregation wizards in the Analytic Workspace Manager can be used to summarise the data as required.
    CREATE_DB_STDFORM doesn�t do everything, however. First of all, you need to have created Oracle Express Objects metadata within the Express database, which is an additional step and not always appropriate for all systems. In addition, you need to create time dimensions in a particular way, which may require the data model to be adjusted to meet this requirement. Lastly, any Express language programs within the Express database may need to be adjusted to remove or change commands that have changed or become obsolete.
    The new document, �Oracle OLAP Application Developers Guide Release 9.2.0.4.1�, available on metalink under note 251352.1, details how database standard form works, has code examples, and walks through the migration of the XADEMO Express database to an analytic workspace using database standard form.

    In your message, you wrote "Certain objects and properties need to be found ... aware of changes to base objects". A large bit is represented by "...". Question is whether I have any commands or package functions that I can use to set up all the proper objects and relationships to make it have database standard form, short of regressing to a ROLAP star schema and usnig the AWM wizard. I have what appears to be working MOLAP activity, all created at the OLAP worksheet prompt, and loaded with DML program. Do I really have to put that all aside and start with a star schema? No way to put my AW in standard form for OLAP API without this?

  • 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);
    }

  • Are Analytic Workspaces suitable for very large data sets?

    Hi all,
    I have made many different tests with analytic workspaces and i have used the different features (compression,composites...). The results especially for maintenance are disappointing.
    I have a star schema with 6 dimensions. The fact table has 730 million rows, the first dimension has 2,9 million rows and the other 5 dimensions have between 25 and 300 rows each.
    My conclusion is that Analytic Workspaces don't help in situations like mine. The time for maintenance is very very bad not to mention the time for aggregations. I even tried to populate the cube in parts( 90 million rows for the first population) but nothing change. And there are some other problems with storage and tablespaces ( I always get the message unable to extent TEMP tablespace. The size of it is 54Gb).
    Is there something i missing? Has anyone similar problem or different opinion?
    Thank you,
    Ilias

    A few other tips to add to Keith's excellent advice:
    - How many CPU's does your server have? The answer to this may help you decide the optimal level to partition at (in my experience DAY is too low and can cause different problems). What other levels does your time dimension have? Are you loading your cubes in parallel?
    - To speed up your load, partition your underlying fact table with the same granularity as your cubes and place an index on the field mapped to the partition dimension
    - Are you using 10.2.0.3? If so, be very careful with the storage data type you choose when creating your cubes. The default in 10.2.0.3 is NUMBER which has the capability of storing data to 38 significant figures. This usually exceeds what is required for most datasets. If your dataset allows you to use storage of 15 significant figures then you should create your cubes using the DECIMAL data type instead. This will use about one third of the storage space and significantly increase your build speeds (in my experience, more than 3 times faster)
    - Make sure you have preallocated enough permanent and temporary tablespaces for your build. Autoextending can be very time consuming.
    - Consider reducing the amount of aggregation you do in batch. It should not be necessary to pre-aggregate everything in order to get good query performance.
    Generally, I would say that the volume should not be a problem. A single dimension with 2.9 million values is fairly big and can be slow (in OLAP terms) to query but that should not be an obstacle to building it in the first place.
    Good luck!
    Stuart

  • Is it possible to create relational view on Analytic Workspace in Oracle 9i Release1

    Hi All,
    We are in the initial stages of Oracle 9i OLAP prototype. Since the current version of BIBeans 2.5 does not work with Release 2 of Oracle 9i OLAP, we are planning to use Oracle 9i OLAP Release 1. So can you please answer the following questions.
    1. Is it possible to create relational view on Analytic Workspace(like in Release 2) and populate the OLAP catalog, if so can you give me guidance to get the appropriate user guide. The OLAP DML guide in Release 1 talks about creating OLAP catalog metadata for Analytic Workspace using a metadata locator object.
    2, Is it advisable to use Oralce 9i OLAP Release 1? Does the Analytic Workspace and the corresponding BIBeans work in Release 1?
    Thank you,
    Senthil

    Analytic Workspaces (Express/multidimensional data objects and procedures written in
    the OLAP DML) are new to Oracle9i OLAP Release 2, you cannot find them in Release 1.
    BI Beans will soon (within a week) introduce a version on OTN that will work with Oracle9i OLAP Release 2.

  • How can I query analytical workspace ?

    Hello,
    I am using EBS module ODP which uses Analytical workspaces.
    I do not know at all technical subject about Analytical workspaces and OLAP.
    In ODP , I create measures. And ODP provides some report to display and update data stored in my measures.
    I would like to extract data from my measures. How can I do this ?
    => How can I find the internal measure name, the measure column or attribute ...
    => Are there functions to extract the data (like sql language to read in tables )
    => Can anyone give me some commands, and examples to start extracting simple data from my measures(I have had a look to Oracle documentation, but they are very technical and I don't know how to start).

    There are views available in OLAPSYS schema which will give information about the Analytical workspaces and their objects.
    For extracting data from Analytic workspaces you may use the TABLE FUNCTIONS.
    You may refer 'B14346-01 - Oracle OLAP DML Reference 10g Release 2 (10.2)' for details.
    Regards,
    Maruthi

  • Which Analytic Workspace Manager version should I use?

    hi
    Right now I am using DB 9.2.0.8 with OLAP Analytic Workspace and OLAP Catalog. Then which version of AWM should I use if I would like to create some demo cube on the instance?
    this one?
    http://otn.oracle.com/software/htdocs/devlic.html?http://download.oracle.com/otn/java/olap/awm920.zip
    Thanks,
    Scott

    I recommend you check out Werner Puschitz's site, as it's the best source of information for installing Oracle on Redhat.
    Cheers, APC

  • Refresh Analytic Workspace increase tablespace size ?

    Hello, I'm using CWM2 OLAP objects with 9.2.0.6 database version. I have analytic workspaces, too.
    I execute refresh of my analytic workspace, using the script generated by Analytic Workspace Manager 9.2.0.4.1. I have noticed that, strangely, whenever I execute the script, it increases the used space of the tablespace containing analytic workspace.
    Is this usual ? The script doesn't include new objects, and the effect is the same. What is failing ? I think that this should not happen.
    Any idea ? Thanks a lot by your help

    vbarres wrote:
    if my datawarehouse
    grows dinamically (I'm adding new objects every day),
    what size has to have my aw tablespace ? It's
    difficult to reserve space on disk for this...I'm confused here. Are you really adding new objects every day, or just adding more data to the existing ones. In general, if you are adding more data, the growth should be reasonably predictable, assuming a reasonable AW design. The usual growth confusion has to do with reloading the same data over again, where the growth is unexpected.
    rhaug wrote:
    I had a similar problem in my AW. The temp and the aw tablespace got ridiculously big. >The temp tablespace exceeded 20gb before the disk got full and everything crashed.
    In my case I had made several cubes to perform different tests. When I deleted all but >one cube things behaved more normal and the aggregation time was stable.Again, I'm not sure what is going on here from the descriptions. As far as I know, there should not be a problem with multiple cubes in the same AW. You don't say what version you are in, but is it possibly version 10? I could see some interaction in a parallel build, where the various cubes are built simultaneously, and thus the pages on the free list are necessarily available for reuse when you might want them. More details would be interesting here. You might also try a serial build (I'm not sure where the switch is in AWM, but I'm sure it's there somewhere).

  • Does  Analytic Workspace Manager 11.2.0.3.0A  work with oracle database 12c?

    hello,
    i would like to know if AWM 11.2.0.3.0A works against with oracle database 12c in pdb mode or not .
    regards
    jm

    I have attempted to connect 11g versions of AWM to 12c and get this error:
    'This version of Analytic Workspace Manager is incompatible with the database instance. The Analytic Workspace Manager version is 11.2.0.3.0 and the database compatible version is 12.1.0.0.0'
    So unfortunately it is not compatible, and there is currently no AWM for 12c
    I also contacted Oracle support and they wont give me any information about a release date or any information on the xml template specification for 12c.
    I guess we will just have to wait till they release a version of AWM that supports 12c...
    Laszlo

  • Oracle Express(Analytical workspace?) and Oracle warehousebuilder

    Can somebody please explain when and why to use
    Oracle Express(Analytical workspace?) and Oracle warehousebuilder.
    When should each of these tools be used?

    Oracle Express is an old, de-supported product that has been replaced by Oracle Database OLAP Server http://otn.oracle.com/products/bi/olap/olap.html.
    Oracle Warehouse Builder (OWB) is a data integration design and management tool. One of OWB's areas of functionality is enabling OLAP. All OWB OLAP related materials are summarized and linked from OWB Self-service Education page here http://otn.oracle.com/products/warehouse/selfserv_edu/OLAP_cube_creation.html
    Nikolai Rochnik

  • Re: Workspace integration and Database Mapping

    Subject: Re: Workspace integration and Database Mapping
    >
    1. I aggree with you that this is a weak point of Forte. A possible workaround is
    to have a Workspace 'BugFixes' where you fix your bugs without affecting the rest
    of your code.
    1 - When you integrate a workspace into the repository it takes all the
    changes you have made in that workspace and 'saves' them to the
    repository. However, what if you have a workspace which has a half
    finished project as well as another project which you make a small but
    important change to. The small change must go back because other
    developers need the 'fix', but the half finished project will essentially be
    'broken' if it is integrated at this stage. Is there any way to integrate
    only specific projects? If not, how do you stop the half finished project
    being copied into the other developers' workspaces when they do an
    'Update'.
    Hi Forte'rs
    I just would like to express my deep appreciation for the way integrating
    workspaces works in Forte.
    This makes it a lot safer to work with, because you can only test the
    COMPLETE set of code and not just the 'few' changes you just made...
    I, at least, always make quite a few changes in a bunch of classes, so it would be
    a complete mess to try to sort out which changes to integrate and which to keep
    in my workspace only.
    Now I also have been frustrated not being able to make a quick (and dirty) fix - but
    in hindsight - it is clear that you cannot be sure that the fix works in the real world
    (you know: the stuff outside your own heavily modified workspace).
    So while I agree with everyone that got frustrated by not been able to integrate
    just a few changes, I am also happy that this is not allowed!
    may the forte be with you all
    Jens Chr Juul Jensen
    KAD/Denmark
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    Subject: Re: Workspace integration and Database Mapping
    >
    1. I aggree with you that this is a weak point of Forte. A possible workaround is
    to have a Workspace 'BugFixes' where you fix your bugs without affecting the rest
    of your code.
    1 - When you integrate a workspace into the repository it takes all the
    changes you have made in that workspace and 'saves' them to the
    repository. However, what if you have a workspace which has a half
    finished project as well as another project which you make a small but
    important change to. The small change must go back because other
    developers need the 'fix', but the half finished project will essentially be
    'broken' if it is integrated at this stage. Is there any way to integrate
    only specific projects? If not, how do you stop the half finished project
    being copied into the other developers' workspaces when they do an
    'Update'.
    Hi Forte'rs
    I just would like to express my deep appreciation for the way integrating
    workspaces works in Forte.
    This makes it a lot safer to work with, because you can only test the
    COMPLETE set of code and not just the 'few' changes you just made...
    I, at least, always make quite a few changes in a bunch of classes, so it would be
    a complete mess to try to sort out which changes to integrate and which to keep
    in my workspace only.
    Now I also have been frustrated not being able to make a quick (and dirty) fix - but
    in hindsight - it is clear that you cannot be sure that the fix works in the real world
    (you know: the stuff outside your own heavily modified workspace).
    So while I agree with everyone that got frustrated by not been able to integrate
    just a few changes, I am also happy that this is not allowed!
    may the forte be with you all
    Jens Chr Juul Jensen
    KAD/Denmark
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

  • Analytic Workspace Manager 11.2.0.3.0a and Oracle11g 11.2.0.4

    Hello!
    I'm trying to connect from Analytic Workspace Manager, version 11.2.0.3.0a (latest one), to Oracle server ver. 11.2.0.4. Connection fails with following message "This version of Analytic Workspace Manager is incompatible with the database instance.". Is there a way to make this work? The solution I'm aware of is to downgrade a server. Maybe someone knows other solutions?
    Best regards
    Bart

    hello bart,
    try with oracle client 12C Oracle Database 12c Release 1 for Microsoft Windows (x64)
    Oracle client 12C contains awm 12C
    regards
    jean marc

  • Workspace integration and Database Mapping

    Hi there folks,
    I have a couple of questions about Forte.
    1 - When you integrate a workspace into the repository it takes all the
    changes you have made in that workspace and 'saves' them to the
    repository. However, what if you have a workspace which has a half
    finished project as well as another project which you make a small but
    important change to. The small change must go back because other
    developers need the 'fix', but the half finished project will essentially be
    'broken' if it is integrated at this stage. Is there any way to integrate
    only specific projects? If not, how do you stop the half finished project
    being copied into the other developers' workspaces when they do an
    'Update'.
    2 - We have designed a class called 'Criteria' which contains several
    attributes, each of which are a class called 'Criterion'. The Criterion
    class contains the attributes "Active", "From" and "To" which are simple
    data types. Now if the 'Criteria' class is used for attributes in two other
    classes (Say "ClassA" and "ClassB"), how can you match these
    classes to RDBMS tables? I realise you could explicitly name columns
    and attributes in SQL Select, Insert and Update statements, but that
    has now defeated the purpose of creating the 'Criteria' class in the first
    place. Namely, ease of future maintenance. Am I missing something
    here?
    Thanks in advance for any help.
    Cheers,
    Duncan Kinnear,
    McCarthy and Associates, Email: [email protected]
    PO Box 764, McLean Towers, Phone: +64 6 834 3360
    Shakespeare Road, Napier, New Zealand. Fax: +64 6 834 3369
    Providing Integrated Software to the Meat Processing Industry for over 10 years
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

    Duncan,
    1. There is no way to integrate a part of your workspace/class and not the other. So, before you integrate you have to make sure that it compiles and also your changes do not break what others are doing when they update. The only way to do it is to export the half finished projects/classes, integrate the good workspace and then import it back and continue your work.
    It is important that there is some discipline and lot of unit testing as your application grows bigger and code larger and you go towards deployment. This will reduce the possibility of breaking others code (after you integrate and others update).
    2. From what I have seen, compared to lot of tools Forte goes very far in providing a good and easy mapping from objects (rather object attributes) to table column mapping. All said and done there is a mismatch between pure objects and an RDBMS table. We have to live with it until we get to a stage where we can have OODBMSes which are still in its infancy compared RDBMSes. In forte you can map attributes of an object whose names are same as the column names. Another option is to alias the column names to match the attribute names in the SQL.
    Now for my pet discussion of mapping objects to tables - It is easier and simple if you map an object to a table. OO purists might argue with me and say that is not very OOriented. That is right but we are dealing with a mismatch here. It is just that we are impedance matching by trying to persist an object into an RDBMS table.The other possibilities are to map 1 to many from object to a table and vice versa. Choose whatever is right for you. Eventually keep the performance in mind when you choose an approach.
    Hope this helps.
    Nirmal
    Nirmal P Uppalapati Phone: (203) 622-5386
    VP-US Operations (203) 359-3992
    PSI Data Systems Ltd. Mobile: (203) 912-1302
    Suite 406 Fax: (203) 359-4662
    One Bank Street Email : [email protected]
    Stamford, CT 06901 USA Web: http://www.psi.soft.net
    -----Original Message-----
    From: Duncan Kinnear [SMTP:[email protected]]
    Sent: Wednesday, October 14, 1998 6:02 PM
    To: [email protected]
    Subject: Workspace integration and Database Mapping
    Hi there folks,
    I have a couple of questions about Forte.
    1 - When you integrate a workspace into the repository it takes all the
    changes you have made in that workspace and 'saves' them to the
    repository. However, what if you have a workspace which has a half
    finished project as well as another project which you make a small but
    important change to. The small change must go back because other
    developers need the 'fix', but the half finished project will essentially be
    'broken' if it is integrated at this stage. Is there any way to integrate
    only specific projects? If not, how do you stop the half finished project
    being copied into the other developers' workspaces when they do an
    'Update'.
    2 - We have designed a class called 'Criteria' which contains several
    attributes, each of which are a class called 'Criterion'. The Criterion
    class contains the attributes "Active", "From" and "To" which are simple
    data types. Now if the 'Criteria' class is used for attributes in two other
    classes (Say "ClassA" and "ClassB"), how can you match these
    classes to RDBMS tables? I realise you could explicitly name columns
    and attributes in SQL Select, Insert and Update statements, but that
    has now defeated the purpose of creating the 'Criteria' class in the first
    place. Namely, ease of future maintenance. Am I missing something
    here?
    Thanks in advance for any help.
    Cheers,
    Duncan Kinnear,
    McCarthy and Associates, Email: [email protected]
    PO Box 764, McLean Towers, Phone: +64 6 834 3360
    Shakespeare Road, Napier, New Zealand. Fax: +64 6 834 3369
    Providing Integrated Software to the Meat Processing Industry for over 10 years
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>
    To unsubscribe, email '[email protected]' with
    'unsubscribe forte-users' as the body of the message.
    Searchable thread archive <URL:http://pinehurst.sageit.com/listarchive/>

  • OLAP Analytic Workspace Manager and Worksheet

    Hi,
    I have installed a datawarehouse and OLAP 10gR2 on a WinXP but in the Start menu.
    - Oracle_home, in Integrated Management Tools, I do not haveOLAP Analytic
    Workspace Manager and Worksheet.
    What is the problem ? What more should I install ?
    Many thanks for your help.

    Hi,
    What more should I install ?Did you do the OLAP catalog (dbms_olap)?
    http://www.oracle.com/technology/products/bi/samples/samples_readme.html
    Check the install docs for full instructions, and don't forget to pay your $20,000.00 license fee first:
    http://oraclestore.oracle.com/OA_HTML/ibeCCtpSctDspRte.jsp?section=11222
    http://searchoracle.techtarget.com/tip/0,289483,sid41_gci1024826,00.html?topic=299433
    Another option is Excel-DB, an easier (and less expensive) way to Oracle-enable spreadsheets:
    http://www.excel-db.net/menu_overview.htm

Maybe you are looking for

  • MPEG-2 Import: How?

    Hi, Googled a lot, but nothing helped. I have mpeg-2 movies from my digicam, which are already on disk. I don't want to convert them before importing into iMovie. I tried putting them on a disk image, but it did not work. How exactly can I import mpe

  • Need help about xcode 6 in-house distribution.

    I have enrolled developer enterprise program, download developer and distribution certificate, add two certificate to keychain. I created a single view app, app id is com.test.idonotknow. created app id using wildcard(just like: com.test.*),created a

  • Screen always dim when resuming from sleep

    I've got this problem where my MBP, after waking up from sleep does not revert its brightness settings. Instead, the brightness is always one bar after waking up from sleep, instead of six bars which is my default and I have to adjust my screen brigh

  • Webservices with j2me base64Binary problem

    Hi, Iam new to webservices concepts, now iam trying to implement jsr172 with my project. In that WSDL have the type "type="s:base64Binary" for image byte array. While creating stubs the xxxx_stub file contains line : "_type_image = new Element(_qname

  • Download problem EHP1 for SolutionManager

    Hello everybody, I have problem to download the EHP1 for Solman ! The SAP Download Manager can't download all the Netweaver Upgrade Packages f.e. PI_BASIS 701 Upgrade. , SAP_BASIS 701 Upgrade the status message says  "The request failed 304" . And th