Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
        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);
            }
        }