Ejemplo n.º 1
0
        public static Solution PrepareSolution()
        {
            Solution solution = new Solution("SSAS_OLAP", "SSAS 测试");
            CubeEntity salesCube = new CubeEntity("SalesCube", "Sales");
            salesCube.TableName = "SaleHistory";
            solution.Cubes.Add(salesCube);

            var customerDim = new DimensionEntity("CustomerDim", "Customer") { FKColumn = "CustomerId" };
            customerDim.Levels.Add(new LevelEntity("customerlevel", "Customer") { SourceTable = "Customer", KeyColumn = "Id", NameColumn = "Name" });
            salesCube.Dimensions.Add(customerDim);

            var ProductDim = new DimensionEntity("ProductDim", "Product") { FKColumn = "ProductId" };
            ProductDim.Levels.Add(new LevelEntity("Productlevel", "Product") { SourceTable = "Product", KeyColumn = "Id", NameColumn = "Name" });
            salesCube.Dimensions.Add(ProductDim);

            //var DateDim = new SSASDim("DateDim");
            //DateDim.Levels = new List<ILevel>();
            //DateDim.Levels.Add(new Level("Datelevel", "Datelevel") { SourceTable = "" });
            //solution.Dims.Add(DateDim);

            salesCube.Measures.Add(new MeasureEntity("ProductCount", "ProductCount") { ColumnName = "ProductCount", Aggregator = Aggregator.Sum });
            salesCube.Measures.Add(new MeasureEntity("UnitPrice", "UnitPrice") { ColumnName = "UnitPrice", Aggregator = Aggregator.Sum });

            return solution;
        }
Ejemplo n.º 2
0
 public void DeleteSolution(Entity.Solution solution)
 {
     if (File.Exists(SchemaPath))
     {
         File.Delete(SchemaPath);
     }
 }
Ejemplo n.º 3
0
        public void CreateSolution(Entity.Solution solution)
        {
            this.BackUpSchemaFile();

            Schema schema = new Schema(solution.ID)
            {
                Description = solution.Name
            };


            foreach (var outerCube in solution.Cubes)
            {
                var mCube = new Cube(outerCube.ID);
                mCube.Caption = mCube.Description = outerCube.Name;
                mCube.Table   = new Table(outerCube.TableName);
                //维度
                foreach (var outerDimension in outerCube.Dimensions)
                {
                    var mDimension = new Dimension(outerDimension.ID);
                    mDimension.Caption    = mDimension.Description = outerDimension.Name;
                    mDimension.ForeignKey = outerDimension.FKColumn;

                    if (outerDimension.Hierarchies != null && outerDimension.Hierarchies.Count > 1)
                    {
                        //层次
                        foreach (var outerHierarchie in outerDimension.Hierarchies)
                        {
                            var mHierarchie = new Hierarchy(outerHierarchie.ID);
                            mHierarchie.Caption      = mHierarchie.Description = outerHierarchie.Name;
                            mHierarchie.allLevelName = mHierarchie.allMemberCaption = mHierarchie.AllMemberName = "all";
                            mHierarchie.Table        = new Table(outerHierarchie.Levels[0].SourceTable);
                            //粒度
                            foreach (var outerLevel in outerHierarchie.Levels)
                            {
                                var mLevel = new Level(outerLevel.ID);
                                mLevel.Caption       = mLevel.Description = outerLevel.Name;
                                mLevel.LevelType     = LevelType.Regular;
                                mLevel.NameColumn    = outerLevel.KeyColumn;
                                mLevel.Column        = outerLevel.KeyColumn;
                                mLevel.CaptionColumn = outerLevel.NameColumn;
                                //TODO:Mondrian父子维处理

                                if (!string.IsNullOrEmpty(outerLevel.ParentColumn))
                                {
                                    #region Closure

                                    mLevel.Closure = new Closure(outerLevel.SourceTable + "_C");
                                    mLevel.Closure.ParentColumn = outerLevel.ParentColumn;
                                    mLevel.Closure.ChildColumn  = outerLevel.KeyColumn;

                                    mLevel.Closure.Table = new Table(outerLevel.SourceTable + "_C");

                                    #endregion



                                    mLevel.Table = outerLevel.SourceTable;
                                }
                                mHierarchie.Levels.Add(mLevel);
                            }
                            mDimension.Hierarchies.Add(mHierarchie);
                        }
                    }
                    else
                    {
                        //默认层次
                        var mDefaultHierarchie = new Hierarchy("Default");
                        mDefaultHierarchie.Caption      = mDefaultHierarchie.Description = "Default";
                        mDefaultHierarchie.allLevelName = mDefaultHierarchie.allMemberCaption = mDefaultHierarchie.AllMemberName = "all";
                        mDefaultHierarchie.Table        = new Table(outerDimension.Levels[0].SourceTable);
                        //默认粒度
                        foreach (var outerLevel in outerDimension.Levels)
                        {
                            var mLevel = new Level(outerLevel.ID);
                            mLevel.Caption       = mLevel.Description = outerLevel.Name;
                            mLevel.LevelType     = LevelType.Regular;
                            mLevel.NameColumn    = outerLevel.KeyColumn;
                            mLevel.Column        = outerLevel.KeyColumn;
                            mLevel.CaptionColumn = outerLevel.NameColumn;
                            mLevel.Table         = outerLevel.SourceTable;

                            //mLevel.Closure = new Closure("");
                            //mLevel.Closure.
                            mDefaultHierarchie.Levels.Add(mLevel);
                        }
                        mDimension.Hierarchies.Add(mDefaultHierarchie);
                    }
                    mCube.Dimensions.Add(mDimension);
                }

                foreach (var outerMeasure in outerCube.Measures)
                {
                    var mMeasure = new Measure(outerMeasure.ID);
                    mMeasure.Caption    = mMeasure.Description = outerMeasure.Name;
                    mMeasure.Aggregator = this.GetAggregator(outerMeasure.Aggregator);
                    mMeasure.Column     = outerMeasure.ColumnName;
                    //mMeasure.DataType = ColumnType.Numeric;
                    mMeasure.FormatString = FormatString.Standard;
                    mMeasure.Formatter    = "";
                    mMeasure.Visible      = outerMeasure.Visable;

                    mCube.Measures.Add(mMeasure);
                }

                schema.Cubes.Add(mCube);
            }


            schema.Serializer(this.SchemaPath);
        }
Ejemplo n.º 4
0
        public void CreateSolution(Solution solution)
        {
            List<ForeignKeyInfo> foreignKeys = new List<ForeignKeyInfo>();
            List<string> allTableNames = this.GetAllTableNames(solution, out foreignKeys);

            this.Connect();
            Database database = this.CreateDatabase(solution.ID, solution.Name);
            DataSource dataSource = this.CreateDataSource(database, solution.ID, solution.Name);
            DataSourceView dataSourceView = this.CreateDataSourceView(database, solution.ID, solution.Name, allTableNames, foreignKeys);

            foreach (var cube in solution.Cubes)
            {
                foreach (var dim in cube.Dimensions)
                {
                    this.CreateDim(database, dataSourceView, dim);
                }
                this.CreateCube(database, dataSource, dataSourceView, cube);

            }
        }
Ejemplo n.º 5
0
        private List<string> GetAllTableNames(Solution solution, out  List<ForeignKeyInfo> ForeignKeys)
        {
            List<string> tables = new List<string>();
            ForeignKeys = new List<ForeignKeyInfo>();

            if (solution.Cubes == null || solution.Cubes.Count < 1)
            {
                return tables;
            }

            foreach (var cube in solution.Cubes)
            {
                if (!tables.Contains(cube.TableName))
                {
                    tables.Add(cube.TableName);
                }

                if (cube.Dimensions == null || cube.Dimensions.Count < 1)
                    continue;
                foreach (var dim in cube.Dimensions)
                {
                    if (dim.Levels != null && dim.Levels.Count > 0)
                    {
                        foreach (var level in dim.Levels)
                        {
                            if (!tables.Contains(level.SourceTable))
                            {
                                tables.Add(level.SourceTable);
                                ForeignKeys.Add(new ForeignKeyInfo() { ForeignKeyTable = cube.TableName, ForeignKeyColumn = dim.FKColumn, PrimaryKeyTable = level.SourceTable, PrimaryKeyColumn = level.KeyColumn });
                            }
                        }
                    }
                    if (dim.Hierarchies != null && dim.Hierarchies.Count > 0)
                    {
                        foreach (var hierarchy in dim.Hierarchies)
                        {
                            if (hierarchy.Levels != null || hierarchy.Levels.Count > 0)
                            {
                                foreach (var level in hierarchy.Levels)
                                {
                                    if (!tables.Contains(level.SourceTable))
                                    {
                                        tables.Add(level.SourceTable);
                                        ForeignKeys.Add(new ForeignKeyInfo() { ForeignKeyTable = cube.TableName, ForeignKeyColumn = dim.FKColumn, PrimaryKeyTable = level.SourceTable, PrimaryKeyColumn = level.KeyColumn });
                                    }
                                }
                            }
                        }
                    }
                }
            }
            return tables;
        }
Ejemplo n.º 6
0
 public void DeleteSolution(Solution solution)
 {
     this.DeleteDatabase(solution.Name);
 }