001    /*
002    // $Id: Measure.java 482 2012-01-05 23:27:27Z jhyde $
003    //
004    // Licensed to Julian Hyde under one or more contributor license
005    // agreements. See the NOTICE file distributed with this work for
006    // additional information regarding copyright ownership.
007    //
008    // Julian Hyde licenses this file to you under the Apache License,
009    // Version 2.0 (the "License"); you may not use this file except in
010    // compliance with the License. You may obtain a copy of the License at:
011    //
012    // http://www.apache.org/licenses/LICENSE-2.0
013    //
014    // Unless required by applicable law or agreed to in writing, software
015    // distributed under the License is distributed on an "AS IS" BASIS,
016    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017    // See the License for the specific language governing permissions and
018    // limitations under the License.
019    */
020    package org.olap4j.metadata;
021    
022    /**
023     * Data value of primary interest to the user browsing the cube.
024     *
025     * <p>A <code>Measure</code> provides the value of each cell, and is usually
026     * numeric. Every measure is a member of a special dimension called "Measures".
027     *
028     * @author jhyde
029     * @version $Id: Measure.java 482 2012-01-05 23:27:27Z jhyde $
030     * @since Oct 13, 2006
031     */
032    public interface Measure extends Member {
033        /**
034         * Returns the Aggregator of this Measure.
035         *
036         * @return Aggregator
037         */
038        Aggregator getAggregator();
039    
040        /**
041         * Returns the data type of this Measure.
042         *
043         * @return data type
044         */
045        Datatype getDatatype();
046    
047        /**
048         * Returns whether this Measure is visible.
049         *
050         * @return whether this Measure is visible
051         */
052        boolean isVisible();
053    
054        /**
055         * Enumeration of the aggregate functions which can be used to derive a
056         * <code>Measure</code>.
057         *
058         * <p>The values are as specified by XMLA.
059         * For example, XMLA specifies MDMEASURE_AGGR_SUM with ordinal 1,
060         * which corresponds to the value {@link #SUM},
061         * whose {@link #xmlaOrdinal} is 1.
062         */
063        enum Aggregator implements XmlaConstant {
064            /**
065             * Identifies that the measure was derived using the
066             * SUM aggregation function.
067             */
068            SUM(1),
069            /**
070             * Identifies that the measure was derived using the
071             * COUNT aggregation function.
072             */
073            COUNT(2),
074            /**
075             * Identifies that the measure was derived using the
076             * MIN aggregation function.
077             */
078            MIN(3),
079            /**
080             * Identifies that the measure was derived using the
081             * MAX aggregation function.
082             */
083            MAX(4),
084            /**
085             * Identifies that the measure was derived using the
086             * AVG aggregation function.
087             */
088            AVG(5),
089            /**
090             * Identifies that the measure was derived using the
091             * VAR aggregation function.
092             */
093            VAR(6),
094            /**
095             * Identifies that the measure was derived using the
096             * STDEV aggregation function.
097             */
098            STD(7),
099            /**
100             * Identifies that the measure was derived from a formula that was not
101             * any single function above.
102             */
103            CALCULATED(127),
104    
105            /**
106            * Identifies that the measure was derived from an unknown aggregation
107            * function or formula.
108             */
109            UNKNOWN(0);
110    
111            private final int xmlaOrdinal;
112            private static final DictionaryImpl<Aggregator> DICTIONARY =
113                DictionaryImpl.forClass(Aggregator.class);
114    
115            /**
116             * Creates an Aggregator.
117             *
118             * @param xmlaOrdinal Ordinal of the aggregator in the XMLA
119             * specification
120             */
121            private Aggregator(int xmlaOrdinal) {
122                this.xmlaOrdinal = xmlaOrdinal;
123            }
124    
125            public String xmlaName() {
126                return "MDMEASURE_AGGR_" + name();
127            }
128    
129            public String getDescription() {
130                return "";
131            }
132    
133            public int xmlaOrdinal() {
134                return xmlaOrdinal;
135            }
136    
137            /**
138             * Per {@link org.olap4j.metadata.XmlaConstant}, returns a dictionary
139             * of all values of this enumeration.
140             *
141             * @return Dictionary of all values
142             */
143            public static Dictionary<Aggregator> getDictionary() {
144                return DICTIONARY;
145            }
146        }
147    }
148    
149    // End Measure.java