Aracılığıyla paylaş


Programlama ÇYN OLAP temel nesneleri

Karmaşık oluşturmaAnalysis Servicesnesneler, basit ve kolay ancak ayrıntı. dikkat gerektirir.Bu konu OLAP temel nesneleri programlama ayrıntılarını açıklar.Bu konuda aşağıdaki bölümler bulunur:

  • Boyut nesneleri

  • Küp nesneleri

  • MeasureGroup nesneleri

  • Nesneler bölümü

  • Toplama nesneleri

Boyut nesneleri

Yönetmek veya boyut işlemek için programıDimensionnesne.

Oluşturmak, silmek ve bir boyut bulma

Oluşturma birDimensionnesnesi dört adımda gerekir:

  1. Boyut nesne oluşturma ve doldurma temel öznitelikleri.

    Temel öznitelik s, ad, boyut türü, depolama modu, kaynak veri bağlama, öznitelik tüm üye adı ve diğer boyut öznitelik s.

    Bir boyut oluşturmadan önce boyut zaten var olduğunu doğrulayın.Boyut varsa, daha sonra boyut bırakılan yeniden ve.

  2. Boyut tanımlayan öznitelik oluşturun.

    Tek tek şemaya kullanmadan önce eklenmesi her öznitelik olan (CreateDataItem yöntem, örnek kod sonunda Bul) ve ardından öznitelikleri eklenebilir koleksiyon boyutu.

    Anahtar ve adı sütun tüm öznitelikler tanımlanması gerekir.

    Boyut birincil anahtar özellik, bu özellik anahtar boyutu erişimi olduğunu açık hale getirmek için AttributeUsage.Key olarak tanımlanmalıdır.

  3. Kullanıcı boyutu giderek erişecek hiyerarşiler oluşturun.

    Hiyerarşileri oluştururken, düzey düzeni, Düzey alta üstten oluşturulduğu sırada tanımlanır.Sıradüzen düzey koleksiyona eklenen ilk en yüksek düzey.

  4. Sunucu, geçerli boyutun Update yöntem kullanarak güncelleştirin.

Ürün boyutu için aşağıdaki örnek kodu oluştururAdventureWorks örnek veri ambarı.

        static void CreateProductDimension(Database db, string datasourceName)
        {
            // Create the Product dimension
            Dimension dim = db.Dimensions.FindByName("Product");
            if ( dim != null)
               dim.Drop();
            dim = db.Dimensions.Add("Product");
            dim.Type = DimensionType.Products;
            dim.UnknownMember = UnknownMemberBehavior.Hidden;
            dim.AttributeAllMemberName = "All Products";
            dim.Source = new DataSourceViewBinding(datasourceName);
            dim.StorageMode = DimensionStorageMode.Molap;

            #region Create attributes

            DimensionAttribute attr;

            attr = dim.Attributes.Add("Product Name");
            attr.Usage = AttributeUsage.Key;
            attr.Type = AttributeType.Product;
            attr.OrderBy = OrderBy.Name;
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProduct", "ProductKey"));
            attr.NameColumn = CreateDataItem(db.DataSourceViews[0], "DimProduct", "EnglishProductName");

            attr = dim.Attributes.Add("Product Line");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProduct", "ProductLine"));
            attr.NameColumn = CreateDataItem(db.DataSourceViews[0], "DimProduct", "ProductLineName");

            attr = dim.Attributes.Add("Model Name");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProduct", "ModelName"));
            attr.AttributeRelationships.Add(new AttributeRelationship("Product Line"));
            attr.AttributeRelationships.Add(new AttributeRelationship("Subcategory"));

            attr = dim.Attributes.Add("Subcategory");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProductSubcategory", "ProductSubcategoryKey"));
            attr.KeyColumns[0].NullProcessing = NullProcessing.UnknownMember;
            attr.NameColumn = CreateDataItem(db.DataSourceViews[0], "DimProductSubcategory", "EnglishProductSubcategoryName");
            attr.AttributeRelationships.Add(new AttributeRelationship("Category"));

            attr = dim.Attributes.Add("Category");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProductCategory", "ProductCategoryKey"));
            attr.NameColumn = CreateDataItem(db.DataSourceViews[0], "DimProductCategory", "EnglishProductCategoryName");

            attr = dim.Attributes.Add("List Price");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProduct", "ListPrice"));
            attr.AttributeHierarchyEnabled = false;

            attr = dim.Attributes.Add("Size");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProduct", "Size"));
            attr.AttributeHierarchyEnabled = false;

            attr = dim.Attributes.Add("Weight");
            attr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "DimProduct", "Weight"));
            attr.AttributeHierarchyEnabled = false;

            #endregion

            #region Create hierarchies

            Hierarchy hier;

            hier = dim.Hierarchies.Add("Product Model Categories");
            hier.AllMemberName = "All Products";
            hier.Levels.Add("Category").SourceAttributeID = "Category";
            hier.Levels.Add("Subcategory").SourceAttributeID = "Subcategory";
            hier.Levels.Add("Model Name").SourceAttributeID = "Model Name";

            hier = dim.Hierarchies.Add("Product Categories");
            hier.AllMemberName = "All Products";
            hier.Levels.Add("Category").SourceAttributeID = "Category";
            hier.Levels.Add("Subcategory").SourceAttributeID = "Subcategory";
            hier.Levels.Add("Model Name").SourceAttributeID = "Product Name";

            hier = dim.Hierarchies.Add("Product Model Lines");
            hier.AllMemberName = "All Products";
            hier.Levels.Add("Subcategory").SourceAttributeID = "Product Line";
            hier.Levels.Add("Model Name").SourceAttributeID = "Model Name";

            #endregion

            dim.Update();
        }

        static DataItem CreateDataItem(DataSourceView dsv, string tableName, string columnName)
        {
            DataTable dataTable = ((DataSourceView)dsv).Schema.Tables[tableName];
            DataColumn dataColumn = dataTable.Columns[columnName];
            return new DataItem(tableName, columnName,
                OleDbTypeConverter.GetRestrictedOleDbType(dataColumn.DataType));
        }

Bir boyut işleme

Boyut işlem işleme yöntem kullanmak kadar basitDimensionnesne.

Bir boyut işleme boyutu kullanan tüm küplerin etkileyebilir.İşlem seçenekleri hakkında daha fazla bilgi için bkz:Objects (XMLA) işleniyorveAnalysis Services nesneleri işleniyor.

Aşağıdaki kod, sağlanan bir veritabanının tüm boyutları, artımlı güncelleştirme yapar:

        static void UpdateAllDimensions(Database db)
        {
            foreach (Dimension dim in db.Dimensions)
                dim.Process(ProcessType.ProcessUpdate);
        }

Küp nesneleri

Yönetmek veya küp işlemek için programıCubenesne.

Oluşturmak, silmek ve bir küp bulma

Küp yönetme boyutları yönetmeye benzer.Oluşturma birCubenesnesi dört adımda gerekir:

  1. Küp nesne oluşturma ve doldurma temel öznitelikleri.

    Temel öznitelikleri, adı, depolama modu, kaynak veri bağlama, varsayılan ölçü birimi ve diğer küp özellikleri görüntülenir.

    Bir küpü oluşturmadan önce küp yok doğrulamanız gerekir.Örnek küp varsa küp bıraktı ve daha sonra yeniden.

  2. Küp, Boyutlar ekleyin.

    Boyutları veritabanından geçerli küp boyutları koleksiyonuna eklenir; küp boyutları başvuru veritabanı boyutu koleksiyon.Her boyut eşlenmesi gereken küp ayrı ayrı.Örnekte sağlayan boyutları eşleştirilir: veritabanı boyutu iç kimliği, küp, boyut için bir ad ve bir küpü. adlı boyutun kimliği

    Örnek kodda dikkat edin "tarih" boyut farklı küp boyutu adı kullanılarak eklenen her üç defa eklenir: Tarih, sevk tarihi, teslim tarihi. Bu boyutlara “ rolü oynama ” boyutları denir.Aynı (tarih), ancak içinde temel boyutudur olgu tablosu boyut farklı “ rollerini ” (sipariş tarihi, sevk tarihi, teslim tarihi) kullanılan - Bkz: "rol çalma" boyutlarını nasıl tanımlandığına anlamak için bu belgenin devamındaki "oluşturma, silmek ve bir MeasureGroup bulma".

  3. Küp verileri bulmak için kullanıcı erişecek olan ölçü gruplarını oluşturun.

    Ölçü grubu oluşturma "bırakarak ve bir MeasureGroup bulma oluşturma," Bu belgede daha sonra açıklanması.Örnek sarar ölçü grubu oluşturma, her ölçü grubu için farklı yöntemler.

  4. Sunucu, geçerli küp'ın Update yöntem kullanarak güncelleştirin.

    Güncelleştirme yöntem ExpandFull güncelleştirme seçeneği, tüm nesnelerin tam sunucu güncelleştirildiğinden emin olmak için kullanılır.

Aşağıdaki kod örneği, Adventure Works küp parçalarını oluşturur.Kod örneği, tüm boyutları veya AdventureWorks Analysis Services Project örnekte bulunan ölçü gruplar oluşturmaz.Örnekleri, yükleme hakkında daha fazla bilgi için bkz:AdventureWorks Sample Databases.

        static void CreateAdventureWorksCube(Database db, string datasourceName)
        {
            // Create the Adventure Works cube
            Cube cube = db.Cubes.FindByName("Adventure Works");
            if ( cube != null)
               cube.Drop();
            db.Cubes.Add("Adventure Works");
            cube.DefaultMeasure = "[Reseller Sales Amount]";
            cube.Source = new DataSourceViewBinding(datasourceName);
            cube.StorageMode = StorageMode.Molap;

            #region Create cube dimensions

            Dimension dim;

            dim = db.Dimensions.GetByName("Date");
            cube.Dimensions.Add(dim.ID, "Date", "Order Date Key - Dim Time");
            cube.Dimensions.Add(dim.ID, "Ship Date",
                "Ship Date Key - Dim Time");
            cube.Dimensions.Add(dim.ID, "Delivery Date",
                "Delivery Date Key - Dim Time");

            dim = db.Dimensions.GetByName("Customer");
            cube.Dimensions.Add(dim.ID);

            dim = db.Dimensions.GetByName("Reseller");
            cube.Dimensions.Add(dim.ID);
            #endregion

            #region Create measure groups

            CreateSalesReasonsMeasureGroup(cube);
            CreateInternetSalesMeasureGroup(cube);
            CreateResellerSalesMeasureGroup(cube);
            CreateCustomersMeasureGroup(cube);
            CreateCurrencyRatesMeasureGroup(cube);

            #endregion

            cube.Update(UpdateOptions.ExpandFull);
        }

Bir küp işleme

Küp işlem işleme yöntem kullanmak kadar basitCubenesne.Küpün işlenmesi de işler tüm ölçü grubu s küpteki ve tüm bölümlerinde ölçü grubu.Bir küpteki bölümleri işlenmesi yalnızca nesneleri; yalnızca bölüm kapsayıcı işleme amacıyla, ölçü birimi gruplardır.Belirtilen tür küp işleminin bölümleri için yayar.küp ve ölçü grubu dahili işleme, bölüm boyutlarını ve işleme giderilmiştir.

İşlem seçenekleri hakkında daha fazla bilgi için bkz:Objects (XMLA) işleniyor, veAnalysis Services nesneleri işleniyor.

Aşağıdaki kod, belirtilen bir veritabanındaki tüm küplerin üzerinde tam bir işlem yapacağını:

   foreach (Cube cube in db.Cubes)
                cube.Process(ProcessType.ProcessFull);
        }

MeasureGroup nesneleri

Yönetmek veya ölçü grubu işlemek için programıMeasureGroupnesne.

Oluşturmak, silmek ve bir MeasureGroup bulma

Ölçü grupları yönetme, boyutlar ve küpler yönetmeye benzer.Oluşturma birMeasureGroupnesnesi aşağıdaki adımlarda gerekir:

  1. ölçü grubu nesnesi oluşturma ve doldurma temel öznitelikleri.

    Temel öznitelikler ad, depolama modu, işlem modu, varsayılan ölçü birimi ve diğer ölçü grubu öznitelikleri içerir.

    Bir ölçü grubu oluşturmadan önce Ölçüm grubu yok doğrulayın.Ölçü birimi Grup bıraktı ve yeniden ölçü grubu varsa, örnek kod, izler.

  2. Ölçüleri ölçü grubu oluşturun.Oluşturulan her ölçüm için aşağıdaki öznitelikleri atanır: toplama işlev, kaynak sütun adı dizesi. biçimlendirme Diğer özellikleri de atanabilir.Aşağıdaki örnek kodda, CreateDataItem yöntem sütun şemaya eklediğini unutmayın.

  3. Boyutları eklemek ölçü grubu.

  4. Boyutları için geçerli ölçü grubu boyutları eklenen koleksiyon üst küp bütçelerden koleksiyon.Boyut bir anahtar sütununu ölçü grubu boyutları toplama dahil olarak olgu tablosu boyutu için ölçüm Grup boyutu ile göz, eşlenebilir.

    Aşağıdaki örnek kod satırları altında Bkz: "boyutu ve anahtar sütun eşleme olgu tablosu".Rol çalma boyutları farklı adlar altında aynı boyut için farklı karakter tuşları bağlayarak uygulanır.Boyutlar (tarih, sevk tarihi, teslim tarihi) oynatma rolünü her biri için farklı bir yedek anahtar, (OrderDateKey, ShipDateKey, DueDateKey) bağlıdır.Tüm anahtarlar FactInternetSales olgu tablosundan alır.

  5. Tasarlanmış bölümlerini eklemek ölçü grubu.

    Aşağıdaki örnek kodda, yöntem bölüm oluşturma paketlenir.

  6. Sunucu, geçerli ölçü grubunun Update yöntem kullanarak güncelleştirin.

    Aşağıdaki örnek kodda, tüm ölçü gruplar ne zaman güncelleştirileceğini küp güncelleştirilir.

Aşağıdaki örnek kodu AdventureWorks Analysis Services Project Örnek InternetSales ölçü grubu oluşturur.Örnekleri, yükleme hakkında daha fazla bilgi için bkz:AdventureWorks Sample Databases.

        static void CreateInternetSalesMeasureGroup(Cube cube)
        {
            // Create the Internet Sales measure group
            Database db = cube.Parent;
            MeasureGroup mg = cube.MeasureGroups.FindByName("Internet Sales");
            if ( mg != null)
               mg.Drop();
            mg = cube.MeasureGroups.Add("Internet Sales");
            mg.StorageMode = StorageMode.Molap;
            mg.ProcessingMode = ProcessingMode.LazyAggregations;
            mg.Type = MeasureGroupType.Sales;

            #region Create measures

            Measure meas;

            meas = mg.Measures.Add("Internet Sales Amount");
            meas.AggregateFunction = AggregationFunction.Sum;
            meas.FormatString = "Currency";
            meas.Source = CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "SalesAmount");

            meas = mg.Measures.Add("Internet Order Quantity");
            meas.AggregateFunction = AggregationFunction.Sum;
            meas.FormatString = "#,#";
            meas.Source = CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "OrderQuantity");

            meas = mg.Measures.Add("Internet Unit Price");
            meas.AggregateFunction = AggregationFunction.Sum;
            meas.FormatString = "Currency";
            meas.Visible = false;
            meas.Source = CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "UnitPrice");

            meas = mg.Measures.Add("Internet Total Product Cost");
            meas.AggregateFunction = AggregationFunction.Sum;
            //meas.MeasureExpression = "[Internet Total Product Cost] * [Average Rate]";
            meas.FormatString = "Currency";
            meas.Source = CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "TotalProductCost");

            meas = mg.Measures.Add("Internet Order Count");
            meas.AggregateFunction = AggregationFunction.Count;
            meas.FormatString = "#,#";
            meas.Source = CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "ProductKey");

            #endregion

            #region Create measure group dimensions

            CubeDimension cubeDim;
            RegularMeasureGroupDimension regMgDim;
            ManyToManyMeasureGroupDimension mmMgDim;
            MeasureGroupAttribute mgAttr;

            //   Mapping dimension and key column from fact table
            //      > select dimension and add it to the measure group
            cubeDim = cube.Dimensions.GetByName("Date");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);

            //      > add key column from dimension and map it with 
            //        the surrogate key in the fact table
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Date").ID);   // this is dimension key column
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "OrderDateKey"));   // this surrogate key in fact table

            cubeDim = cube.Dimensions.GetByName("Ship Date");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Date").ID);
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "ShipDateKey"));

            cubeDim = cube.Dimensions.GetByName("Delivery Date");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Date").ID);
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "DueDateKey"));

            cubeDim = cube.Dimensions.GetByName("Customer");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Full Name").ID);
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "CustomerKey"));

            cubeDim = cube.Dimensions.GetByName("Product");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Product Name").ID);
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "ProductKey"));

            cubeDim = cube.Dimensions.GetByName("Source Currency");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Currency").ID);
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "CurrencyKey"));

            cubeDim = cube.Dimensions.GetByName("Sales Reason");
            mmMgDim = new ManyToManyMeasureGroupDimension();
            mmMgDim.CubeDimensionID = cubeDim.ID;
            mmMgDim.MeasureGroupID = cube.MeasureGroups.GetByName("Sales Reasons").ID;
            mg.Dimensions.Add(mmMgDim);

            cubeDim = cube.Dimensions.GetByName("Internet Sales Order Details");
            regMgDim = new RegularMeasureGroupDimension(cubeDim.ID);
            mg.Dimensions.Add(regMgDim);
            mgAttr = regMgDim.Attributes.Add(cubeDim.Dimension.Attributes.GetByName("Sales Order Key").ID);
            mgAttr.Type = MeasureGroupAttributeType.Granularity;
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "SalesOrderNumber"));
            mgAttr.KeyColumns.Add(CreateDataItem(db.DataSourceViews[0], "FactInternetSales", "SalesOrderLineNumber"));

            #endregion

            #region Create partitions

            CreateInternetSalesMeasureGroupPartitions( mg)

            #endregion
        }

ölçü grubu işleme

ölçü grubu işlem işleme yöntem kullanmak kadar basitMeasureGroupnesne.İşlem bir ölçü grubu ait tüm bölümleri işleyecek ölçü grubu.İşlem bir ölçü grubu işlem boyutları ve bölümler için dahili olarak çözümlenir.Bkz:İşleme bölümü Bu belgenin.

İşlem seçenekleri hakkında daha fazla bilgi için bkz:Objects (XMLA) işleniyor, veAnalysis Services nesneleri işleniyor.

Aşağıdaki kod, tüm ölçü gruplara verilen bir küp, tam bir işlem yapacaksınız.

        static void FullProcessAllMeasureGroups(Cube cube)
        {
            foreach (MeasureGroup mg in cube.MeasureGroups)
                mg.Process(ProcessType.ProcessFull);
        }

Nesneler bölümü

Yönetmek veya bir bölümünü işlemek için program birPartitionnesne.

Oluşturmak, silmek ve bölümü bulma

Bölüm iki adımda oluşturulan basit nesneleridir.

  1. Bölüm nesnesi oluşturma ve doldurma temel öznitelikleri.

    Temel öznitelikleri, adı, depolama modu, bölüm kaynak, dilim, aynı zamanda diğer ölçü grubu özellikleri görüntülenir.Bölüm kaynak geçerli bölüm için SQL deyim tanımlar.Dilim olduğunu belirten bir başlığın bir MDX ifadesi veya küme bir bölümünü geçerli bölümde bulunan boyutlar ana ölçü grubundan sınırlandırır.MOLAP bölümler için dilimleme otomatik olarak her bölümü işlenir belirlenir.

    Bir bölüm oluşturmadan önce bölüm yok doğrulamanız gerekir.Örnek kodu aşağıdaki gibi bölüm varsa, olarak bıraktı ve daha sonra yeniden.

  2. Sunucu, geçerli bölümü Update yöntem kullanarak güncelleştirin.

    Küpün güncelleştirildiği zaman, aşağıdaki örnek kodda, tüm bölümlerin güncelleştirilir.

Aşağıdaki kod örneği, bölümler 'InternetSales' ölçü grubu oluşturur.

        static void CreateInternetSalesMeasureGroupPartitions(MeasureGroup mg)
        {
            Partition part;
            part = mg.Partitions.FindByName("Internet_Sales_184");
            if ( part != null)
               part.Drop();
            part = mg.Partitions.Add("Internet_Sales_184");
            part.StorageMode = StorageMode.Molap;
            part.Source = new QueryBinding(db.DataSources[0].ID, "SELECT * FROM [dbo].[FactInternetSales] WHERE OrderDateKey <= '184'");
            part.Slice = "[Date].[Calendar Year].&[2001]";
            part.Annotations.Add("LastOrderDateKey", "184");

            part = mg.Partitions.FindByName("Internet_Sales_549");
            if ( part != null)
               part.Drop();
            part = mg.Partitions.Add("Internet_Sales_549");
            part.StorageMode = StorageMode.Molap;
            part.Source = new QueryBinding(db.DataSources[0].ID, "SELECT * FROM [dbo].[FactInternetSales] WHERE OrderDateKey > '184' AND OrderDateKey <= '549'");
            part.Slice = "[Date].[Calendar Year].&[2002]";
            part.Annotations.Add("LastOrderDateKey", "549");

            part = mg.Partitions.FindByName("Internet_Sales_914");
            if ( part != null)
               part.Drop();
            part = mg.Partitions.Add("Internet_Sales_914");
            part.StorageMode = StorageMode.Molap;
            part.Source = new QueryBinding(db.DataSources[0].ID, "SELECT * FROM [dbo].[FactInternetSales] WHERE OrderDateKey > '549' AND OrderDateKey <= '914'");
            part.Slice = "[Date].[Calendar Year].&[2003]";
            part.Annotations.Add("LastOrderDateKey", "914");
        }

Bir bölümü işleniyor

İşleyen bir bölümü işlem yöntem kullanmak kadar basitPartitionnesne.

İşlem seçenekleri hakkında daha fazla bilgi için bkz:Objects (XMLA) işleniyorveAnalysis Services nesneleri işleniyor.

Aşağıdaki kod örneği, belirtilen tüm bölümleri tam bir işlem yaptığı ölçü grubu.

        static void FullProcessAllPartitions(MeasureGroup mg)
        {
            foreach (Partition part in mg.Partitions)
                part.Process(ProcessType.ProcessFull);
        }

Bölümleri birleştirme

Birleştirme işlemi, iki veya daha fazla bölümü bir bölüm olma herhangi bir işlem yapmadan bölümleri anlamına gelir.

Bölümleri birleştirme yöntem olanPartitionnesne.Bu komut, hedef bölüm içinde bir veya daha fazla kaynak bölüm veri birleştirir ve kaynak bölümü siler.

Bölümler birleştirilmiş yalnızca, aşağıdaki tüm ölçütleri karşılıyorsa:

  • Bölüm aynı olan ölçü grubu.

  • Bölüm aynı modunda (MOLAP, HOLAP ve ROLAP) saklanır.

  • Bölüm aynı sunucuda bulunan; aynı sunucuda, uzaktan bölümleri birleştirilir.

Unlike previous versions, in Microsoft SQL Server Analysis Services it is not necessary that all source partitions have identical aggregations design.

Sonuç kümesini hedef bölüm için toplamlar toplamlar birleştirme komutunu çalıştırmadan önce durumu olarak aynı kümesidir.

Aşağıdaki kod örneği, belirtilen tüm bölümlerini birleştirir ölçü grubu.Bölümler ilk bölümünü birleştirilen ölçü grubu.

        static void MergeAllPartitions(MeasureGroup mg)
        {
            if (mg.Partitions.Count > 1)
            {
                Partition[] partArray = new Partition[mg.Partitions.Count - 1];
                for (int i = 1; i < mg.Partitions.Count; i++)
                    partArray[i - 1] = mg.Partitions[i];
                mg.Partitions[0].Merge(partArray);
                //To have last changes in the server reflected in AMO
                mg.Refresh();
            }

Toplama nesneleri

Bir tasarım bir toplama tasarlamak ve uygulamak için bir veya birden çok bölüm, programAggregationnesne.

Oluşturma ve toplamaları siliniyor

Toplamlar kolayca oluşturulmuş ve Grup ölçmek için atanan veya DesignAggregations yöntem kullanarak bölümüAggregationDesignnesne.The AggregationDesign object is a separate object from partition, the AggregationDesign object is contained in the MeasureGroup object.Toplamlar, en fazla belirtilen düzeyde en iyileştirme (0-100) veya depolama (bayt) belirtilen düzeye tasarlanabilir.Birden çok bölüm aynı toplama tasarımı kullanabilirsiniz.

Aşağıdaki kod örneği, bir sağlanan tüm bölümler için toplamlar oluşturur ölçü grubu.Varolan tüm toplamlar bölümlerdeki bırakılır.

        static public String DesignAggregationsOnPartitions(MeasureGroup mg, double optimizationWanted, double maxStorageBytes)
        {
            double optimization = 0;
            double storage = 0;
            long aggCount = 0;
            bool finished = false;
            AggregationDesign ad = null;
            String aggDesignName;
            String AggregationsDesigned = "";
            aggDesignName = mg.AggregationPrefix + "_" + mg.Name;
            ad = mg.AggregationDesigns.Add();
            ad.Name = aggDesignName;
            ad.InitializeDesign();
            while ((!finished) && (optimization < optimizationWanted) && (storage < maxStorageBytes))
            {
                ad.DesignAggregations(out optimization, out storage, out aggCount, out finished);
            }
            ad.FinalizeDesign();
            foreach (Partition part in mg.Partitions)
            {
                part.AggregationDesignID = ad.ID;
                AggregationsDesigned += aggDesignName + " = " + aggCount.ToString() + " aggregations designed\r\n\tOptimization: " + optimization.ToString() + "/" + optimizationWanted.ToString() + "\n\r\tStorage: " + storage.ToString() + "/" + maxStorageBytes.ToString() + " ]\n\r";
             }
             return AggregationsDesigned;
        }