public DatasetJsonObj ParseAllData(IDataSetStore store, List<DataCriteria> Criterias, LayoutObj layObj, IDataStructureObject kf, ISet<ICodelistObject> codelists) { if (PageNumber > 0) return ParseAllDataPage(1); string DominantFreq = CalculateDominantFrequency(Criterias, kf, codelists); CurrentPageIndex = 1; int NObservationForPage = WebClientSettings.Instance.NObservationForPage; DatasetJsonObj dataset = new DatasetJsonObj() { series = new Dictionary<string, Dictionary<string, string>>() }; List<string> sort = new List<string>(); sort.AddRange(layObj.axis_y); sort.AddRange(layObj.axis_x); store.SetSort(sort); store.SetCriteria(Criterias); IDataReader datareader = store.CreateDataReader(false); try { int ActualRecordRegistred = 0; PageNumber = 0; JavaScriptSerializer ser = new JavaScriptSerializer(); ser.MaxJsonLength = int.MaxValue; while (datareader.Read()) { List<string> Colonne = new List<string>(); layObj.axis_x.ForEach(axisX => Colonne.Add(GetFromReader(datareader, axisX, DominantFreq, kf.TimeDimension.Id))); List<string> Righe = new List<string>(); layObj.axis_y.ForEach(axisY => Righe.Add(GetFromReader(datareader, axisY, DominantFreq, kf.TimeDimension.Id))); string OBSVal = (string)datareader[kf.PrimaryMeasure.Id]; string serieString = string.Join("+", Righe); if (!dataset.series.ContainsKey(serieString)) { if (ActualRecordRegistred >= NObservationForPage) { //NormalizeDataset(dataset, layObj.axis_x, kf, codelists); FileInfo fi = new FileInfo(Path.Combine(PagingFileDirectory.FullName, string.Format(FilePageFormat, PagingFileDirectory.Name, PageNumber + 1))); File.WriteAllText(fi.FullName, ser.Serialize(dataset)); ActualRecordRegistred = 0; PageNumber++; dataset = null; dataset = new DatasetJsonObj() { series = new Dictionary<string, Dictionary<string, string>>() }; } //dataset.series[serieString] = AllPossibleValues(layObj.axis_x, kf, codelists); dataset.series[serieString] = new Dictionary<string, string>(); } dataset.series[serieString][string.Join("+", Colonne)] = OBSVal; ActualRecordRegistred++; } FileInfo fiLastPage = new FileInfo(Path.Combine(PagingFileDirectory.FullName, string.Format(FilePageFormat, PagingFileDirectory.Name, PageNumber + 1))); File.WriteAllText(fiLastPage.FullName, ser.Serialize(dataset)); PageNumber++; if (PageNumber == 1) return dataset; return ParseAllDataPage(1); } catch (Exception) { throw; } finally { store.Commit(); } }
private void NormalizeDataset(DatasetJsonObj dataset, List<string> dimensions, IDataStructureObject kf, ISet<ICodelistObject> codelists) { if (dataset.series.Count < 2) return; string FirstSerie = dataset.series.Keys.First(); List<string> TemplateRow = AllPossibleValues(dimensions, kf, codelists); Dictionary<string, string> primaRiga = dataset.series[FirstSerie]; dataset.series[FirstSerie] = new Dictionary<string, string>(); TemplateRow.ForEach(t => { if (primaRiga.ContainsKey(t)) dataset.series[FirstSerie][t] = primaRiga[t]; else dataset.series[FirstSerie].Add(t, "null"); }); foreach (var serie in dataset.series) { if (serie.Key == FirstSerie) continue; foreach (string rigaK in serie.Value.Keys) { if (dataset.series[FirstSerie][rigaK] == "null") dataset.series[FirstSerie][rigaK] = "NaN"; } } List<string> Keys = dataset.series[FirstSerie].Keys.ToList(); foreach (string rigaK in Keys) { if (dataset.series[FirstSerie][rigaK] == "null") dataset.series[FirstSerie].Remove(rigaK); } }