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