Error when adding Non-Cumulative InfoCube to a Multi-Providers

I want to include an InfoCube using non-cumulative key figures (0IC_C03) to a MultiProvider that includes other basic cubes.  Is this possible?  I thought I read that you could include one non-cumulative cube in a MultiProvider.  When I added 0IC_C03 to the MultiProvider I get the following error when activating: "Define the characteristics of the validity table for non-cumulatives."  The validity table is defined for 0IC_C03, do I need to do anything special in the multiprovider?  Any ideas on what I need to do?
Thanks,
Chris
Edited by: Chris Robertson on Nov 18, 2008 4:52 PM

Hi Chris,
I am having the same issue. Did you manage to fix this?
Thanks,
Milind

Similar Messages

  • Non-cumulative keyfigures in virutual multi providers in BI-7.

    Is it possible to use non-cumulative keyfigures in virutual multi providers in BI-7? The Non-cumulative KFs are working in the cube. But when we create a virutual MP that contains this cube. They all are showing zero. Is this supported at all? Is there a note that we need to apply? Please help! This is BI-7.
    Thanks.

    Hi,
    Do not use more than one InfoCube with non-cumulative key figures in a MultiProvider since this may result in incorrect numbers in the query.
    Refer to SAP Note 690475 on SAP Support Portal.
    Refer
    http://help.sap.com/saphelp_nw04s/helpdata/en/43/5617d903f03e2be10000000a1553f6/frameset.htm
    Thanks,
    JituK

  • Incorrect results after compressing a non-cumulative InfoCube

    Hi Gurus,
    In BI 7.0 After compressing the non cumulative InfoCube its showing the incorrect reference points .leis_03_bf (pintail stock moments)  showing as the reference points(opening Balance) after compressing  as no marker update. Due to this its showing in correct result in reporting.please suggest me .
    Thanks
    Naveen

    Hi Nirajan,
    First of all as I undestood 2LIS_03_BX is the initial upload of stocks, so there is no need of delta load for this datasource, it collects data from MARC, and MARD tables when running the stock setup in R3 and you ahve to load it just one time.
    If between delta loads of 2LIS_03_BF you're loading full updates you are dupplicating material movements data, the idea of compression with marker update is that this movements affects to the stock value in the query, it's because of that when you load the delta init you do it without marker update because these movements are contained in the opening stock loaded with 2LIS_03_BX so you dont want to affect the stock calculation.
    You can refer to the How to handle Inventory management scenarios in BW for more detail on the topic.
    I hope this helps,
    Regards,
    Carlos.

  • Non cumulative infocube compression

    Hi All,
    Presently we have a problem with Non cumulative infocube comression.
    It is like: Presently Non Cumulative infocube contains 2 years of data and we are extracting data from two datasources (2LIS_03_BX AND 2LIS_03_BF) since 2years it has not been compressed.
    Now we are going to do the comprresion
    It is like : 2LIS_03_BX Init load compreesing with marker update (not selecting check box).
    2LIS_03_BF init load copressing without marker update (selecting check box)
    2LIS_03_BF delta load compressing with marker update(not selecting check box)
    2LIS_03_BX delta upload compressing without marker update(selecting check box)
    Here my doubt is in between delta loads there are some full uploads from 2LIS_03_BF datasource how can i copress this full uploads from 2LIS_03_BF req's?
    Please help me it is quiet urget.
    Thanx,
    Niranjan.

    Hi Nirajan,
    First of all as I undestood 2LIS_03_BX is the initial upload of stocks, so there is no need of delta load for this datasource, it collects data from MARC, and MARD tables when running the stock setup in R3 and you ahve to load it just one time.
    If between delta loads of 2LIS_03_BF you're loading full updates you are dupplicating material movements data, the idea of compression with marker update is that this movements affects to the stock value in the query, it's because of that when you load the delta init you do it without marker update because these movements are contained in the opening stock loaded with 2LIS_03_BX so you dont want to affect the stock calculation.
    You can refer to the How to handle Inventory management scenarios in BW for more detail on the topic.
    I hope this helps,
    Regards,
    Carlos.

  • BIA - Non-Cumulative InfoCubes

    Anyone have experience with the BIA and non-cumulative InfoCubes ? Is the validity table (L-table) of the InfoCube indexed making it more feasible to add more validity-determining characteristics to the cube ?

    Hi,
    BI accelerator ( BIA ) allows you to improve the performance of BI queries when data is read from only possible with InfoCubes that have cumulative key figures...
    Note provided by Marc is really nice............Anyways check this.....
    http://help.sap.com/saphelp_nw04s/helpdata/en/a8/48c0417951d117e10000000a155106/frameset.htm
    https://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/11c4b71d-0a01-0010-5ca0-aadc2415b137#top
    Regards,
    Debjani.....

  • Error when adding a partition to a materlialized view

    Hi,
    I am getting this error when adding a partition to a materialized view.
    ALTER MATERIALIZED VIEW mvedw.MV_CLM_CAPITN_F ADD PARTITION MAR2013 VALUES LESS THAN ('201304')
    ERROR at line 1:
    ORA-14074: partition bound must collate higher than that of the last partition
    Please advise.
    Regards,
    Narayan

    SQL> select TABLE_OWNER,TABLE_NAME,PARTITION_NAME,HIGH_VALUE from dba_tab_partitions where table_name =
    'MV_CLM_CAPITN_F' order by PARTITION_NAME 2
    3 ;
    TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
    MVEDW MV_CLM_CAPITN_F APR2009 '200905'
    MVEDW MV_CLM_CAPITN_F APR2010 '201005'
    MVEDW MV_CLM_CAPITN_F APR2011 '201105'
    MVEDW MV_CLM_CAPITN_F APR2012 '201205'
    MVEDW MV_CLM_CAPITN_F AUG2009 '200909'
    MVEDW MV_CLM_CAPITN_F AUG2010 '201009'
    MVEDW MV_CLM_CAPITN_F AUG2011 '201109'
    MVEDW MV_CLM_CAPITN_F AUG2012 '201209'
    MVEDW MV_CLM_CAPITN_F DEC2008 '200901'
    MVEDW MV_CLM_CAPITN_F DEC2009 '201001'
    MVEDW MV_CLM_CAPITN_F DEC2010 '201101'
    TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
    MVEDW MV_CLM_CAPITN_F DEC2012 '201301'
    MVEDW MV_CLM_CAPITN_F FEB2009 '200903'
    MVEDW MV_CLM_CAPITN_F FEB2010 '201003'
    MVEDW MV_CLM_CAPITN_F FEB2011 '201103'
    MVEDW MV_CLM_CAPITN_F FEB2012 '201203'
    MVEDW MV_CLM_CAPITN_F FEB2013 '201303'
    MVEDW MV_CLM_CAPITN_F JAN2009 '200902'
    MVEDW MV_CLM_CAPITN_F JAN2010 '201002'
    MVEDW MV_CLM_CAPITN_F JAN2011 '201102'
    MVEDW MV_CLM_CAPITN_F JAN2012 '201202'
    MVEDW MV_CLM_CAPITN_F JAN2013 '201302'
    TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
    MVEDW MV_CLM_CAPITN_F JUL2009 '200908'
    MVEDW MV_CLM_CAPITN_F JUL2010 '201008'
    MVEDW MV_CLM_CAPITN_F JUL2011 '201108'
    MVEDW MV_CLM_CAPITN_F JUL2012 '201208'
    MVEDW MV_CLM_CAPITN_F JUN2009 '200907'
    MVEDW MV_CLM_CAPITN_F JUN2010 '201007'
    MVEDW MV_CLM_CAPITN_F JUN2011 '201107'
    MVEDW MV_CLM_CAPITN_F JUN2012 '201207'
    MVEDW MV_CLM_CAPITN_F MAR2009 '200904'
    MVEDW MV_CLM_CAPITN_F MAR2010 '201004'
    MVEDW MV_CLM_CAPITN_F MAR2011 '201104'
    TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
    MVEDW MV_CLM_CAPITN_F MAR2012 '201204'
    MVEDW MV_CLM_CAPITN_F MAR2013 '201304'
    MVEDW MV_CLM_CAPITN_F MAY2009 '200906'
    MVEDW MV_CLM_CAPITN_F MAY2010 '201006'
    MVEDW MV_CLM_CAPITN_F MAY2011 '201106'
    MVEDW MV_CLM_CAPITN_F NOV2009 '200912'
    MVEDW MV_CLM_CAPITN_F NOV2010 '201012'
    MVEDW MV_CLM_CAPITN_F NOV2012 '201212'
    MVEDW MV_CLM_CAPITN_F OCT2009 '200911'
    MVEDW MV_CLM_CAPITN_F OCT2010 '201011'
    MVEDW MV_CLM_CAPITN_F OCT2011 '201111'
    TABLE_OWNER TABLE_NAME PARTITION_NAME HIGH_VALUE
    MVEDW MV_CLM_CAPITN_F OCT2012 '201211'
    MVEDW MV_CLM_CAPITN_F SEP2009 '200910'
    MVEDW MV_CLM_CAPITN_F SEP2010 '201010'
    MVEDW MV_CLM_CAPITN_F SEP2011 '201110'
    MVEDW MV_CLM_CAPITN_F SEP2012 '201210'
    These are the list of partitions available.
    Regards,
    Narayan

  • Unable to create Archiving for non-cumulative InfoCube

    Dear Gurus,
    I'm working with BI in SAP Nw 2004s with SAPKW70016 (Support Package 16) and need to create archiving on a non-cumulative Infocube (copy of 0RT_C36) but can't use tx RSDAP. Although I found note 1056294, which says that upon SP14 it can't be done the following message is sent:
    Cannot create data archiving process for ZRT_C36
    Message no. RSDA109
    Diagnosis
    You can only create a data archiving process for standard DataStore objects and standard InfoCubes. You cannot create a data archiving process for other InfoProviders such as VirtualProviders.
    In particular, non-cumulative InfoCubes and write-optimized DataStore objects are not currently supported.
    Please let me know what is wrong or how can I do this archiving in 2004s. I also read some documentation about RSDV transaction but couldn't find how to implement it using tx. RSDAP.
    Thanks in advanced.
    Best regards,
    Pilar Infantas.

    Please, any feedback about this issue???

  • Error when adding Essbase server...

    Hi,
    I installed Hyperion System 9.3.1 in my development machine and encounter the following error when adding a Essbase server in AAS for the first time.
    Error: 1042017: Network error: The client or server timed out waiting to receive data using TCP/IP. Check network connections. Increase the NetRetryCount and/or NetDelay values in the ESSBASE.CFG file. Update this file on both client and server. Restart the client and try again.
    I used the default user "admin" and password "password". I used my servername:10080 as the server name. I hope I am right.
    Why is this happening? I tried changing netdelay settings but still get the same. Is this something else? Does this have anything to do with my TCP/IP settings? I am installing this on a virtual PC.
    I couldn't find an answer in previous posts.
    regards
    h

    The things that come to mind:
    The server name you use should be the name of the virtual PC, not the machine it's running on. Also, depending on the settings for the Virtual PC environment, you may have to change the network options to allow it to be visible to the network, be in the right domain, etc...
    The above may or may not get you any closer, the error message itself is just saying it can't receive a response from the server, which means the server never got the request or can't send a response back.
    Good Luck,

  • Library error when adding contact or when logging in

    The messenger server has a replica of the partition holding the users.
    It's an OES 2 sp2 server, and the GW Messenger is 2.04.
    Sometimes we see an error that says 'Library error' when adding a contact, or it doesn't show all users that exists with the search parameter given.
    We also sporadically see a 'Library error' when some users log in to it.
    Looking in the log I see an error that says 0xAE16 when users log in fails.
    I can find the 0xAE11 error in the TID's but not the 0xAE16, I did find an article on the forums, mentioning this problem http://forums.novell.com/novell-prod...or-server.html, they mention memory problems, so it seems to me there is a bug that needs fixing.

    I've disabled the '/diruseralias-"Internet EMail Address"' setting that was set up in the strtup.ma and strtup.aa scripts.
    I've also, for now at least, chosen another replica.
    I haven't seen the errors yet, so here's hoping...

  • Error when adding any menu - FRM-40735: ON-INSERT trigger raised unhandled

    When I try to add any new menu in my newly cloned instance I get this error:
    Error when adding any menu - FRM-40735: ON-INSERT trigger raised unhandled excpetion. ORA-04031.
    Using Oracle EBS version 12.1.3.
    Details:
    Menu JOB_STRUCTURE_MENU
    User Menu Name Job Strucure Menu
    Menu Type Standard
    Description Menu to add job, grade, and incentives
    Seq = 1
    Prompt = Enter and Maintain
    Function = Combined Person & Assignment Form WF="US SHRMS TSKFLW
    When I click save I get the error.
    Any assistance would be greatly appreciated.
    Thanks!

    Please post the details of the application release, database version and OS.
    When I try to add any new menu in my newly cloned instance I get this error:
    Error when adding any menu - FRM-40735: ON-INSERT trigger raised unhandled excpetion. ORA-04031.Is the issue with all menus or specific ones only?
    Did AutoConfig complete successfully?
    When I click save I get the error.
    Any assistance would be greatly appreciated.Do you have any invalid objects in the database?
    Any errors in the database log file?
    Please obtain FRD log file for details about the error -- https://forums.oracle.com/forums/search.jspa?threadID=&q=FRD+AND+R12&objID=c3&dateRange=all&userID=&numResults=15&rankBy=10001
    Thanks,
    Hussein

  • About non-cumulative InfoCubes

    Hello Gurus,
        what is non-cumulative InfoCubes?
    Many thanks.

    Hi,
    0IC_C03 is used for inventory cube(also called as inventory cube)
    normally inventory means both the stock inflow and outflow will be there that means some stock will come to the stock point the same day some stock move out from the godown that fro same object inflow outflow should maintain by using some code in updaterules(by using some indicators we will write the code).
    for example: in one stock point one material is there today s its quantiy is 20kg and today itself 100 kg purchasing and 50 kg selling that means the now avilable quantity is old quanti20 + newpurchase100 -selling50kg means finally 70kg balance.
    like that the non cumulative(it is not cumulating the all values)so it is working as non cumulative.
    like that one more example
    no of employs in ur copmany for the year 0f 2009
    if it is cumulative keyfigure
    if the employs are as below 2007--100no
    2008---150
    2009---75
    if u r using that directly no of employs u can get all(10015075=325) if u not restricting the year with number of employs.
    but in case of non cumulative it gives only 75 so it is correct.here we r using the year as ref in non cumulative keyfigure directly we r getting 75.
    Thanks & Regarda
    sathish
    Thank

  • Non-cumulative infocube in Infoset: Inventory

    Hi Experts,
    I have a requirement to combine a infocube and DSO under Infoset. But the Infocube is non cumulative and is not allowing to add in infoset.
    Any solutions for this?
    My Infocube is customised and have 3 datasources: 2LIS_03_BF, 2LIS_03_BX and 2LIS_03_UM
    And my DSO contains the alternate UOM with a single datasource: 0MAT_UNIT_ATTR
    My Ultimate aim is to bring the alternate UOM.
    Please post your suggestions.
    Thanks,
    Guru

    Hi Nirajan,
    First of all as I undestood 2LIS_03_BX is the initial upload of stocks, so there is no need of delta load for this datasource, it collects data from MARC, and MARD tables when running the stock setup in R3 and you ahve to load it just one time.
    If between delta loads of 2LIS_03_BF you're loading full updates you are dupplicating material movements data, the idea of compression with marker update is that this movements affects to the stock value in the query, it's because of that when you load the delta init you do it without marker update because these movements are contained in the opening stock loaded with 2LIS_03_BX so you dont want to affect the stock calculation.
    You can refer to the How to handle Inventory management scenarios in BW for more detail on the topic.
    I hope this helps,
    Regards,
    Carlos.

  • Unable to compress non-cumulative infocube with 0DOC_NUM

    Hi Gurus!
    I'm working on a retail project. I've created an infocube based on 0RT_C01 to keep the stock movements. It is a non-cumulative cube.
    After the load of the initialization data (2lis_03_bx) ,historical movements, the initialization of 2lis_03_bf, the daily delta loads take about 10-11 hours to complete.This is because the cube has not been compressed due to the existence of infoobject 0DOC_NUM. 0DOC_NUM is of the lowest granularity and so compressing on 0DOC_NUM will not yield any performance benefits. But this has impacted the performance of daily delta loads. Also,the report that uses this cube take about 3-4 hours to open initially.Sometimes a timeout occurs.I've checked in ST22, ST21 and no errors or dumps appear.
    Is there anything I can check to speed up the process?
    Thanks!
    Lucia

    Hi,
    Compressing the request containing the opening stock that was uploaded. Make sure the "No marker update" indicator is not set. Please consider note 643687 ,before you carry out the compression of requests in stock Info Cubes!
    After successfully uploading the historical material movements, the associated request has to be compressed. You must make sure the "No marker update" indicator is set. This is necessary because the historical material movements are
    already contained in the opening stock.
    Regards,
    Suman

  • Aggregates on Non-cumulative InfoCubes, stock key figures, stock, stocks,

    Hi..Guru's
    Please let me know if  anybody has created aggregates on Non-Cumulative Cubes or key figure (i.e. 0IC_C03 Inventory Management.)
    I am facing the problem of performance related at the time of execution of query in 0IC_C03.( runtime dump )
    I have tried lot on to create aggregate by using proposal from query and other options. But its not working or using that aggr by query.
    Can somebody tell me about any sample aggr. which they are using on 0ic_c03.
    Or any tool to get better performance to execute query of the said cube.
    One more clarification req that what is Move the Marker pointer for stock calculation. I have compressed only two inital data loading req. should I compress the all req in cube (Regularly)
    If so there would be any option to get req compress automatically after successfully load in data target.
    We are using all three data sources 2lis_03_bx,bf & um for the same.
    Regards,
    Navin

    Hi,
    Definately the compression has lot of effect on the quey execution time for Inventory cubes <b>than</b> other cumulated cubes.
    So Do compression reqularly, once you feel that the deletion of request is not needed any more.
    And ,If the query do not has calday characterstic and need only month characterstic ,use Snap shot Info cube(which is mentioned and procedure is given in How to paper) and divert the month wise(and higher granularity on time characterstic ,like quarter & year) queries to this cube.
    And, the percentage of improvement in qury execution time in case of aggregates is less for non cumulated cubes when compared to other normal(cumulated) cubes. But still there is improvement in using aggregates.
    With rgds,
    Anil Kumar Sharma .P
    Message was edited by: Anil Kumar Sharma

  • TableSorter errors when adding new data

    so here is the deal:
    I am using the TableSorter.java helper class with DefaultTableModel
    from: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html
    It works great when the data is static and I get it for the first time. however, occationally, when adding new data I get a NullPointerException error.
    in use:
    DefaultTableModel.addRow()
    DefaultTableModel.removeRow() and
    DefaultTableModel.insertRow() methods.
    Error:
    java.lang.ArrayIndexOutOfBoundsException: 5
         at com.shared.model.TableSorter.modelIndex(TableSorter.java:294)
         at com.shared.model.TableSorter.getValueAt(TableSorter.java:340)
         at javax.swing.JTable.getValueAt(Unknown Source)
         at javax.swing.JTable.prepareRenderer(Unknown Source)...
    code problem I:
        public Object getValueAt(int row, int column)
            return tableModel.getValueAt(modelIndex(row), column);
        }code problem II:
        public int modelIndex(int viewIndex)
                 return getViewToModel()[viewIndex].modelIndex;     
        }TableSroter class:
    package com.shared.model;
    import java.awt.*;
    import java.awt.event.*;
    import java.util.*;
    import java.util.List;
    import javax.swing.*;
    import javax.swing.event.TableModelEvent;
    import javax.swing.event.TableModelListener;
    import javax.swing.table.*;
    * TableSorter is a decorator for TableModels; adding sorting
    * functionality to a supplied TableModel. TableSorter does
    * not store or copy the data in its TableModel; instead it maintains
    * a map from the row indexes of the view to the row indexes of the
    * model. As requests are made of the sorter (like getValueAt(row, col))
    * they are passed to the underlying model after the row numbers
    * have been translated via the internal mapping array. This way,
    * the TableSorter appears to hold another copy of the table
    * with the rows in a different order.
    * <p/>
    * TableSorter registers itself as a listener to the underlying model,
    * just as the JTable itself would. Events recieved from the model
    * are examined, sometimes manipulated (typically widened), and then
    * passed on to the TableSorter's listeners (typically the JTable).
    * If a change to the model has invalidated the order of TableSorter's
    * rows, a note of this is made and the sorter will resort the
    * rows the next time a value is requested.
    * <p/>
    * When the tableHeader property is set, either by using the
    * setTableHeader() method or the two argument constructor, the
    * table header may be used as a complete UI for TableSorter.
    * The default renderer of the tableHeader is decorated with a renderer
    * that indicates the sorting status of each column. In addition,
    * a mouse listener is installed with the following behavior:
    * <ul>
    * <li>
    * Mouse-click: Clears the sorting status of all other columns
    * and advances the sorting status of that column through three
    * values: {NOT_SORTED, ASCENDING, DESCENDING} (then back to
    * NOT_SORTED again).
    * <li>
    * SHIFT-mouse-click: Clears the sorting status of all other columns
    * and cycles the sorting status of the column through the same
    * three values, in the opposite order: {NOT_SORTED, DESCENDING, ASCENDING}.
    * <li>
    * CONTROL-mouse-click and CONTROL-SHIFT-mouse-click: as above except
    * that the changes to the column do not cancel the statuses of columns
    * that are already sorting - giving a way to initiate a compound
    * sort.
    * </ul>
    * <p/>
    * This is a long overdue rewrite of a class of the same name that
    * first appeared in the swing table demos in 1997.
    * @author Philip Milne
    * @author Brendon McLean
    * @author Dan van Enckevort
    * @author Parwinder Sekhon
    * @version 2.0 02/27/04
    public class TableSorter extends AbstractTableModel
        protected TableModel tableModel;
        public static final int DESCENDING = -1;
        public static final int NOT_SORTED = 0;
        public static final int ASCENDING = 1;
        private static Directive EMPTY_DIRECTIVE = new Directive(-1, NOT_SORTED);
        public static final Comparator COMPARABLE_COMAPRATOR = new Comparator()
            public int compare(Object o1, Object o2)
                return ((Comparable) o1).compareTo(o2);
        public static final Comparator LEXICAL_COMPARATOR = new Comparator()
            public int compare(Object o1, Object o2)
                return o1.toString().compareTo(o2.toString());
        private Row[] viewToModel;
        private int[] modelToView;
        private JTableHeader tableHeader;
        private MouseListener mouseListener;
        private TableModelListener tableModelListener;
        private Map columnComparators = new HashMap();
        private List sortingColumns = new ArrayList();
        public TableSorter()
            this.mouseListener = new MouseHandler();
            this.tableModelListener = new TableModelHandler();
        public TableSorter(TableModel tableModel)
            this();
            setTableModel(tableModel);
        public TableSorter(TableModel tableModel, JTableHeader tableHeader)
            this();
            setTableHeader(tableHeader);
            setTableModel(tableModel);
        private void clearSortingState()
            viewToModel = null;
            modelToView = null;
        public TableModel getTableModel()
            return tableModel;
        public void setTableModel(TableModel tableModel)
            if (this.tableModel != null)
                this.tableModel.removeTableModelListener(tableModelListener);
            this.tableModel = tableModel;
            if (this.tableModel != null)
                this.tableModel.addTableModelListener(tableModelListener);
            clearSortingState();
            fireTableStructureChanged();
        public JTableHeader getTableHeader()
            return tableHeader;
        public void setTableHeader(JTableHeader tableHeader)
            if (this.tableHeader != null)
                this.tableHeader.removeMouseListener(mouseListener);
                TableCellRenderer defaultRenderer = this.tableHeader.getDefaultRenderer();
                if (defaultRenderer instanceof SortableHeaderRenderer)
                    this.tableHeader.setDefaultRenderer(((SortableHeaderRenderer) defaultRenderer).tableCellRenderer);
            this.tableHeader = tableHeader;
            if (this.tableHeader != null)
                this.tableHeader.addMouseListener(mouseListener);
                this.tableHeader.setDefaultRenderer
                        new SortableHeaderRenderer(this.tableHeader.getDefaultRenderer())
        public boolean isSorting()
            return sortingColumns.size() != 0;
        private Directive getDirective(int column)
            for (int i = 0; i < sortingColumns.size(); i++)
                Directive directive = (Directive)sortingColumns.get(i);
                if (directive.column == column)
                    return directive;
            return EMPTY_DIRECTIVE;
        public int getSortingStatus(int column)
            return getDirective(column).direction;
        private void sortingStatusChanged()
            clearSortingState();
            fireTableDataChanged();
            if (tableHeader != null)
                tableHeader.repaint();
        public void setSortingStatus(int column, int status)
            Directive directive = getDirective(column);
            if (directive != EMPTY_DIRECTIVE)
                sortingColumns.remove(directive);
            if (status != NOT_SORTED)
                sortingColumns.add(new Directive(column, status));
            sortingStatusChanged();
        protected Icon getHeaderRendererIcon(int column, int size)
            Directive directive = getDirective(column);
            if (directive == EMPTY_DIRECTIVE)
                return null;
            return new Arrow(directive.direction == DESCENDING, size, sortingColumns.indexOf(directive));
        private void cancelSorting()
            sortingColumns.clear();
            sortingStatusChanged();
        public void setColumnComparator(Class type, Comparator comparator)
            if (comparator == null)
                columnComparators.remove(type);
            else
                columnComparators.put(type, comparator);
        protected Comparator getComparator(int column)
            Class columnType = tableModel.getColumnClass(column);
            Comparator comparator = (Comparator) columnComparators.get(columnType);
            if (comparator != null)
                return comparator;
            if (Comparable.class.isAssignableFrom(columnType))
                return COMPARABLE_COMAPRATOR;
            return LEXICAL_COMPARATOR;
        private Row[] getViewToModel()
            if (viewToModel == null)
                int tableModelRowCount = tableModel.getRowCount();
                viewToModel = new Row[tableModelRowCount];
                for (int row = 0; row < tableModelRowCount; row++)
                    viewToModel[row] = new Row(row);
                if (isSorting())
                    Arrays.sort(viewToModel);
            return viewToModel;
        public int modelIndex(int viewIndex)
                 return getViewToModel()[viewIndex].modelIndex;     
        private int[] getModelToView()
            if (modelToView == null)
                int n = getViewToModel().length;
                modelToView = new int[n];
                for (int i = 0; i < n; i++)
                    modelToView[modelIndex(i)] = i;
            return modelToView;
        // TableModel interface methods
        public int getRowCount()
            return (tableModel == null) ? 0 : tableModel.getRowCount();
        public int getColumnCount()
            return (tableModel == null) ? 0 : tableModel.getColumnCount();
        public String getColumnName(int column)
            return tableModel.getColumnName(column);
        public Class getColumnClass(int column)
            return tableModel.getColumnClass(column);
        public boolean isCellEditable(int row, int column)
            return tableModel.isCellEditable(modelIndex(row), column);
        public Object getValueAt(int row, int column)
            return tableModel.getValueAt(modelIndex(row), column);
        public void setValueAt(Object aValue, int row, int column)
            tableModel.setValueAt(aValue, modelIndex(row), column);
        // Helper classes
        private class Row implements Comparable
            private int modelIndex;
            public Row(int index)
                this.modelIndex = index;
            public int compareTo(Object o)
                int row1 = modelIndex;
                int row2 = ((Row) o).modelIndex;
                for (Iterator it = sortingColumns.iterator(); it.hasNext();)
                    Directive directive = (Directive) it.next();
                    int column = directive.column;
                    Object o1 = tableModel.getValueAt(row1, column);
                    Object o2 = tableModel.getValueAt(row2, column);
                    int comparison = 0;
                    // Define null less than everything, except null.
                    if (o1 == null && o2 == null)
                        comparison = 0;
                    } else if (o1 == null)
                        comparison = -1;
                    } else if (o2 == null)
                        comparison = 1;
                    } else {
                        comparison = getComparator(column).compare(o1, o2);
                    if (comparison != 0)
                        return directive.direction == DESCENDING ? -comparison : comparison;
                return 0;
        private class TableModelHandler implements TableModelListener
            public void tableChanged(TableModelEvent e)
                // If we're not sorting by anything, just pass the event along.            
                if (!isSorting())
                    clearSortingState();
                    fireTableChanged(e);
                    return;
                // If the table structure has changed, cancel the sorting; the            
                // sorting columns may have been either moved or deleted from            
                // the model.
                if (e.getFirstRow() == TableModelEvent.HEADER_ROW)
                    cancelSorting();
                    fireTableChanged(e);
                    return;
                // We can map a cell event through to the view without widening            
                // when the following conditions apply:
                // a) all the changes are on one row (e.getFirstRow() == e.getLastRow()) and,
                // b) all the changes are in one column (column != TableModelEvent.ALL_COLUMNS) and,
                // c) we are not sorting on that column (getSortingStatus(column) == NOT_SORTED) and,
                // d) a reverse lookup will not trigger a sort (modelToView != null)
                // Note: INSERT and DELETE events fail this test as they have column == ALL_COLUMNS.
                // The last check, for (modelToView != null) is to see if modelToView
                // is already allocated. If we don't do this check; sorting can become
                // a performance bottleneck for applications where cells 
                // change rapidly in different parts of the table. If cells
                // change alternately in the sorting column and then outside of            
                // it this class can end up re-sorting on alternate cell updates -
                // which can be a performance problem for large tables. The last
                // clause avoids this problem.
                int column = e.getColumn();
                if (e.getFirstRow() == e.getLastRow()
                        && column != TableModelEvent.ALL_COLUMNS
                        && getSortingStatus(column) == NOT_SORTED
                        && modelToView != null)
                    int viewIndex = getModelToView()[e.getFirstRow()];
                    fireTableChanged(new TableModelEvent(TableSorter.this,
                                                         viewIndex, viewIndex,
                                                         column, e.getType()));
                    return;
                // Something has happened to the data that may have invalidated the row order.
                clearSortingState();
                fireTableDataChanged();
                return;
        private class MouseHandler extends MouseAdapter
            public void mouseClicked(MouseEvent e)
                JTableHeader h = (JTableHeader) e.getSource();
                TableColumnModel columnModel = h.getColumnModel();
                int viewColumn = columnModel.getColumnIndexAtX(e.getX());
                int column = columnModel.getColumn(viewColumn).getModelIndex();
                if (column != -1)
                    int status = getSortingStatus(column);
                    if (!e.isControlDown())
                        cancelSorting();
                    // Cycle the sorting states through {NOT_SORTED, ASCENDING, DESCENDING} or
                    // {NOT_SORTED, DESCENDING, ASCENDING} depending on whether shift is pressed.
                    status = status + (e.isShiftDown() ? -1 : 1);
                    status = (status + 4) % 3 - 1; // signed mod, returning {-1, 0, 1}
                    setSortingStatus(column, status);
        private static class Arrow implements Icon
            private boolean descending;
            private int size;
            private int priority;
            public Arrow(boolean descending, int size, int priority)
                this.descending = descending;
                this.size = size;
                this.priority = priority;
            public void paintIcon(Component c, Graphics g, int x, int y)
                Color color = c == null ? Color.GRAY : c.getBackground();            
                // In a compound sort, make each succesive triangle 20%
                // smaller than the previous one.
                int dx = (int)(size/2*Math.pow(0.8, priority));
                int dy = descending ? dx : -dx;
                // Align icon (roughly) with font baseline.
                y = y + 5*size/6 + (descending ? -dy : 0);
                int shift = descending ? 1 : -1;
                g.translate(x, y);
                // Right diagonal.
                g.setColor(color.darker());
                g.drawLine(dx / 2, dy, 0, 0);
                g.drawLine(dx / 2, dy + shift, 0, shift);
                // Left diagonal.
                g.setColor(color.brighter());
                g.drawLine(dx / 2, dy, dx, 0);
                g.drawLine(dx / 2, dy + shift, dx, shift);
                // Horizontal line.
                if (descending) {
                    g.setColor(color.darker().darker());
                } else {
                    g.setColor(color.brighter().brighter());
                g.drawLine(dx, 0, 0, 0);
                g.setColor(color);
                g.translate(-x, -y);
            public int getIconWidth()
                return size;
            public int getIconHeight()
                return size;
        private class SortableHeaderRenderer implements TableCellRenderer
            private TableCellRenderer tableCellRenderer;
            public SortableHeaderRenderer(TableCellRenderer tableCellRenderer)
                this.tableCellRenderer = tableCellRenderer;
            public Component getTableCellRendererComponent(JTable table,
                                                           Object value,
                                                           boolean isSelected,
                                                           boolean hasFocus,
                                                           int row,
                                                           int column)
                Component c = tableCellRenderer.getTableCellRendererComponent(table,
                        value, isSelected, hasFocus, row, column);
                if (c instanceof JLabel) {
                    JLabel l = (JLabel) c;
                    l.setHorizontalTextPosition(JLabel.LEFT);
                    int modelColumn = table.convertColumnIndexToModel(column);
                    l.setIcon(getHeaderRendererIcon(modelColumn, l.getFont().getSize()));
                return c;
        private static class Directive
            private int column;
            private int direction;
            public Directive(int column, int direction)
                this.column = column;
                this.direction = direction;
    }any input will be appreciated.
    thanks
    Peter

    The code you posted doesn't help us at all. Its just a duplicate of the code from the tutorial. The custom code is what you have written. For example do you update the TableModel from the Event Thread? Do you update the SortModel or the DefaultTableModel? If you actually provide your test code and somebody has already downloaded the sort classes, then maybe they will test your code against the classes. But I doubt if people will download the sort classes and create a test program just to see if they can duplicate your results (at least I know I'm not about to).

Maybe you are looking for

  • I can not open the Editor in Photoshop Element 12

    Hallo and sorry for my bad english! I can not open the editor in Photoshop Elements 12. After clicking the stands ".... only the workspace is loaded", but nothing happens. After installation in May, he has about a month and suddenly no longer works.

  • Is it possible to EXPORT video films from the iPod to iTunes ?

    EXPORTING FILES FROM IPOD TO ITUNES Obviously, I know how to send files from iTunes to iPod. But is it possible to do the opposite way ? I have video files on my iPod that got lost on my hard drive. I'd like to save them back to the hard drive (and i

  • How can I Integrate FCKEditor 2.6 in APEX???

    Hello! I want integrate FCKEditor 2.6 in Apex and i need your help. Now I use the standard html editor of Apex but i don't like the code generated for the editor... For example, I write a text and this is the code generated for the size: size="7" <=

  • File adapter configuration

    Hi , In file adapter, when we use quality of service:EOIO ,it asks for Queue name,what do we have to give there? Thanks

  • HT1190 Nord Modular g2 demo, MAC OS x 10.7.4

    helo i have mac os x 10.7.4, i want to make nord modular g2 ( http://www.clavia.se/products/nordmodular/demo.htm ) work. but it says: the PowerPC architecture is no longer supported. can somebody help me?