예제 #1
0
        public static string BuildQuery(ADOTabular.Interfaces.IModelCapabilities modelCaps, ICollection <QueryBuilderColumn> columns, ICollection <QueryBuilderFilter> filters, ICollection <QueryBuilderColumn> orderBy)
        {
            var measureDefines = BuildMeasureDefines(columns);

            // using filter variables will not work against older data sources...
            //var filterDefines = BuildFilterDefines(filters);

            var columnList   = BuildColumns(columns);
            var filterList   = BuildFilters(modelCaps, filters);
            var measureList  = BuildMeasures(columns);
            var orderByList  = BuildOrderBy(orderBy);
            var filterStart  = filters.Count > 0 ? ",\n    " : string.Empty;
            var measureStart = !string.IsNullOrWhiteSpace(measureList)
                ? columns.Any(c => c.ObjectType == ADOTabularObjectType.Column)
                ? ",\n    "
                : "\n    "
                : string.Empty;


            if (columnList.Length == 0)
            {
                return(BuildQueryWithOnlyMeasures(measureDefines, filterList, measureList, filterStart, measureStart, orderByList));
            }
            return(BuildQueryWithColumns(measureDefines, columnList, filterList, measureList, filterStart, measureStart, orderByList));
        }
예제 #2
0
        private static string BuildFilters(ADOTabular.Interfaces.IModelCapabilities modelCaps, ICollection <QueryBuilderFilter> filters)
        {
            //DEFINE VAR __DS0FilterTable =
            //FILTER(
            //  KEEPFILTERS(VALUES('DimCustomer'[EnglishEducation])),
            //  'DimCustomer'[EnglishEducation] = "Bachelors"
            //)

            Func <QueryBuilderFilter, string> filterExpressionFunc = FilterExpressionBasic;

            if (modelCaps.DAXFunctions.TreatAs)
            {
                filterExpressionFunc = FilterExpressionTreatAs;
            }

            if (filters.Count == 0)
            {
                return(string.Empty);
            }
            return((string)filters.Select(f => filterExpressionFunc(f)).Aggregate((i, j) => i + ",\n    " + j));
        }