private static RowCollection MakeRowCollectionForFromTrendVariable([NotNull] MultiyearTrend trend, [NotNull] string variable)
        {
            string shortendName = variable;

            if (shortendName.Length > 30)
            {
                shortendName = shortendName.Substring(0, 30);
            }

            RowCollection rc = new RowCollection(shortendName, variable);
            //scenarios
            var scenarios = trend.Dict.Keys.Select(x => x.DstScenario.FriendlyName).Distinct().ToList();

            //values
            var years = trend.Dict.Keys.Select(x => x.DstYear).Distinct().OrderBy(x => x).ToList();

            foreach (var year in years)
            {
                if (year == 2017)
                {
                    var rb  = RowBuilder.Start("Year", 2017);
                    var val = trend.Dict[Constants.PresentSlice].GetSliceValueByName(variable);
                    foreach (var scenario in scenarios)
                    {
                        if (scenario == Scenario.Present().FriendlyName)
                        {
                            continue;
                        }

                        rb.Add(scenario, val);
                    }

                    rc.Add(rb);
                }
                else
                {
                    var rb = RowBuilder.Start("Year", year);
                    foreach (var scenario in scenarios)
                    {
                        if (scenario == Scenario.Present().FriendlyName)
                        {
                            continue;
                        }

                        var    slicevalues = trend.Dict.Values.FirstOrDefault(x => x.Slice.DstYear == year && x.Slice.DstScenario.FriendlyName == scenario);
                        object o           = null;
                        if (slicevalues != null)
                        {
                            o = slicevalues.GetSliceValueByName(variable);
                        }

                        rb.Add(scenario, o);
                    }

                    rc.Add(rb);
                }
            }

            return(rc);
        }
        private static List <RowCollection> MakeRowCollectionForFromMultiTrendVariable([NotNull] MultiyearMultiVariableTrend trend,
                                                                                       [NotNull] string variable,
                                                                                       out int categoryCount,
                                                                                       out int yearCount)
        {
            var scenarios  = trend.Dict.Keys.Select(x => x.DstScenario).Distinct().ToList();
            var categories = trend.Dict.Values.SelectMany(x => x.Values).Where(x => x.VariableName == variable).SelectMany(y => y.Values.Keys)
                             .Distinct().ToList();

            categoryCount = categories.Count;
            var years = trend.Dict.Keys.Select(x => x.DstYear).Distinct().OrderBy(x => x).ToList();

            yearCount = years.Count;
            List <RowCollection> rows = new List <RowCollection>();
            var presentSliceValues    = trend.Dict[Constants.PresentSlice];

            foreach (var scenario in scenarios)
            {
                if (scenario == Scenario.Present())
                {
                    continue;
                }

                RowCollection rc = new RowCollection(scenario.ShortName, scenario.Name);
                rows.Add(rc);
                foreach (var year in years)
                {
                    var rb = RowBuilder.Start("Year", year);
                    if (year == 2017)
                    {
                        foreach (var category in categories)
                        {
                            object o = null;
                            if (presentSliceValues != null)
                            {
                                o = presentSliceValues.GetSliceValueByName(variable, category);
                            }

                            rb.Add(category, o);
                        }
                    }
                    else
                    {
                        foreach (var category in categories)
                        {
                            var    slicevalues = trend.Dict.Values.FirstOrDefault(x => x.Slice.DstYear == year && x.Slice.DstScenario == scenario);
                            object o           = null;
                            if (slicevalues != null)
                            {
                                o = slicevalues.GetSliceValueByName(variable, category);
                            }

                            rb.Add(category, o);
                        }
                    }

                    rc.Add(rb);
                }
            }

            return(rows);
        }