Search in sources :

Example 11 with Member

use of mondrian.olap.Member in project mondrian by pentaho.

the class SqlConstraintUtilsTest method testExpandSupportedCalculatedMembers.

public void testExpandSupportedCalculatedMembers() {
    Evaluator evaluator = Mockito.mock(Evaluator.class);
    Member endMember0 = Mockito.mock(Member.class);
    Member endMember1 = Mockito.mock(Member.class);
    Member endMember2 = Mockito.mock(Member.class);
    Member endMember3 = Mockito.mock(Member.class);
    Member argMember0 = null;
    Member argMember1 = null;
    Member[] argMembers = null;
    Member[] expectedMembers = null;
    // ()
    argMembers = new Member[] {};
    expectedMembers = new Member[] {};
    assertEveryExpandSupportedCalculatedMembers("()", expectedMembers, argMembers, evaluator);
    // (0, 2)
    argMember0 = endMember0;
    argMember1 = endMember2;
    argMembers = new Member[] { argMember0, argMember1 };
    expectedMembers = new Member[] { endMember0, endMember2 };
    assertEveryExpandSupportedCalculatedMembers("(0, 2)", expectedMembers, argMembers, evaluator);
    // (Aggr(0, 1), 2)
    argMember0 = makeAggregateExprMember(evaluator, Arrays.asList(new Member[] { endMember0, endMember1 }));
    argMember1 = endMember2;
    argMembers = new Member[] { argMember0, argMember1 };
    expectedMembers = new Member[] { endMember0, endMember1, endMember2 };
    assertEveryExpandSupportedCalculatedMembers("(Aggr(0, 1), 2)", expectedMembers, argMembers, evaluator);
    // (Aggr(0, 1), Aggr(3, 2))
    argMember0 = makeAggregateExprMember(evaluator, Arrays.asList(new Member[] { endMember0, endMember1 }));
    argMember1 = makeAggregateExprMember(evaluator, Arrays.asList(new Member[] { endMember3, endMember2 }));
    argMember1 = endMember2;
    argMembers = new Member[] { argMember0, argMember1 };
    expectedMembers = new Member[] { endMember0, endMember1, endMember2 };
    assertEveryExpandSupportedCalculatedMembers("(Aggr(0, 1), Aggr(3, 2))", expectedMembers, argMembers, evaluator);
}
Also used : Evaluator(mondrian.olap.Evaluator) SetEvaluator(mondrian.olap.Evaluator.SetEvaluator) Member(mondrian.olap.Member) TestMember(mondrian.olap.fun.TestMember)

Example 12 with Member

use of mondrian.olap.Member in project mondrian by pentaho.

the class VirtualCubeTest method testVirtualCubeMeasureCaption.

/**
 * Test case for bug <a href="http://jira.pentaho.com/browse/MONDRIAN-352">
 * MONDRIAN-352, "Caption is not set on RolapVirtualCubeMesure"</a>.
 */
public void testVirtualCubeMeasureCaption() {
    TestContext testContext = TestContext.instance().create(null, "<Cube name=\"TestStore\">\n" + "  <Table name=\"store\"/>\n" + "  <Dimension name=\"HCB\" caption=\"Has coffee bar caption\">\n" + "    <Hierarchy hasAll=\"true\">\n" + "      <Level name=\"Has coffee bar\" column=\"coffee_bar\" uniqueMembers=\"true\"\n" + "          type=\"Boolean\"/>\n" + "    </Hierarchy>\n" + "  </Dimension>\n" + "  <Measure name=\"Store Sqft\" caption=\"Store Sqft Caption\" column=\"store_sqft\" aggregator=\"sum\" formatString=\"#,###\"/>\n" + "</Cube>\n", "<VirtualCube name=\"VirtualTestStore\">\n" + "  <VirtualCubeDimension cubeName=\"TestStore\" name=\"HCB\"/>\n" + "  <VirtualCubeMeasure   cubeName=\"TestStore\" name=\"[Measures].[Store Sqft]\"/>\n" + "</VirtualCube>", null, null, null);
    Result result = testContext.executeQuery("select {[Measures].[Store Sqft]} ON COLUMNS," + "{[HCB]} ON ROWS " + "from [VirtualTestStore]");
    Axis[] axes = result.getAxes();
    List<Position> positions = axes[0].getPositions();
    Member m0 = positions.get(0).get(0);
    String caption = m0.getCaption();
    assertEquals("Store Sqft Caption", caption);
}
Also used : Position(mondrian.olap.Position) TestContext(mondrian.test.TestContext) Member(mondrian.olap.Member) Axis(mondrian.olap.Axis) Result(mondrian.olap.Result)

Example 13 with Member

use of mondrian.olap.Member in project mondrian by pentaho.

the class VirtualCubeTest method assertVisibility.

private void assertVisibility(Result result, int ordinal, String expectedName, boolean expectedVisibility) {
    List<Position> columnPositions = result.getAxes()[0].getPositions();
    Member measure = columnPositions.get(ordinal).get(0);
    assertEquals(expectedName, measure.getName());
    assertEquals(expectedVisibility, measure.getPropertyValue(Property.VISIBLE.name));
}
Also used : Position(mondrian.olap.Position) Member(mondrian.olap.Member)

Example 14 with Member

use of mondrian.olap.Member in project mondrian by pentaho.

the class CompoundPredicateInfo method makeCompoundGroup.

/**
 * Groups members (or tuples) from the same compound (i.e. hierarchy) into
 * groups that are constrained by the same set of columns.
 *
 * <p>E.g.
 *
 * <pre>Members
 *     [USA].[CA],
 *     [Canada].[BC],
 *     [USA].[CA].[San Francisco],
 *     [USA].[OR].[Portland]</pre>
 *
 * will be grouped into
 *
 * <pre>Group 1:
 *     {[USA].[CA], [Canada].[BC]}
 * Group 2:
 *     {[USA].[CA].[San Francisco], [USA].[OR].[Portland]}</pre>
 *
 * <p>This helps with generating optimal form of sql.
 *
 * <p>In case of aggregating over a list of tuples, similar logic also
 * applies.
 *
 * <p>For example:
 *
 * <pre>Tuples:
 *     ([Gender].[M], [Store].[USA].[CA])
 *     ([Gender].[F], [Store].[USA].[CA])
 *     ([Gender].[M], [Store].[USA])
 *     ([Gender].[F], [Store].[Canada])</pre>
 *
 * will be grouped into
 *
 * <pre>Group 1:
 *     {([Gender].[M], [Store].[USA].[CA]),
 *      ([Gender].[F], [Store].[USA].[CA])}
 * Group 2:
 *     {([Gender].[M], [Store].[USA]),
 *      ([Gender].[F], [Store].[Canada])}</pre>
 *
 * <p>This function returns a boolean value indicating if any constraint
 * can be created from the aggregationList. It is possible that only part
 * of the aggregationList can be applied, which still leads to a (partial)
 * constraint that is represented by the compoundGroupMap.
 */
private boolean makeCompoundGroup(int starColumnCount, RolapCube baseCube, List<List<Member>> aggregationList, Map<BitKey, List<RolapCubeMember[]>> compoundGroupMap) {
    // The more generalized aggregation as aggregating over tuples.
    // The special case is a tuple defined by only one member.
    int unsatisfiableTupleCount = 0;
    for (List<Member> aggregation : aggregationList) {
        if (!(aggregation.size() > 0 && (aggregation.get(0) instanceof RolapCubeMember || aggregation.get(0) instanceof VisualTotalsFunDef.VisualTotalMember))) {
            ++unsatisfiableTupleCount;
            continue;
        }
        BitKey bitKey = BitKey.Factory.makeBitKey(starColumnCount);
        RolapCubeMember[] tuple;
        tuple = new RolapCubeMember[aggregation.size()];
        int i = 0;
        for (Member member : aggregation) {
            if (member instanceof VisualTotalsFunDef.VisualTotalMember) {
                tuple[i] = (RolapCubeMember) ((VisualTotalsFunDef.VisualTotalMember) member).getMember();
            } else {
                tuple[i] = (RolapCubeMember) member;
            }
            i++;
        }
        boolean tupleUnsatisfiable = false;
        for (RolapCubeMember member : tuple) {
            // Tuple cannot be constrained if any of the member cannot be.
            tupleUnsatisfiable = makeCompoundGroupForMember(member, baseCube, bitKey);
            if (tupleUnsatisfiable) {
                // If this tuple is unsatisfiable, skip it and try to
                // constrain the next tuple.
                unsatisfiableTupleCount++;
                break;
            }
        }
        if (!tupleUnsatisfiable && !bitKey.isEmpty()) {
            // Found tuple(columns) to constrain,
            // now add it to the compoundGroupMap
            addTupleToCompoundGroupMap(tuple, bitKey, compoundGroupMap);
        }
    }
    return (unsatisfiableTupleCount == aggregationList.size());
}
Also used : Member(mondrian.olap.Member) VisualTotalsFunDef(mondrian.olap.fun.VisualTotalsFunDef)

Example 15 with Member

use of mondrian.olap.Member in project mondrian by pentaho.

the class CompoundPredicateInfo method makeSetPredicate.

private StarPredicate makeSetPredicate(final Exp exp, Evaluator evaluator) {
    TupleIterable evaluatedSet = evaluator.getSetEvaluator(exp, true).evaluateTupleIterable();
    ArrayList<StarPredicate> orList = new ArrayList<StarPredicate>();
    OrPredicate orPredicate = null;
    for (List<Member> complexSetItem : evaluatedSet) {
        List<StarPredicate> andList = new ArrayList<StarPredicate>();
        for (Member singleSetItem : complexSetItem) {
            final List<List<Member>> singleItemList = Collections.singletonList(Collections.singletonList(singleSetItem));
            StarPredicate singlePredicate = predicateFromTupleList(singleItemList, measure, evaluator).getValue();
            andList.add(singlePredicate);
        }
        AndPredicate andPredicate = new AndPredicate(andList);
        orList.add(andPredicate);
        orPredicate = new OrPredicate(orList);
    }
    return orPredicate;
}
Also used : TupleIterable(mondrian.calc.TupleIterable) OrPredicate(mondrian.rolap.agg.OrPredicate) ArrayList(java.util.ArrayList) AndPredicate(mondrian.rolap.agg.AndPredicate) ArrayList(java.util.ArrayList) List(java.util.List) Member(mondrian.olap.Member)

Aggregations

Member (mondrian.olap.Member)60 ArrayList (java.util.ArrayList)20 TestMember (mondrian.olap.fun.TestMember)20 List (java.util.List)15 LimitedRollupMember (mondrian.rolap.RolapHierarchy.LimitedRollupMember)13 Evaluator (mondrian.olap.Evaluator)11 MultiCardinalityDefaultMember (mondrian.rolap.RestrictedMemberReader.MultiCardinalityDefaultMember)11 SetEvaluator (mondrian.olap.Evaluator.SetEvaluator)8 Hierarchy (mondrian.olap.Hierarchy)8 TupleList (mondrian.calc.TupleList)7 Axis (mondrian.olap.Axis)7 Exp (mondrian.olap.Exp)7 Level (mondrian.olap.Level)7 HashMap (java.util.HashMap)6 LinkedHashMap (java.util.LinkedHashMap)6 HashSet (java.util.HashSet)5 UnaryTupleList (mondrian.calc.impl.UnaryTupleList)5 MemberExpr (mondrian.mdx.MemberExpr)5 LinkedHashSet (java.util.LinkedHashSet)4 ResolvedFunCall (mondrian.mdx.ResolvedFunCall)4