Esempio n. 1
0
        /// <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("当前不支持钻入.");
            }
        }
Esempio n. 2
0
 /// <summary>
 /// 添加需要进行摘要计算的报表列
 /// </summary>
 /// <param name="pColumn">报表列</param>
 public void Add(AnalysisColumn pColumn)
 {
     if (pColumn != null)
     {
         this.Add(pColumn.ColumnID);
     }
 }
Esempio n. 3
0
 /// <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);
 }
Esempio n. 5
0
 /// <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);
 }
Esempio n. 6
0
 /// <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));
 }
Esempio n. 7
0
 /// <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));
 }