создать набор данных, используя запрос Dlinq для OLAP (RadarCube) во время выполнения - PullRequest
1 голос
/ 13 марта 2010

Как создать набор данных во время выполнения, используя Linq. Затем я хочу использовать этот набор данных для OLAP (WinarCform Winform C #), чтобы установить размер, столбец фактов во время выполнения.

, пожалуйста, предложите мне способ реализации этого.

спасибо заранее.

1 Ответ

2 голосов
/ 28 февраля 2017

Пожалуйста, попробуйте этот код:

public object CreateDataSet()
        {
            var dataset = new DataSet();

            dataset.Tables.Add("Categories");
            dataset.Tables[0].Columns.Add("ID", typeof(int));
            dataset.Tables[0].Columns.Add("Categories", typeof(string));
            dataset.Tables[0].Columns.Add("Value", typeof(double));

            dataset.Tables.Add("Orders");
            dataset.Tables[1].Columns.Add("ID", typeof(int));
            dataset.Tables[1].Columns.Add("CategoryID", typeof(int));
            dataset.Tables[1].Columns.Add("DateID", typeof(int));
            dataset.Tables[1].Columns.Add("Price", typeof(double));
            dataset.Tables[1].Columns.Add("Count", typeof(int));

            dataset.Tables[1].PrimaryKey = new[] { dataset.Tables["Orders"].Columns["ID"] };

            dataset.Relations.Add(new DataRelation("r1", dataset.Tables["Categories"].Columns["ID"], dataset.Tables["Orders"].Columns["CategoryID"]));

            dataset.Tables.Add("Dates");
            dataset.Tables[2].Columns.Add("ID", typeof(int));
            dataset.Tables[2].Columns.Add("Dates", typeof(DateTime));

            dataset.Relations.Add(new DataRelation("r2", dataset.Tables["Dates"].Columns["ID"], dataset.Tables["Orders"].Columns["DateID"]));

            var r = new Random(10);
            for (int i = 0; i < 160; i++)
                dataset.Tables[0].Rows.Add(new object[] { i, "Category " + i, r.Next(1, 10) });

            for (int i = 0; i < 256; i++)
                dataset.Tables[2].Rows.Add(new object[] { i, new DateTime(r.Next(2005, 2010), r.Next(1, 12), r.Next(1, 28)) });

            for (int i = 0; i < Int16.MaxValue / 10; i++)
                dataset.Tables[1].Rows.Add(new object[] { i, r.Next(0, 16), r.Next(0, 256), r.NextDouble() * 100, r.Next(10) });

            return dataset;
        }

TOLAPAnalysis Grid;

        protected override void Init()
        {
            Grid = new TOLAPAnalysis();
            var dataset = CreateDataSet();

            // TOLAPCube init 

            var olapcube = new TOLAPCube();
            Grid.Cube = olapcube;

            olapcube.DataSet = dataset;

            TCubeEditor.AutoFillCubeStructure(olapcube, "Orders", new string[] { });

            // correct measures format
            olapcube.Measures.FindByDisplayName("Count").DefaultFormat = "G";
            olapcube.Active = true;

            // TOLAPAnalysis init layout

            Grid.BeginUpdate();

            var h = Grid.Dimensions.FindHierarchyByDisplayName("Dates");
            Grid.PivotingLast(h, TLayoutArea.laColumn);

            h = Grid.Dimensions.FindHierarchyByDisplayName("Categories");
            Grid.PivotingLast(h, TLayoutArea.laRow);

            var m = Grid.Measures.FindByDisplayName("Count");
            m.Visible = true;
            Grid.Pivoting(m, TLayoutArea.laRow);

            m = Grid.Measures.FindByDisplayName("Price");
            m.Visible = true;
            Grid.Pivoting(m, TLayoutArea.laRow);

            Grid.EndUpdate();
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...