在运行时使用Dlinq查询为OLAP(RadarCube)创建数据集

时间:2010-03-12 21:27:31

标签: .net c#-3.0

如何使用Linq在运行时创建数据集。然后我想使用OLAP数据集(RadarCube winform c#)在运行时设置维度,事实列。

请建议我实施此方法。

提前感谢。

1 个答案:

答案 0 :(得分:2)

请试试这段代码:

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