protected void FormatMeasure(MeasureExpression m) { if (m.Filter != null) { this.Builder.Append("\"" + m.Name.TrimStart('[').TrimEnd(']') + "\"" + "," + "CALCULATE(" + m.DbName + ","); this.Visit(m.Filter); this.Builder.Append(")"); } else if (m is LookupExpression) { this.Builder.Append("\"" + m.Name.TrimStart('[').TrimEnd(']') + "\"" + "," + m.DbName); } else if (m is XAggregationExpression) { this.Visit(m as XAggregationExpression); } else if (m.DbName != null) { this.Builder.Append("\"" + m.Name.TrimStart('[').TrimEnd(']') + "\"" + "," + "CALCULATE(" + m.DbName + ")"); } else { this.Builder.Append(m.Name); } }
/// <summary> /// creates method call to get value from measure columns /// </summary> /// <param name="measure">measure expression</param> /// <returns>get value method call expression</returns> protected override Expression VisitMeasure(MeasureExpression measure) { string measureProjectionName = MeasureNameReference(measure.Name); var measureExpressions = new Expression[] { Expression.Constant(measureProjectionName), Expression.Constant(measure.Type) }; return(Expression.Convert(Expression.Call(_row, _getValue, measureExpressions), measure.Type)); }
private void BuildMeasure(MeasureExpression m) { if (string.IsNullOrEmpty(m.TableName)) { FormatMeasure(m); } else { this.Builder.Append("\"" + m.Name.TrimStart('[').TrimEnd(']') + "\"" + ","); this.Builder.Append(m.TableName + m.Name); } }
/// <summary> /// Visitor function for column projection /// </summary> /// <param name="expression">expression to be visited</param> /// <returns>the expression</returns> public override Expression Visit(Expression expression) { if (_candidates.Contains(expression)) { var measureExpression = expression as MeasureExpression; if (measureExpression != null) { MeasureExpression m = measureExpression; ColumnExpression mappedMeasure; if (_map.TryGetValue(m, out mappedMeasure)) { return(mappedMeasure); } _columns.Add(new MeasureDeclaration(m.Name, m.Name, m)); // The mapped measure can only be used as backreference to something known mappedMeasure = new MeasureExpression(m.Type, m.Name, null, m.Name, null); _map[m] = mappedMeasure; return(mappedMeasure); } var column = expression as ColumnExpression; if (column == null) { return(base.Visit(expression)); } ColumnExpression mapped; if (_map.TryGetValue(column, out mapped)) { return(mapped); } _columns.Add(new ColumnDeclaration(column.Name, column.Name, column)); mapped = new ColumnExpression(column.Type, column.Name, column.DbName, column.TableName); _map[column] = mapped; return(mapped); } return(base.Visit(expression)); }
/// <summary> /// Format Measure column /// </summary> /// <param name="column">the measure column expression</param> /// <returns>the original expression</returns> protected Expression VisitMeasureColumn(MeasureExpression column) { this.Builder.Append(column.Name); return(column); }
protected override Expression VisitMeasure(MeasureExpression measure) { return(VisitColumn(measure)); }