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);
     }
 }
Esempio n. 2
0
        /// <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);
     }
 }
Esempio n. 4
0
        /// <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));
 }