Aracılığıyla paylaş


Programlama ÇYN OLAP temel nesneleri

Karmaşık oluşturma Analysis Services nesneleri basit ve kolay anlaşılan ancak gerektirir dikkatini detay.Bu konu, temel olap nesneleri programlama ayrıntılarını açıklar.Bu konuda aşağıdaki bölümler bulunur:

  • Boyut nesneleri

  • Küp nesneleri

  • MeasureGroup nesneleri

  • Bölüm nesneleri

  • Toplama nesneleri

Boyut nesneleri

Yönetmek veya bir boyut işlemek için programını Dimension nesne.

Oluşturma, bırakarak ve bir boyut bulma

Oluşturma bir Dimension nesnesi dört adımda gerçekleştirilebilir:

  1. Boyut nesnesi oluşturma ve temel öznitelikler doldurmak.

    Temel ad, boyut türü, depolama modu, veri kaynağına bağlama, tüm üye adı özniteliği ve diğer boyut özniteliklerini özniteliktir.

    Bir boyut oluşturmadan önce boyut zaten var olmadığını doğrulamanız gerekir.Boyut varsa, daha sonra boyut bırakılan silinmeli ve.

  2. Boyut tanımlama öznitelikleri oluşturun.

    Tek tek şemaya kullanmadan önce eklenecek her özniteliğine sahip (CreateDataItem yöntem örnek kod, sonunda Bul) ve ardından öznitelikleri eklenebilir koleksiyon boyut.

    Anahtar ve ad sütun tüm öznitelikler tanımlanmalıdır.

    Birincil anahtar öznitelik boyut bu öznitelikn boyut anahtar erişimi olduğunu açık hale getirmek için AttributeUsage.Key olarak tanımlanmalıdır.

  3. Boyut gezinmek için kullanıcı erişim sağlayacak hiyerarşiler oluşturun.

    Hiyerarşileri oluştururken, düzey sipariş düzey alta üst kısmından oluşturulan sıraya göre tanımlanır.Düzeylere eklenen ilk en yüksek düzey olan koleksiyon hiyerarşi.

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

Ürün boyut için aşağıdaki örnek kodu oluşturur AdventureWorks2008R2 örnek veritabanları.

        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

Bir boyut işleme işlem yöntem kullanarak olarak basittir Dimension nesne.

Bir boyut işleme boyutu kullanmak tüm küplerin etkileyebilir.İşleme seçenekleri hakkında daha fazla bilgi için bkz: İşleme nesneleri (xmla) ve Analysis Services nesneleri işleniyor.

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

        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ını Cube nesne.

Oluşturma, bırakarak ve bir küp bulma

Yönetme küpler, Boyutlar yönetmeye benzer.Oluşturma bir Cube nesnesi dört adımda gerçekleştirilebilir:

  1. Küp nesnesi oluşturma ve temel öznitelikler doldurmak.

    Temel ad, depolama modu, veri kaynağına bağlama, varsayılan ölçü ve diğer küp özniteliklerini özniteliktir.

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

  2. Küp boyutları ekleyin.

    Boyutlar için geçerli küp boyutları eklenen koleksiyon veritabanından; küp boyutları veritabanı boyutları başvuruları olan koleksiyon.Her boyut için küp tek tek eşlenmiş olması gerekir.Örnek boyutları sağlayarak eşlenir: veritabanı boyut iç tanımlayıcı küp boyut için bir ad ve bir küpteki adlandırılmış boyut kodu.

    "Tarih", örnek kod dikkat edin Boyut üç kez farklı küp boyut adı kullanılarak eklenen her saat eklenir: Tarihi, sevk tarihi, teslim tarihi.Bu boyutları Boyutlar "rol oynama" denir.Temel boyut mi aynı (tarih), ama aslında tablo boyut farklı "rollerini" (sipariş tarihi, sevk tarihi, teslim tarihi) kullanılır-"bırakarak ve bir MeasureGroup bulma oluşturma," bakın anlamak için bu belgede daha sonra nasıl "rol oynama" boyutları tanımlanır.

  3. Kullanıcı verileri küp gözatmak için erişecek ölçü birimi grupları oluşturun.

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

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

    Update yöntem ExpandFull Update seçeneği ile tüm nesneleri sunucuyu tümüyle güncel olduğundan emin olmak için kullanılır.

Aşağıdaki kod örneği Adventure Works küp bölümleri oluşturur.Kod örneği, tüm boyutları veya Adventure Works Analysis Services Project Örnek dahil olan ölçü birimi grupları oluşturun.Samples yükleme hakkında daha fazla bilgi için bkz: AdventureWorks2008R2 örnek veritabanları.

        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şleniyor

Bir küp işlem işlem yöntem kullanarak olarak basittir Cube nesne.küp işlemek de işler tüm ölçü grubuküp ve tüm bölümlerinde s ölçü grubu.İçinde bir küp, bölümleri olan işlenebilir; yalnızca nesneleri işleme amacıyla, ölçü birimi grupları yalnızca bölümlerinin kaplardır.Belirtilen tür işleme küp bölümleri yayar.Küp işleniyor ve ölçü grubu boyutları ve bölümleri işlenmesi için dahili olarak çözümlenir.

İşleme seçenekleri hakkında daha fazla bilgi için bkz: İşleme nesneleri (xmla), ve Analysis 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 işlemek için bir ölçü grubu, programını MeasureGroup nesne.

Oluşturma, bırakarak ve bir MeasureGroup bulma

Ölçü birimi grupları yönetme, boyutlar ve küpler yönetmeye benzer.Oluşturma bir MeasureGroup nesnesi aşağıdaki adımlarda gerçekleştirilebilir:

  1. Oluşturma ölçü grubu nesne ve temel öznitelikler doldurmak.

    Ad, depolama modu, işleme modu varsayılan ölçü ve diğer temel öznitelikleri dahil ölçü grubu öznitelikleri.

    Oluşturmadan önce bir ölçü grubu, emin olun ölçü grubu yok.Aşağıdaki örnek kodda ölçü grubu var, daha sonra ölçü grubu bırakılan ve yeniden oluşturulur.

  2. Kıstası oluşturmak ölçü grubu.Oluşturulan her ölçü için aşağıdaki öznitelikleri atanır: adı, toplama işlev, kaynak sütun, dize biçimi.Diğer özniteliklerini de atanabilir.Aşağıdaki örnek kodda, CreateDataItem yöntem sütun şemaya ekler olduğunu unutmayın.

  3. Boyutları ekleyin ölçü grubu.

  4. Geçerli Boyut eklenen ölçü grubu üst küp boyutları koleksiyonundan dimensions derlemesi.Boyut anahtar sütundan gerçeği ölçü Grup boyutları topluluğu dahil olarak tablo için boyut ölçü Grup boyutu ile atılabilen böylece eşlenebilir.

    Aşağıdaki örnek kodda satırları altında görmek "boyut ve gerçeği anahtar sütun eşleme tablo".Rol oynama boyuts farklı vekil tuşları aynı bağlayarak uygulanan boyut farklı adlar altında.Boyutları (tarihi, sevk tarihi, teslim tarihi), çalma rolünü her biri için farklı bir yedek anahtar kendisine bağlı (sipariş tarihianahtar, ÖdemeTarihianahtar, DueDateanahtar).Tüm anahtarları gerçeği olan tablo FactInternetSales.

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

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

  6. Geçerli güncelleştirme yöntem kullanarak sunucuya güncelleştirme ölçü grubu.

    Örnek kodda, tüm izleyen ölçü gruplar küp güncelleştirildiğinde güncelleştirilir.

Aşağıdaki örnek kod, Adventure Works Analysis Services Project Örnek InternetSales ölçü grubu oluşturur.Samples yükleme hakkında daha fazla bilgi için bkz: AdventureWorks2008R2 örnek veritabanları.

        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çü birimi Grup işleniyor

İşleme bir ölçü grubu işlem yöntem kullanarak olarak basittir MeasureGroup nesne.İşleme bir ölçü grubu ait tüm bölümlerini işleyecek ölçü grubu.İşleme bir ölçü grubu işlem boyutları ve bölümler için dahili olarak çözümlenir.Bkz: bir bölüm işleme bu belgede.

İşleme seçenekleri hakkında daha fazla bilgi için bkz: İşleme nesneleri (xmla), ve Analysis Services nesneleri işleniyor.

Aşağıdaki kod bir sağlanan tüm ölçü birimi grupları tam bir işlem yapacağını küp.

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

Bölüm nesneleri

Yönetmek ya da bir bölümünü işlemek için programını bir Partition nesne.

Oluşturma, bırakarak ve bir bölüm bulma

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

  1. Bölüm nesnesi oluşturma ve temel öznitelikler doldurmak.

    Temel nitelikleridir ad, depolama modu, bölüm kaynak, dilim, aynı zamanda diğer ölçü grubu öznitelikleri.sql deyim geçerli bölüm için bölüm kaynak tanımlar.Dilim olur bir mdx ifade belirterek bir tanımlama grubu veya bir ana ölçü birimi grubu geçerli bölümde bulunan boyutlardan bir parçası sınırlandırır.Otomatik molap bölümler için dilimleme olarak her saat bölüm işlenir belirlenir.

    Bir bölüm oluşturmadan önce bölüm yok doğrulamanız gerekir.Örnek kod, aşağıdaki bölüm varsa, bunun olduğunu atılan ve daha sonra yeniden oluşturulacak.

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

    Aşağıdaki kod örneğinde, tüm bölümleri güncelleştirilir, küp güncelleştirilir.

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

        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şleme

Bir bölüm işlenirken işlem yöntem kullanarak olarak basittir Partition nesne.

İşleme seçenekleri hakkında daha fazla bilgi için bkz: İşleme nesneleri (xmla) ve Analysis Services nesneleri işleniyor.

Aşağıdaki kod örneği, belirtilen tüm bölümler tam bir işlemde mu ölçü grubu.

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

Bölümler birleştirme

Bölümleri birleştirme anlamına gelir herhangi bir işlem yapmadan, sonuçlar bir bölüm olma iki veya daha fazla bölüm içinde.

Bölümleri birleştirme yöntem olan Partition nesne.Bu komut, hedef bölüm bir veya daha fazla kaynak bölüm veri birleştirir ve kaynak bölümleri siler.

Bunlar aşağıdaki tüm ölçütleri karşılıyorsa bölümleri birleştirilebilir:

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

  • Bölümleri aynı mod (molap holap ve rolap) depolanır.

  • Bölümleri aynı sunucuda bulunur; Uzak bölümleri ile aynı sunucuda, birleştirilebilir.

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

Toplamalardan için sonuç kümesini hedef bölüm aynı toplamalardan Birleştir komutunu çalıştırmadan önce durumu itibariyle kümesidir.

Aşağıdaki kod örneği, belirtilen tüm bölümlerini birleştirir ölçü grubu.İlk bölümünü bölümleri birleştirilir ö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 toplama bir tasarım tasarlama ve bir veya daha fazla bölüm için uygulamak için program Aggregation nesne.

Oluşturma ve toplamalardan bırakarak

Toplamalardan kolayca oluşturulabilir ve atanan ölçü gruplar veya bölümler arasında DesignAggregations yöntem kullanarak AggregationDesign nesne.The AggregationDesign object is a separate object from partition, the AggregationDesign object is contained in the MeasureGroup object.En fazla belirtilen düzeyde en iyileştirme (0-100) veya depolama (bayt) belirtilen düzey toplamalardan tasarlanmış olabilir.Birden çok bölüm aynı toplama tasarım kullanabilirsiniz.

Aşağıdaki kod örneği, bir sağlanan tüm bölümleri toplamalardan oluşturur. ölçü grubu.Varolan tüm toplamalardan 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;
        }