protected override void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { lock (syncLock) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToProcessingState)); this.Dispatcher.BeginInvoke(new SimpleCallback(ClearResults)); string freqVar = GadgetOptions.MainVariableName; string weightVar = GadgetOptions.WeightVariableName; string strataVar = string.Empty; bool includeMissing = GadgetOptions.ShouldIncludeMissing; List<string> stratas = new List<string>(); if (!string.IsNullOrEmpty(strataVar)) { stratas.Add(strataVar); } try { RequestUpdateStatusDelegate requestUpdateStatus = new RequestUpdateStatusDelegate(RequestUpdateStatusMessage); CheckForCancellationDelegate checkForCancellation = new CheckForCancellationDelegate(IsCancelled); GadgetOptions.GadgetStatusUpdate += new GadgetStatusUpdateHandler(requestUpdateStatus); GadgetOptions.GadgetCheckForCancellation += new GadgetCheckForCancellationHandler(checkForCancellation); if (this.DataFilters != null && this.DataFilters.Count > 0) { GadgetOptions.CustomFilter = this.DataFilters.GenerateDataFilterString(false); } else { GadgetOptions.CustomFilter = string.Empty; } Dictionary<DataTable, List<DescriptiveStatistics>> stratifiedFrequencyTables = DashboardHelper.GenerateFrequencyTable(GadgetOptions); List<XYChartData> dataList = new List<XYChartData>(); foreach (KeyValuePair<DataTable, List<DescriptiveStatistics>> tableKvp in stratifiedFrequencyTables) { double count = 0; foreach (DescriptiveStatistics ds in tableKvp.Value) { count = count + ds.observations; } string strataValue = tableKvp.Key.TableName; DataTable table = tableKvp.Key; double max = 0; foreach (DataRow row in table.Rows) { XYChartData chartData = new XYChartData(); chartData.X = row[0].ToString(); chartData.Y = (double)row[1]; //chartData.Z = row[0]; //GetConfLimit(ref chartData, count); dataList.Add(chartData); max = max + (double)row[1]; } //foreach (DataRow row in table.Rows) //{ // max = max + (double)row[1]; //} double runningPercent = 0; foreach (DataRow row in table.Rows) { foreach (XYChartData chartData in dataList) { if (chartData.X.ToString() == row[0].ToString()) { chartData.Z = ((chartData.Y / max) * 100) + runningPercent; runningPercent = (double)chartData.Z; } } } } this.Dispatcher.BeginInvoke(new SetChartDataDelegate(SetChartData), dataList); this.Dispatcher.BeginInvoke(new SimpleCallback(RenderFinish)); } catch (Exception ex) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), ex.Message); } finally { stopwatch.Stop(); Debug.Print("Column chart gadget took " + stopwatch.Elapsed.ToString() + " seconds to complete."); Debug.Print(DashboardHelper.DataFilters.GenerateDataFilterString()); } } }
protected override void worker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { lock (syncLock) { Stopwatch stopwatch = new Stopwatch(); stopwatch.Start(); this.Dispatcher.BeginInvoke(new SimpleCallback(SetGadgetToProcessingState)); this.Dispatcher.BeginInvoke(new SimpleCallback(ClearResults)); string freqVar = GadgetOptions.MainVariableName; string crosstabVar = GadgetOptions.CrosstabVariableName; string weightVar = GadgetOptions.WeightVariableName; string strataVar = string.Empty; bool includeMissing = GadgetOptions.ShouldIncludeMissing; List<string> stratas = new List<string>(); if (!string.IsNullOrEmpty(strataVar)) { stratas.Add(strataVar); } try { RequestUpdateStatusDelegate requestUpdateStatus = new RequestUpdateStatusDelegate(RequestUpdateStatusMessage); CheckForCancellationDelegate checkForCancellation = new CheckForCancellationDelegate(IsCancelled); GadgetOptions.GadgetStatusUpdate += new GadgetStatusUpdateHandler(requestUpdateStatus); GadgetOptions.GadgetCheckForCancellation += new GadgetCheckForCancellationHandler(checkForCancellation); if (this.DataFilters != null && this.DataFilters.Count > 0) { GadgetOptions.CustomFilter = this.DataFilters.GenerateDataFilterString(false); } else { GadgetOptions.CustomFilter = string.Empty; } DataView dv = DashboardHelper.GenerateView(GadgetOptions); List<XYChartData> dataList = new List<XYChartData>(); NumericDataValue minValue = null; NumericDataValue maxValue = null; foreach (DataRowView drv in dv) { DataRow row = drv.Row; if (row[freqVar] != DBNull.Value && row[freqVar] != null && row[crosstabVar] != DBNull.Value && row[crosstabVar] != null) { XYChartData chartData = new XYChartData(); chartData.X = Convert.ToDouble(row[freqVar]); chartData.Y = Convert.ToDouble(row[crosstabVar]); dataList.Add(chartData); NumericDataValue currentValue = new NumericDataValue() { DependentValue = Convert.ToDecimal(row[crosstabVar]), IndependentValue = Convert.ToDecimal(row[freqVar]) }; if (minValue == null) { minValue = currentValue; } else { if (currentValue.IndependentValue < minValue.IndependentValue) { minValue = currentValue; } } if (maxValue == null) { maxValue = currentValue; } else { if (currentValue.IndependentValue > maxValue.IndependentValue) { maxValue = currentValue; } } } } StatisticsRepository.LinearRegression linearRegression = new StatisticsRepository.LinearRegression(); Dictionary<string, string> inputVariableList = new Dictionary<string, string>(); inputVariableList.Add(crosstabVar, "dependvar"); inputVariableList.Add("intercept", "true"); inputVariableList.Add("includemissing", "false"); inputVariableList.Add("p", "0.95"); inputVariableList.Add(freqVar, "unsorted"); StatisticsRepository.LinearRegression.LinearRegressionResults regresResults = linearRegression.LinearRegression(inputVariableList, dv.Table); this.Dispatcher.BeginInvoke(new SetChartDataDelegate(SetChartData), dataList, regresResults, maxValue, minValue); this.Dispatcher.BeginInvoke(new SimpleCallback(RenderFinish)); } catch (Exception ex) { this.Dispatcher.BeginInvoke(new RenderFinishWithErrorDelegate(RenderFinishWithError), ex.Message); } finally { stopwatch.Stop(); Debug.Print("Column chart gadget took " + stopwatch.Elapsed.ToString() + " seconds to complete."); Debug.Print(DashboardHelper.DataFilters.GenerateDataFilterString()); } } }