public static int CompareSeries(ResultSerie a, ResultSerie b) { if (a.SplitterCells == null || b.SplitterCells == null) { return(0); } return(ResultCell.CompareCells(a.SplitterCells, b.SplitterCells)); /* a. * * * if (a.Length == 0 || a.Length != b.Length) return 0; * ReportModel model = a[0].Element.Model; * * foreach (ReportElement element in model.Elements.OrderBy(i => i.FinalSortOrder)) * { * ResultCell aCell = a.FirstOrDefault(i => i.Element == element); * ResultCell bCell = b.FirstOrDefault(i => i.Element == element); * if (aCell != null && bCell != null) * { * int result = CompareCell(aCell, bCell); * if (result != 0) return (element.SortOrder.Contains(SortOrderConverter.kAscendantSortKeyword) ? 1 : -1) * result; * } * }*/ //return 0; }
/// <summary> /// Compares 2 ResultSerie objects /// </summary> public static int CompareSeries(ResultSerie a, ResultSerie b) { if (a.SplitterCells == null || b.SplitterCells == null) { return(0); } return(ResultCell.CompareCells(a.SplitterCells, b.SplitterCells)); }
public static int CompareSeries(ResultSerie a, ResultSerie b) { if (a.SplitterCells == null || b.SplitterCells == null) return 0; return ResultCell.CompareCells(a.SplitterCells, b.SplitterCells); /* a. if (a.Length == 0 || a.Length != b.Length) return 0; ReportModel model = a[0].Element.Model; foreach (ReportElement element in model.Elements.OrderBy(i => i.FinalSortOrder)) { ResultCell aCell = a.FirstOrDefault(i => i.Element == element); ResultCell bCell = b.FirstOrDefault(i => i.Element == element); if (aCell != null && bCell != null) { int result = CompareCell(aCell, bCell); if (result != 0) return (element.SortOrder.Contains(SortOrderConverter.kAscendantSortKeyword) ? 1 : -1) * result; } }*/ //return 0; }
private void buildSeries(ReportModel model) { foreach (ResultPage page in model.Pages) { if (Report.Cancel) break; foreach (List<ResultData> datas in page.Datas.Values) { if (Report.Cancel) break; foreach (ResultData data in datas) { if (Report.Cancel) break; ResultCell[] xPrimaryDimensions = GetXSerieCells(AxisType.Primary, data.Row, data.Column, model); int primaryIndex = FindDimension(xPrimaryDimensions, page.PrimaryXDimensions); xPrimaryDimensions = page.PrimaryXDimensions[primaryIndex]; ResultCell[] xSecondaryDimensions = GetXSerieCells(AxisType.Secondary, data.Row, data.Column, model); int secondaryIndex = FindDimension(xSecondaryDimensions, page.SecondaryXDimensions); xSecondaryDimensions = page.SecondaryXDimensions[secondaryIndex]; string primarySplitterValues = Helper.ConcatCellValues(GetSplitterSerieCells(AxisType.Primary, data.Row, data.Column, model), ","); string secondarySplitterValues = Helper.ConcatCellValues(GetSplitterSerieCells(AxisType.Secondary, data.Row, data.Column, model), ","); foreach ( var dataCell in data.Data.Where(i => i.Element.IsSerie)) { var serieElement = dataCell.Element; ResultCell[] xValues = (serieElement.XAxisType == AxisType.Primary ? xPrimaryDimensions : xSecondaryDimensions); string splitterValue = (serieElement.XAxisType == AxisType.Primary ? primarySplitterValues : secondarySplitterValues); ResultSerie serie = page.Series.FirstOrDefault(i => i.Element == serieElement && i.SplitterValues == splitterValue); if (serie == null) { serie = new ResultSerie() { Element = serieElement, SplitterValues = splitterValue }; page.Series.Add(serie); } ResultSerieValue serieValue = serie.Values.FirstOrDefault(i => i.XDimensionValues == xValues); if (serieValue == null) { serieValue = new ResultSerieValue() { XDimensionValues = xValues }; serieValue.Yvalue = new ResultTotalCell() { Element = serieElement, IsSerie = true }; serie.Values.Add(serieValue); } serieValue.Yvalue.Cells.Add(new ResultCell() { Element = serieElement, Value = dataCell.Value, ContextRow = dataCell.ContextRow, ContextCol = dataCell.ContextCol }); } } } } //Calculate the serie values foreach (ResultPage page in model.Pages) { if (Report.Cancel) break; foreach (var serie in page.Series) { foreach (var serieValue in serie.Values) { //Classic calculation serieValue.Yvalue.Calculate(); if (!string.IsNullOrEmpty(serieValue.Yvalue.Element.CellScript)) { //Cell script option serieValue.Yvalue.ProcessContext(); serieValue.Yvalue.ContextTable = page.DataTable; serieValue.Yvalue.ContextPage = page; serieValue.Yvalue.ContextModel = model; executeCellScript(serieValue.Yvalue); } } } } }
private void buildNVD3Series(ResultPage page) { initAxisProperties(page, page.PrimaryXDimensions); //Sort series if necessary, only one serie is used for sorting... if (!page.NVD3IsNumericAxis && !page.NVD3IsDateTimeAxis) { _serieForSort = page.Series.FirstOrDefault(i => i.Element.SerieSortType != SerieSortType.None); if (_serieForSort != null) { if (_serieForSort.Element.SerieSortType == SerieSortType.Y) page.PrimaryXDimensions.Sort(CompareXDimensionsWithSeries); else page.PrimaryXDimensions.Sort(CompareXDimensionsWithAxis); } } initChartXValues(page); page.NVD3XLabelMaxLen = 10; page.NVD3YPrimaryMaxLen = 6; page.NVD3YSecondaryMaxLen = 6; StringBuilder result = new StringBuilder(); if (!page.NVD3IsNumericAxis && !page.NVD3IsDateTimeAxis) { //Build X labels foreach (var key in page.PrimaryXValues.Keys) { if (result.Length != 0) result.Append(","); var xval = page.PrimaryXValues[key].ToString(); result.Append(Helper.QuoteSingle(HttpUtility.JavaScriptStringEncode(xval))); if (xval.Length > page.NVD3XLabelMaxLen) page.NVD3XLabelMaxLen = xval.Length; } page.NVD3XLabels = result.ToString(); } foreach (ResultSerie resultSerie in page.Series) { if (Report.Cancel) break; if (string.IsNullOrEmpty(page.NVD3PrimaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Primary) { page.NVD3PrimaryYAxisFormat = resultSerie.Element.GetNVD3Format(CultureInfo, page.NVD3ChartType); page.NVD3PrimaryYIsDateTime = resultSerie.Element.IsDateTime; } else if (string.IsNullOrEmpty(page.NVD3SecondaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Secondary) { page.NVD3SecondaryYAxisFormat = resultSerie.Element.GetNVD3Format(CultureInfo, page.NVD3ChartType); page.NVD3SecondaryYIsDateTime = resultSerie.Element.IsDateTime; } //Fill Serie result = new StringBuilder(); int index = 0; foreach (var xDimensionKey in page.PrimaryXValues.Keys) { string xValue = (index++).ToString(CultureInfo.InvariantCulture.NumberFormat); //Find the corresponding serie value... ResultSerieValue value = resultSerie.Values.FirstOrDefault(i => i.XDimensionValues == xDimensionKey); object yValue = (value != null ? value.Yvalue.Value : null); if (result.Length != 0) result.Append(","); if (resultSerie.Element.YAxisType == AxisType.Primary && value != null && value.Yvalue.DisplayValue.Length > page.NVD3YPrimaryMaxLen) page.NVD3YPrimaryMaxLen = value.Yvalue.DisplayValue.Length; if (resultSerie.Element.YAxisType == AxisType.Secondary && value != null && value.Yvalue.DisplayValue.Length > page.NVD3YSecondaryMaxLen) page.NVD3YSecondaryMaxLen = value.Yvalue.DisplayValue.Length; if (page.NVD3IsNumericAxis) { Double db = 0; if (value == null) Double.TryParse(page.PrimaryXValues[xDimensionKey].ToString(), out db); else if (value.XDimensionValues[0].DoubleValue != null) db = value.XDimensionValues[0].DoubleValue.Value; xValue = db.ToString(CultureInfo.InvariantCulture.NumberFormat); } else if (page.NVD3IsDateTimeAxis) { DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0); if (value == null) dt = ((DateTime)page.PrimaryXValues[xDimensionKey]); else if (value.XDimensionValues[0].DateTimeValue != null) dt = value.XDimensionValues[0].DateTimeValue.Value; TimeSpan diff = dt.ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0)); xValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds)); } if (yValue is DateTime) { TimeSpan diff = ((DateTime)yValue).ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0)); yValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds)); } else if (yValue is Double) { yValue = ((Double)yValue).ToString(CultureInfo.InvariantCulture.NumberFormat); } result.AppendFormat("{{x:{0},y:{1}}}", xValue, yValue == null ? "0" : yValue); } resultSerie.NVD3SerieValues = result.ToString(); } }
private void buildChartSeries(ResultPage page) { if (page.ChartInitDone) { return; } initAxisProperties(page, page.PrimaryXDimensions); //Sort series if necessary, only one serie is used for sorting... if (!Model.ExecChartIsNumericAxis && !Model.ExecChartIsDateTimeAxis) { _serieForSort = page.Series.FirstOrDefault(i => i.Element.SerieSortType != SerieSortType.None); if (_serieForSort != null) { if (_serieForSort.Element.SerieSortType == SerieSortType.Y) { page.PrimaryXDimensions.Sort(CompareXDimensionsWithSeries); } else { page.PrimaryXDimensions.Sort(CompareXDimensionsWithAxis); } } } initChartXValues(page); page.AxisXLabelMaxLen = 10; page.AxisYPrimaryMaxLen = 6; page.AxisYSecondaryMaxLen = 6; StringBuilder result = new StringBuilder(), navs = new StringBuilder(); // TOCHECK ? if (!Model.ExecChartIsNumericAxis && !Model.ExecChartIsDateTimeAxis) // { //Build X labels foreach (var key in page.PrimaryXValues.Keys) { ResultCell[] dimensions = key as ResultCell[]; if (result.Length != 0) { result.Append(","); } var xval = (dimensions.Length == 1 ? dimensions[0].DisplayValue : page.PrimaryXValues[key].ToString()); result.Append(Helper.QuoteSingle(HttpUtility.JavaScriptStringEncode(xval))); if (xval.Length > page.AxisXLabelMaxLen) { page.AxisXLabelMaxLen = xval.Length; } var navigation = Model.GetNavigation(((ResultCell[])key)[0]); if (!string.IsNullOrEmpty(navigation)) { if (navs.Length != 0) { navs.Append(","); } navs.Append(navigation); } } page.ChartXLabels = result.ToString(); page.ChartNavigations = navs.ToString(); // } foreach (ResultSerie resultSerie in page.Series) { if (Report.Cancel) { break; } if (string.IsNullOrEmpty(Model.ExecD3PrimaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Primary) { Model.ExecD3PrimaryYAxisFormat = resultSerie.Element.GetD3Format(CultureInfo, Model.ExecNVD3ChartType); Model.ExecAxisPrimaryYIsDateTime = resultSerie.Element.IsDateTime; } else if (string.IsNullOrEmpty(Model.ExecD3SecondaryYAxisFormat) && resultSerie.Element.YAxisType == AxisType.Secondary) { Model.ExecD3SecondaryYAxisFormat = resultSerie.Element.GetD3Format(CultureInfo, Model.ExecNVD3ChartType); Model.ExecAxisSecondaryYIsDateTime = resultSerie.Element.IsDateTime; } //Fill Serie StringBuilder chartXResult = new StringBuilder(), chartXDateTimeResult = new StringBuilder(), chartYResult = new StringBuilder(); StringBuilder chartXYResult = new StringBuilder(), chartYDisplayResult = new StringBuilder(); int index = 0; foreach (var xDimensionKey in page.PrimaryXValues.Keys) { string xValue = (index++).ToString(CultureInfo.InvariantCulture.NumberFormat); DateTime xValueDT = DateTime.MinValue; //Find the corresponding serie value... ResultSerieValue value = resultSerie.Values.FirstOrDefault(i => i.XDimensionValues == xDimensionKey); object yValue = (value != null ? value.Yvalue.Value : null); if (resultSerie.Element.YAxisType == AxisType.Primary && value != null && value.Yvalue.DisplayValue.Length > page.AxisYPrimaryMaxLen) { page.AxisYPrimaryMaxLen = value.Yvalue.DisplayValue.Length; } if (resultSerie.Element.YAxisType == AxisType.Secondary && value != null && value.Yvalue.DisplayValue.Length > page.AxisYSecondaryMaxLen) { page.AxisYSecondaryMaxLen = value.Yvalue.DisplayValue.Length; } if (Model.ExecChartIsNumericAxis) { Double db = 0; if (value == null) { Double.TryParse(page.PrimaryXValues[xDimensionKey].ToString(), out db); } else if (value.XDimensionValues[0].DoubleValue != null) { db = value.XDimensionValues[0].DoubleValue.Value; } xValue = db.ToString(CultureInfo.InvariantCulture.NumberFormat); } else if (Model.ExecChartIsDateTimeAxis) { DateTime dt = new DateTime(1970, 1, 1, 0, 0, 0, 0); if (value == null) { dt = ((DateTime)page.PrimaryXValues[xDimensionKey]); } else if (value.XDimensionValues[0].DateTimeValue != null) { dt = value.XDimensionValues[0].DateTimeValue.Value; } xValueDT = dt; TimeSpan diff = dt.ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0)); xValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds)); } if (yValue is DateTime) { TimeSpan diff = ((DateTime)yValue).ToUniversalTime() - (new DateTime(1970, 1, 1, 0, 0, 0, 0)); yValue = string.Format("{0}000", Math.Floor(diff.TotalSeconds)); } else if (yValue is Double) { yValue = ((Double)yValue).ToString(CultureInfo.InvariantCulture.NumberFormat); } if (yValue == null && GetBoolValue(Parameter.NVD3AddNullPointParameter)) { yValue = "0"; } if (yValue != null) { if (chartXYResult.Length != 0) { chartXYResult.Append(","); } chartXYResult.AppendFormat("{{x:{0},y:{1}}}", xValue, yValue); if (chartXResult.Length != 0) { chartXResult.Append(","); } chartXResult.AppendFormat("{0}", xValue); if (Model.ExecChartIsDateTimeAxis) { if (chartXDateTimeResult.Length != 0) { chartXDateTimeResult.Append(","); } chartXDateTimeResult.AppendFormat("\"{0:yyyy-MM-dd HH:mm:ss}\"", xValueDT); } if (chartYResult.Length != 0) { chartYResult.Append(","); } chartYResult.AppendFormat("{0}", yValue); //? if (chartYDisplayResult.Length != 0) chartYDisplayResult.Append(","); //? chartYDisplayResult.AppendFormat("'{0}'", Helper.ToJS(value.Yvalue.DisplayValue)); } } resultSerie.ChartXYSerieValues = chartXYResult.ToString(); resultSerie.ChartXSerieValues = chartXResult.ToString(); resultSerie.ChartXDateTimeSerieValues = chartXDateTimeResult.ToString(); resultSerie.ChartYSerieValues = chartYResult.ToString(); //?resultSerie.ChartYSerieDisplayValues = chartYDisplayResult.ToString(); } page.ChartInitDone = true; }