/// <summary> /// 钻入 /// </summary> /// <param name="pTargetColumn">用户选择钻入的报表列</param> /// <param name="pDrilledDimValue">钻入项(是一个维度项)的值</param> /// <param name="pDrilledDimText">钻入项(是一个维度项)的文本</param> /// <returns>钻入后的表格剖面</returns> public AnalysisReportDrillSection DrillIn(AnalysisColumn pTargetColumn, string pDrilledDimValue, string pDrilledDimText) { if (this.CanDrillIn(pTargetColumn)) { //插入默认钻入的第一个钻取剖面 if (this.IsIncludeFirstSection == false) { AnalysisReportDrilling drilling = new AnalysisReportDrilling(); drilling.To = this.Sections[0]; this.DrillingRoute.Insert(0, drilling); this.IsIncludeFirstSection = true; } //设置当前钻取的值和文本 this.DrillingRoute[this.CurrentIndex].DrilledDimText = pDrilledDimText; this.DrillingRoute[this.CurrentIndex].DrilledDimValue = pDrilledDimValue; //初始化下此钻取的相关信息 AnalysisReportDrilling d = new AnalysisReportDrilling(); d.From = this.Sections[this.CurrentIndex]; d.To = this.Sections[this.CurrentIndex + 1]; this.DrillingRoute.Add(d); // this.CurrentIndex++; return(this.CurrentSection); } else { throw new NotSupportedException("当前不支持钻入."); } }
/// <summary> /// 添加需要进行摘要计算的报表列 /// </summary> /// <param name="pColumn">报表列</param> public void Add(AnalysisColumn pColumn) { if (pColumn != null) { this.Add(pColumn.ColumnID); } }
/// <summary> /// 是否可以钻入 /// </summary> /// <param name="pTargetColumn">用户选择钻入的报表列</param> /// <returns>是否可以钻入</returns> public bool CanDrillIn(AnalysisColumn pTargetColumn) { if (this.Sections != null && this.Sections.Length > 0) { return(this.CurrentIndex < this.Sections.Length - 1); } return(false); }
/// <summary> /// 获取指定列的值 /// <remarks> /// <para>1.如果列是度量列而且进行了行列转换,则返回的值会有多个.</para> /// <para>2.如果列是自定义计算列,则为该列值,但如果该列还未计算,则会为null</para> /// <para>3.如果列是维度列,则会返回维度列的ID和文本,结果数组中的第一个</para> /// <para>4.返回的结果中包含null值项</para> /// </remarks> /// </summary> /// <param name="pRowIndex">行号,以0开始</param> /// <param name="pTargetColumn">指定的列</param> /// <returns>数据项值</returns> public T[] GetData <T>(int pRowIndex, AnalysisColumn pTargetColumn) { if (this.Dataes != null && this.Dataes.Rows.Count > pRowIndex) { if (this.ColumnMappings != null && this.ColumnMappings.ContainsValue(pTargetColumn)) { var q = from m in this.ColumnMappings where m.Value == pTargetColumn select m.Key; var columns = q.ToArray(); if (columns != null && columns.Length > 0) { List <T> results = new List <T>(); var dr = this.Dataes.Rows[pRowIndex]; foreach (var col in columns) { if (dr[col] != DBNull.Value) { var temp = Convert.ChangeType(dr[col], typeof(T)); if (temp == null) { results.Add(default(T)); } else { results.Add((T)temp); } } else { results.Add(default(T)); } } return(results.ToArray()); } } } return(null); }
/// <summary> /// 判断报表列是否需要进行摘要计算 /// </summary> /// <param name="pColumn">报表列</param> /// <returns></returns> public bool IsNeedCalculate(AnalysisColumn pColumn) { if (pColumn == null || string.IsNullOrEmpty(pColumn.ColumnID)) { return(false); } // if (this.NeedCalculationColumnIDs == null || this.NeedCalculationColumnIDs.Count <= 0) { return(false); } else { foreach (var id in this.NeedCalculationColumnIDs) { if (id == pColumn.ColumnID) { return(true); } } } // return(false); }
/// <summary> /// 计算摘要 /// <remarks> /// <para>1.01版本扩展</para> /// </remarks> /// </summary> /// <param name="pColumn">当前进行计算的报表列</param> /// <param name="pGridColumn">当前进行计算的(ExtJS)表格列</param> /// <param name="pDataRetriever">报表数据获取器</param> /// <returns></returns> public string CalculateSummary(AnalysisColumn pColumn, Column pGridColumn, ReportDataRetriever pDataRetriever) { return(this.MagicCalculator(pColumn, pGridColumn, pDataRetriever)); }
/// <summary> /// 计算摘要 /// </summary> /// <param name="pColumn">报表列</param> /// <param name="pDataItems"> /// <remarks> /// <para>列的数据项</para> /// <para>1.如果列是维度列,则对象是为KeyValuePair集合,其中Key为维度数据项的ID,Value为维度数据项的文本</para> /// <para>2.如果是度量列,则对象为度量值</para> /// <para>3.如果是自定义计算列,则对象为计算后的值</para> /// </remarks> /// </param> /// <returns></returns> public string CalculateSummary(AnalysisColumn pColumn, object[] pDataItems) { return(this.Calculator(pColumn, pDataItems)); }