The example in this section shows how you would add a new dimension, specifically a shipping method dimension. Having added this, you could then create reports that show sales by shipping method.

Note: Take care when designing new dimensions. One potential pitfall lies in the reduction of performance that can result if your queries join your new dimension to existing, large dimensions such as the User dimension. Always consider whether you could extend an existing dimension instead, or otherwise streamline your data gathering process.

To add a new dimension:

  1. Prepopulate the table with your data. This can be done many ways, including executing INSERT statements for static data or pipeline processors for more dynamic information. Since this table is your custom creation, you are responsible for its maintenance. For this example, since shipping methods are unlikely to change often, prepopulating it via INSERT statement would probably be used.

  2. Modify the ARF_LINE_ITEM table to add a SHIPPING_METHOD_ID column, which is a foreign key reference to the ACME_SHIPPING_METHOD table’s ID column.

  3. Extend the /atg/reporting/datawarehouse/dataWarehouseRepository.xml file to add a ShippingMethod item:

    <item-descriptor name="ShippingMethod">
      <table name="ACME_SHIPPING_METHOD" id-column-names="id" type="primary">
        <property name="carrier" column-name="CARRIER" type="string"/>
        <property name="deliveryComment" column-name="DELIVERY_COMMENT"
        <property name="name" column-name="NAME" type="string"/>

    Modify the line item (you can use XML-combine to make this task easier; for information, see the ATG Repository Guide).

    <item-descriptor name="lineItem">
      <table name="ARF_LINE_ITEM">
        <property name="shippingMethodID" column-name="SHIPPING_METHOD_ID"

    For this example, the ID is of type int. If necessary, you can create a new item type instead.

  4. Create a new pipeline processor in /atg/reporting/datawarehouse/process/ called ShippingMethodLookupProcessor. The new processor must do the following:

    • Look up the shipping method ID. In this case, the pipeline should look up the shipping method based on some property in the order.

    • At the end of the processor, set the output to the member value. In this case, set lineItem.shippingMethodID to the member value as shown in the following code:

      runProcess(Object pParam, PipelineResult pResult) {

      // perform shipping method id lookup
      Dynamic.Beans.setPropertyValue(pParam, "lineItem.shippingMethodId",

    You may want to review the information on existing pipeline processors in this guide. The exact features of your pipeline will vary depending on what information you are retrieving and what, if any, transformations you want to make to the data.

  5. Modify the pipeline chain to include your new lookup processor. Add the following line to the file:

    <pipelinelink name-"shippingMethodLookup" transaction="TX_MANDATORY">
      <processor jndi="/atg/reporting/datawarehouse/process

  6. Modify the /atg/reporting/datawarehouse/process/ file:

    lookupProperties += \lineItem.shippingMethodId

    dimensionProperties += \shippingMethodId

  7. Modify the metadata model to include the new attribute.

    The model is located in the <ATG10dir>/DCS/DW/cpf directory.

  8. Republish the metadata model with your changes.

  9. Copy and modify the provided reports, or create new reports that use the new attribute.