public JsonResult ExportligerReport(string filterDatas, string reportTemplateSetting)
        {
            return(ExecuteFunctionRun(() =>
            {
                ReportTemplateParameter[] FilterDatas = JsonConvert.DeserializeObject <ReportTemplateParameter[]>(filterDatas);
                ReportTemplate ReportTemplate = JsonConvert.DeserializeObject <ReportTemplate>(reportTemplateSetting);
                ReportSource ReportSource = this.Engine.Analyzer.GetReportSourceByCode(ReportTemplate.SourceCode);
                SummaryReportResult SummaryReportResult = QueryTable(ReportSource, 0, 0, ReportTemplate.Columns, FilterDatas);
                Dictionary <string, string> heads = new Dictionary <string, string>();
                foreach (ReportTemplateColumn Column in ReportTemplate.Columns)
                {
                    if (Column.ReportSourceColumnType != ReportSourceColumnType.CustomColumn)
                    {
                        heads.Add(Column.ColumnCode, Column.DisplayName);
                    }
                    //heads.Add(Column.ColumnCode, Column.DisplayName);
                }

                List <Dictionary <string, object> > datas = new List <Dictionary <string, object> >();
                Dictionary <string, object> data = new Dictionary <string, object>();
                for (int i = 0; i < SummaryReportResult.Total; i++)
                {
                    data = new Dictionary <string, object>();
                    foreach (string key in heads.Keys)
                    {
                        data.Add(key, SummaryReportResult.Rows[i][key]);
                    }
                    datas.Add(data);
                }
                var result = new { FileUrl = ExportExcel.ExportExecl(ReportTemplate.DisplayName + "." + ReportTemplate.Code, heads, datas) };
                return Json(result, JsonRequestBehavior.AllowGet);
            }));
        }
 public JsonResult LoadSourceData(string reportSourceSetting, string filterDatas, int page, int pageSize)
 {
     return(ExecuteFunctionRun(() =>
     {
         ReportSource ReportSource = JsonConvert.DeserializeObject <ReportSource>(reportSourceSetting);
         SummaryReportResult SummaryReportResult = QueryTable(ReportSource, page, pageSize);
         return Json(SummaryReportResult, JsonRequestBehavior.AllowGet);
     }));
 }
        public JsonResult LoadSummaryData(string reportTemplateSetting, string childColumns, string filterDatas, int page, int pageSize)
        {
            return(ExecuteFunctionRun(() =>
            {
                ReportTemplate ReportTemplate = JsonConvert.DeserializeObject <ReportTemplate>(reportTemplateSetting);
                ReportSource ReportSource = this.Engine.Analyzer.GetReportSourceByCode(ReportTemplate.SourceCode);
                ReportTemplateParameter[] FilterDatas = JsonConvert.DeserializeObject <ReportTemplateParameter[]>(filterDatas) ?? ReportTemplate.Parameters;
                //合并显示的列
                ReportTemplateColumn[] children = JsonConvert.DeserializeObject <ReportTemplateColumn[]>(childColumns);
                ReportTemplateColumn[] columns = new ReportTemplateColumn[ReportTemplate.Columns.Length + children.Length];
                ReportTemplate.Columns.CopyTo(columns, 0);
                children.CopyTo(columns, ReportTemplate.Columns.Length);

                SummaryReportResult SummaryReportResult = QueryTable(ReportSource, page, pageSize, columns, FilterDatas);
                return Json(SummaryReportResult, JsonRequestBehavior.AllowGet);;
            }));
        }
        /// <summary>
        /// 查询表
        /// </summary>;
        /// <param name="ReportSource"></param>
        /// <param name="TemplateColumns"></param>
        private SummaryReportResult QueryTable(ReportSource ReportSource, int page, int pageSize, ReportTemplateColumn[] TemplateColumns = null, ReportTemplateParameter[] Parameters = null)
        {
            Analytics.AnalyticalQuery Query   = this.Engine.BPAQuery.GetAnalyticalQuery(this.Engine, ReportSource);
            ReportSourceColumn[]      Columns = ReportSource.Columns;

            int dataCount  = Query.QueryTableCount(ReportSource.ExecuteTableName, Parameters);
            int startIndex = 0;
            int endIndex   = dataCount;

            if (pageSize > 0)
            {
                startIndex = ((page - 1) * pageSize + 1) < 1 ? 1 : ((page - 1) * pageSize) + 1;
                endIndex   = page * pageSize >= dataCount ? dataCount : page * pageSize;
            }

            //报表数据
            List <Dictionary <string, object> > ReportDatas = new List <Dictionary <string, object> >();
            //汇总列数据
            Dictionary <string, double> SummaryColumns = new Dictionary <string, double>();
            Dictionary <string, object> ReportData;
            DataTable dataTable = Query.QueryTable(ReportSource.ExecuteTableName, Columns, Parameters, startIndex, endIndex);
            //提取需要被装换的列名
            List <string> convertCodes = new List <string>();

            //批量查询组织
            Unit[] units = this.GetConvertCodesUnits(out convertCodes, TemplateColumns, dataTable.Rows, Columns);
            //填充返回单元格
            foreach (DataRow row in dataTable.Rows)
            {
                ReportData = new Dictionary <string, object>();
                foreach (ReportSourceColumn col in Columns)
                {
                    if (col.ReportSourceColumnType != ReportSourceColumnType.CustomColumn)
                    {
                        //从Units中找到对应的Unit
                        if (convertCodes.Contains(col.ColumnCode))
                        {
                            Unit user = null;
                            foreach (var u in units)
                            {
                                if (u.ObjectID == row[col.ColumnCode].ToString())
                                {
                                    user = u;
                                    break;
                                }
                            }
                            if (user != null && user.Name != null)
                            {
                                row[col.ColumnCode] = user.Name;
                            }
                        }
                        ReportData.Add(col.ColumnCode, row[col.ColumnCode]);
                    }
                    //汇总列结算
                    if (col.ReportSourceColumnType != ReportSourceColumnType.CustomColumn && col.DataType == DataType.Numeric)
                    {
                        double count = 0;
                        if (double.TryParse(row[col.ColumnCode].ToString(), out count))
                        {
                            if (SummaryColumns.ContainsKey(col.ColumnCode))
                            {
                                SummaryColumns[col.ColumnCode] += count;
                            }
                            else
                            {
                                SummaryColumns.Add(col.ColumnCode, count);
                            }
                        }
                    }
                }
                ReportDatas.Add(ReportData);
            }
            SummaryReportResult SummaryReportResult = new SummaryReportResult(ReportDatas, dataCount, SummaryColumns);

            return(SummaryReportResult);
        }