コード例 #1
0
        public void Write(IEnumerable <IRow> rows)
        {
            if (!_output.Entity.NeedsUpdate())
            {
                return;
            }

            var ids = new SSASIdentifiers(_input, _output);

            using (var server = new Server()) {
                server.Connect($"Data Source={_output.Connection.Server};Catalog=;");

                if (server.Databases.Contains(ids.DatabaseId))
                {
                    var database = server.Databases.Find(ids.DatabaseId);
                    if (_output.Process.Mode == "init")
                    {
                        _output.Info($"Processing OLAP database {ids.DatabaseId}");
                        SSAS.Process(database, ProcessType.ProcessFull, _output);
                    }
                    else
                    {
                        if (database.Dimensions.Contains(_output.Entity.Alias))
                        {
                            _output.Info($"Updating dimension {_output.Entity.Alias}");
                            var dimension = database.Dimensions.Find(_output.Entity.Alias);
                            SSAS.Process(dimension, ProcessType.ProcessUpdate, _output);
                        }
                        else
                        {
                            _output.Error($"{_output.Entity.Alias} dimension does not exist!");
                        }
                        if (database.Cubes.Contains(ids.CubeId))
                        {
                            var cube = database.Cubes.Find(ids.CubeId);
                            ProcessPartition(cube, ids.NormalMeasureGroupId);
                            ProcessPartition(cube, ids.DistinctMeasureGroupId);
                        }
                        else
                        {
                            _output.Error($"{ids.CubeId} cube does not exist!");
                        }
                    }
                }
                else
                {
                    _output.Error($"{ids.DatabaseId} OLAP database does not exist!");
                }
                server.Disconnect();
            }
        }
コード例 #2
0
 public void ProcessPartition(Cube cube, string partitionId)
 {
     if (cube.MeasureGroups.Contains(partitionId))
     {
         var measureGroup = cube.MeasureGroups.Find(partitionId);
         if (measureGroup.Partitions.Contains(partitionId))
         {
             var partition = measureGroup.Partitions.Find(partitionId);
             _output.Info($"Updating partition {partitionId}");
             if (SSAS.Process(partition, ProcessType.ProcessData, _output))
             {
                 SSAS.Process(partition, ProcessType.ProcessIndexes, _output);
             }
         }
         else
         {
             _output.Error($"{partitionId} partition does not exist!");
         }
     }
     else
     {
         _output.Error($"{partitionId} measure group does not exist!");
     }
 }