use of mondrian.olap.Member in project mondrian by pentaho.
the class SqlConstraintUtils method getSlicerMemberMap.
/**
* Gets a map of MondrianDef.Expression to the set of sliced members
* associated with each expression.
*
* This map is used by addContextConstraint() to get the set of slicer
* members associated with each column in the cell request's constrained
* columns array, {@link CellRequest#getConstrainedColumns}
*/
private static Map<MondrianDef.Expression, Set<RolapMember>> getSlicerMemberMap(Evaluator evaluator) {
Map<MondrianDef.Expression, Set<RolapMember>> mapOfSlicerMembers = new HashMap<MondrianDef.Expression, Set<RolapMember>>();
List<Member> slicerMembers = ((RolapEvaluator) evaluator).getSlicerMembers();
List<Member> expandedSlicers = evaluator.isEvalAxes() ? expandSupportedCalculatedMembers(slicerMembers, evaluator.push()).getMembers() : slicerMembers;
if (hasMultiPositionSlicer(expandedSlicers)) {
for (Member slicerMember : expandedSlicers) {
if (slicerMember.isMeasure()) {
continue;
}
addSlicedMemberToMap(mapOfSlicerMembers, slicerMember);
}
}
return mapOfSlicerMembers;
}
use of mondrian.olap.Member in project mondrian by pentaho.
the class TupleToStrFunDef method compileCall.
public Calc compileCall(ResolvedFunCall call, ExpCompiler compiler) {
if (TypeUtil.couldBeMember(call.getArg(0).getType())) {
final MemberCalc memberCalc = compiler.compileMember(call.getArg(0));
return new AbstractStringCalc(call, new Calc[] { memberCalc }) {
public String evaluateString(Evaluator evaluator) {
final Member member = memberCalc.evaluateMember(evaluator);
if (member.isNull()) {
return "";
}
StringBuilder buf = new StringBuilder();
buf.append(member.getUniqueName());
return buf.toString();
}
};
} else {
final TupleCalc tupleCalc = compiler.compileTuple(call.getArg(0));
return new AbstractStringCalc(call, new Calc[] { tupleCalc }) {
public String evaluateString(Evaluator evaluator) {
final Member[] members = tupleCalc.evaluateTuple(evaluator);
if (members == null) {
return "";
}
StringBuilder buf = new StringBuilder();
SetToStrFunDef.appendTuple(buf, members);
return buf.toString();
}
};
}
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MDXMetaData method createRowHeaders.
protected Object[][] createRowHeaders() {
int rowCount = 0;
int colCount = 0;
Object[][] result = null;
Axis[] axes = nativeResultSet.getAxes();
// Another IndexOOB Fix
if ((axes.length <= MDXMetaData.AXIS_ROW) || (axes[MDXMetaData.AXIS_ROW] == null)) {
return new Object[0][0];
}
List positions = axes[MDXMetaData.AXIS_ROW].getPositions();
if (useExtendedColumnNames) {
if (positions != null && positions.size() > 0) {
rowCount = positions.size();
colCount = ((List) positions.get(0)).size();
}
result = new Object[rowCount][colCount];
for (int r = 0; r < rowCount; r++) {
List members = (List) positions.get(r);
Member member = null;
for (int c = 0; c < colCount; c++) {
member = (Member) members.get(c);
result[r][c] = member.getCaption();
}
}
} else {
if ((positions != null) && (positions.size() > 0)) {
rowCount = positions.size();
colCount = ((List) positions.get(0)).size() + 1;
}
result = new Object[rowCount][colCount];
for (int r = 0; r < rowCount; r++) {
List members = (List) positions.get(r);
Member member = null;
for (int c = 0; c < colCount - 1; c++) {
member = (Member) members.get(c);
result[r][c] = member.getCaption();
}
result[r][colCount - 1] = member.getHierarchy().getCaption();
}
}
return result;
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MDXMetaData method createColumnHeaders.
protected Object[][] createColumnHeaders() {
int rowCount = 0;
int colCount = 0;
Object[][] result = null;
Axis[] axes = nativeResultSet.getAxes();
// Another IndexOOB Fix
if ((axes.length <= MDXMetaData.AXIS_COLUMN) || (axes[MDXMetaData.AXIS_COLUMN] == null)) {
return new Object[0][0];
}
List positions = axes[MDXMetaData.AXIS_COLUMN].getPositions();
if (useExtendedColumnNames) {
if (positions != null && positions.size() > 0) {
rowCount = ((List) positions.get(0)).size();
colCount = positions.size();
}
result = new Object[rowCount][colCount];
for (int c = 0; c < colCount; c++) {
List members = (List) positions.get(c);
Member member = null;
for (int r = 0; r < rowCount; r++) {
member = (Member) members.get(r);
result[r][c] = member.getCaption();
}
}
} else {
if ((positions != null) && (positions.size() > 0)) {
rowCount = ((List) positions.get(0)).size() + 1;
colCount = positions.size();
}
result = new Object[rowCount][colCount];
for (int c = 0; c < colCount; c++) {
List members = (List) positions.get(c);
Member member = null;
for (int r = 0; r < rowCount - 1; r++) {
member = (Member) members.get(r);
result[r][c] = member.getCaption();
}
result[rowCount - 1][c] = member.getHierarchy().getCaption();
}
}
return result;
}
use of mondrian.olap.Member in project pentaho-platform by pentaho.
the class MDXMetaData method createColumnNames.
/**
* Flattens the row headers into column names (where the useful columns have useful names and the unuseful columns
* have unusful names).
*
* @return the row headers in a String array
*/
protected String[] createColumnNames() {
String[] colNames = null;
if (nativeResultSet != null) {
// HACK for BISERVER-2640; need backward compatibility to old format of column
// names, yet with the old format cross joins will have problems (BISERVER-1266).
Axis[] axes = nativeResultSet.getAxes();
// Another IndexOOB Fix
if ((axes.length <= MDXMetaData.AXIS_ROW) || (axes[MDXMetaData.AXIS_ROW] == null)) {
// no rows...
return new String[0];
}
List positions = axes[MDXMetaData.AXIS_ROW].getPositions();
if (useExtendedColumnNames) {
if ((this.rowHeaders.length > 0) && (positions != null) && (positions.size() > 0)) {
colNames = new String[this.rowHeaders[0].length];
// Flatten out the column headers into one column-name
for (int i = 0; i < colNames.length; ++i) {
Member member = (Member) ((List) positions.get(0)).get(i);
colNames[i] = "[" + member.getDimension().getName() + "].[" + member.getHierarchy().getName() + "].[" + member.getLevel().getName() + "]";
}
} else {
colNames = new String[0];
}
} else {
if ((positions != null) && (positions.size() > 0)) {
colNames = new String[getColumnCount()];
// Flatten out the column headers into one column-name
for (int i = 0; i < colNames.length; ++i) {
if (i < ((List) positions.get(0)).size()) {
Member member = (Member) ((List) positions.get(0)).get(i);
Hierarchy hierarchy = member.getHierarchy();
colNames[i] = hierarchy.getCaption();
} else {
colNames[i] = ((Member) ((List) positions.get(0)).get(((List) positions.get(0)).size() - 1)).getHierarchy().getName() + "{" + i + // $NON-NLS-1$ //$NON-NLS-2$
"}";
}
}
} else {
colNames = new String[0];
}
}
}
return colNames;
}
Aggregations