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);
}
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);
}
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));
}
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());
}
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;
}
Aggregations