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); } } }
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(); } }