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; }
public void DeleteSolution(Entity.Solution solution) { if (File.Exists(SchemaPath)) { File.Delete(SchemaPath); } }
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); }
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); } }
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; }
public void DeleteSolution(Solution solution) { this.DeleteDatabase(solution.Name); }