Udostępnij za pośrednictwem


Programowanie AMO OLAP podstawowych obiektów

Tworzenie złożonych Usługi Analysis Services obiektów jest niezwykle proste, ale wymaga uwagi do szczegółów.W tym temacie wyjaśniono programowania szczegóły obiektów podstawowych OLAP.Ten temat zawiera następujące sekcje:

  • Obiekty wymiaru

  • Obiektami kostki wielowymiarowej

  • Obiekty MeasureGroup

  • Obiekty partycji

  • Obiekty agregacji

Obiekty wymiaru

Administrowanie lub przetwarzania wymiar, program Dimension obiektu.

Tworzenie, upuszczając i znajdowanie wymiaru

Tworzenie Dimension obiektu jest realizowane w czterech krokach:

  1. Tworzenie obiektu wymiar i zapełnianie atrybutami podstawowymi.

    Podstawowe atrybuty są nazwa, typ wymiar, tryb pamięci masowej, powiązania źródła danych, wszystkie nazwy Członkowskie atrybutu i inne atrybuty wymiar.

    Przed utworzeniem wymiaru, należy sprawdzić, czy wymiar nie istnieje.Jeśli istnieje wymiar, wymiar jest usunięty i utworzony ponownie.

  2. Utwórz atrybutów, które definiują wymiar.

    Każdy atrybut ma dodawać pojedynczo do schematu przed użyciem go (znaleźć metoda CreateDataItem na końcu przykładowy kod), a następnie mogą być dodane do kolekcja atrybutów wymiar.

    Kolumna klucza i nazwy muszą być zdefiniowane wszystkie atrybuty.

    klucz podstawowy Atrybut wymiar powinny być określone jako AttributeUsage.Key być jasne, że ten atrybut jest klucz dostępu do wymiar.

  3. Tworzenie hierarchii, które użytkownik uzyska dostęp do nawigacji wymiar.

    Podczas tworzenia hierarchii, poziom kolejność jest określona przez kolejność pozioms są tworzone od góry do dołu.Najwyższy poziom jest pierwszą dodawane do kolekcja poziomów hierarchii.

  4. Aktualizacja serwera przy użyciu metoda Update bieżący wymiar.

Następujący przykładowy kod tworzy wymiar produkt dla Przykładowe bazy danych AdventureWorks2008R2.

        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));
        }

Przetwarzanie wymiaru

Przetwarzanie wymiar jest tak proste, jak za pomocą metoda procesu Dimension obiektu.

Przetwarzanie wymiar może mieć wpływ na wszystkie moduły, które wymiar.Aby uzyskać więcej informacji na temat opcji przetwarzania, zobacz Przetwarzanie obiektów (XMLA) i Przetwarzanie Analysis Services obiekty.

Poniższy kod wykonuje aktualizacja przyrostowa wszystkich wymiarów podanej bazy danych:

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

Obiektami kostki wielowymiarowej

Aby administrować lub przetwarzania moduł, program Cube obiektu.

Tworzenie, upuszczając i znajdowanie modułu

Zarządzanie modułami jest podobne do zarządzania wymiarami.Tworzenie Cube obiektu jest realizowane w czterech krokach:

  1. Tworzenie obiektu moduł i zapełnianie atrybutami podstawowymi.

    Podstawowe atrybuty są nazwy, tryb pamięci masowej, powiązania źródła danych, domyślnej miary i inne atrybuty moduł.

    Przed utworzeniem modułu należy sprawdzić, czy moduł nie istnieje.W próbce Jeśli istnieje moduł moduł jest opuszczane, a następnie utworzony ponownie.

  2. Dodaj wymiary moduł.

    Wymiary są dodawane do bieżącej kolekcja wymiary moduł z bazy danych; Wymiary moduł są odwołaniami do kolekcja wymiarów bazy danych.Każdy wymiar ma mają być mapowane do moduł oddzielnie.W próbce wymiary są mapowane, zapewniając: bazy danych wymiar wewnętrzny identyfikator, nazwę wymiaru moduł i identyfikator o nazwie wymiaru moduł.

    W zawiadomieniu kod przykładowy, "Data" Wymiar dodaje się trzy czass, co czas jest dodawana przy użyciu nazwy wymiaru inną kostką: Data, data dostawy, data dostawy.Te wymiary są nazywane wymiarami "role playing".Podstawowy wymiar jest tym samym (Data), ale w tabela fakt wymiar jest używany w różnych "ról" (Data zamówienia, data dostawy, data dostawy)-zobacz "Tworzenie, upuszczając i wyszukiwania elementu MeasureGroup" później w tym dokumencie, aby zrozumieć, jak "rola odtwarzanie" wymiary są zdefiniowane.

  3. Tworzenie grup miar, który użytkownik będzie miał dostęp do przeglądania danych moduł.

    Tworzenie grupy miary zostaną wyjaśnione w "Tworzenie, upuszczając i wyszukiwania elementu MeasureGroup" w dalszej części tego dokumentu.Tworzenie próbki otacza miara grupy w różnych metod, jeden dla każdej grupa miar.

  4. Zaktualizować serwer przy użyciu metoda aktualizacji bieżącego moduł.

    Metoda aktualizacji jest używana z opcją Aktualizacja ExpandFull aby upewnić się, że wszystkie obiekty są w pełni zaktualizowane na serwerze.

Poniższy przykładowy kod tworzy części moduł Adventure Works.Przykładowy kod tworzy wszystkie wymiary lub miara grup zawartych w próbce Adventure Works Analysis Services projektu.Aby uzyskać więcej informacji dotyczących instalowania próbki, zobacz Przykładowe bazy danych AdventureWorks2008R2.

        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);
        }

Przetwarzania modułu

Przetwarzania moduł jest tak proste, jak za pomocą metoda procesu Cube obiektu.Także przetwarzania moduł przetwarza wszystkie grupa miars moduł i wszystkich partycji w grupa miar.W moduł, partycje są tylko obiekty, które mogą być przetwarzane; do celów przetwarzania miara grupy są tylko pojemniki partycji.Określony typ przetwarzania moduł propaguje na partycje.Przetwarzanie modułów i grupa miar wewnętrznie jest tłumaczona na przetwarzanie wymiary i partycji.

Aby uzyskać więcej informacji na temat opcji przetwarzania, zobacz Przetwarzanie obiektów (XMLA), i Przetwarzanie Analysis Services obiekty.

Poniższy kod wykona pełny proces na wszystkie moduły w określonej bazie danych:

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

Obiekty MeasureGroup

Administrowanie lub procesu grupa miar, program MeasureGroup obiektu.

Tworzenie, upuszczając i wyszukiwania elementu MeasureGroup

Zarządzanie grupami miara jest podobne do zarządzania rozmiary i moduły.Tworzenie MeasureGroup obiektu jest realizowane w następujących etapach:

  1. Tworzenie grupa miar object i wypełniania podstawowych atrybutów.

    Atrybuty podstawowe obejmują nazwę, tryb pamięci masowej, tryb przetwarzania, domyślnej miara i inne atrybuty grupa miar.

    Przed utworzeniem grupa miar, sprawdź, czy grupa miar nie istnieje.W kodzie przykładowych występujący, gdy grupa miar istnieje, a następnie grupa miar jest usunięty i utworzony ponownie.

  2. Tworzenie środków grupa miar.Dla każdego miara tworzone są przypisywane następujące atrybuty: Nazwa, funkcja agregacja źródło kolumny, ciąg formatu.Można przypisać również inne atrybuty.Należy zauważyć, że w przykładowy kod, który następuje, metoda CreateDataItem dodaje kolumna do schematu.

  3. Dodaj wymiary grupa miar.

  4. Wymiara są dodawane do bieżącego grupa miar kolekcja wymiara moduł nadrzędnego wymiara kolekcja.Jak najszybciej wymiar jest uwzględniona kolekcja wymiary grupy miara, kolumna klucz z tabela fakt tak, aby grupa miar może być przeglądana za pomocą wymiar mogą być mapowane do wymiar.

    Przykładowy kod, który następuje, zawiera wiersze w obszarze "mapowania wymiar i kolumnę klucz z tabela fakt".Wymiary odtwarzania roli są implementowane przez łączenie Surogat różne klucze do tego samego wymiar pod różnymi nazwami.Dla każdej z ról odtwarzanie wymiarów (Data, data dostawy, data dostawy) klucz różnych Surogat jest z nim połączony (OrderDateKey, ShipDateKey, DueDateKey).Wszystkie klucze są z tabela fakt FactInternetSales.

  5. Dodawanie partycji zaprojektowane z grupa miar.

    W przykładowy kod, który następuje, tworzenie partycji jest zapakowane w jedną metoda.

  6. Zaktualizować serwer przy użyciu metoda aktualizacji bieżącego grupa miar.

    W przykładowy kod, który następuje wszystkie miara grupy są aktualizowane po zaktualizowaniu moduł.

Następujący przykładowy kod tworzy InternetSales grupa miar próbki Adventure Works Analysis Services projektu.Aby uzyskać więcej informacji dotyczących instalowania próbki, zobacz Przykładowe bazy danych AdventureWorks2008R2.

        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
        }

Przetwarzanie grupy miar

Przetwarzanie grupa miar jest tak proste, jak za pomocą metoda procesu MeasureGroup obiektu.Przetwarzanie grupa miar będzie przetwarzać wszystkie partycje, które należą do grupa miar.Przetwarzanie grupa miar wewnętrznie został rozwiązany przetwarzania partycji i wymiary.Zobacz przetwarzania partycji w tym dokumencie.

Aby uzyskać więcej informacji na temat opcji przetwarzania, zobacz Przetwarzanie obiektów (XMLA), i Przetwarzanie Analysis Services obiekty.

Poniższy kod wykona pełny proces we wszystkich miara grup dostarczonego moduł.

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

Obiekty partycji

Aby administrować lub przetwarzania partycji, program Partition obiektu.

Tworzenie, upuszczając i znajdowanie partycji

Partycje są prostych obiektów utworzonych w dwóch etapach.

  1. Tworzenie obiektu partycji i zapełnianie atrybutami podstawowymi.

    Podstawowe atrybuty są nazwy, tryb pamięci masowej, źródło partycji, plasterek, jak również inne grupa miar atrybuty.Źródło partycji definiuje instrukcja SQL select bieżącej partycji.Plasterek jest wyrażenie MDX określające spójna kolekcja lub zestaw ograniczającego część wymiary z obiektu nadrzędnego grupa miar są zawarte w bieżącej partycji.Dla partycji MOLAP krojenie jest określana automatycznie co czas przetwarzane partycji.

    Przed utworzeniem partycji, należy sprawdzić, że partycja nie istnieje.W próbce kod że następuje, jeśli istnieje partycja jest opuszczane, a następnie utworzony ponownie.

  2. Aktualizacja serwera za pomocą metoda aktualizacja bieżącej partycji.

    Następujący kod próbki wszystkie partycje są aktualizowane po zaktualizowaniu moduł.

Poniższy przykładowy kod tworzy partycji dla "internetsales" grupa miar.

        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");
        }

Przetwarzania partycji

Przetwarzanie partycji jest tak proste, jak za pomocą metoda procesu Partition obiektu.

Aby uzyskać więcej informacji na temat opcji przetwarzania, zobacz Przetwarzanie obiektów (XMLA) i Przetwarzanie Analysis Services obiekty.

Poniższy przykładowy kod jest pełny proces w wszystkich partycji określonego grupa miar.

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

Scalanie partycji

Scalanie partycje oznacza wykonaniem każdej operacji, wyniki w dwóch lub więcej partycje stają się jedną partycję.

Scalanie partycji jest metoda Partition obiektu.To polecenie scalania danych w jednej lub kilku partycji źródło partycja docelowa i usuwa partycje źródło.

Partycje można scalić tylko wtedy, gdy spełniają następujące kryteria:

  • Partycje są w tym samym grupa miar.

  • Partycje są przechowywane w tym samym trybie (MOLAP, HOLAP i ROLAP).

  • Partycje, które znajdują się na tym samym serwerze; partycje zdalnego mogą być scalane, jeśli na tym serwerze.

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

Wynikowy zestaw agregacje partycja docelowa jest ten sam zestaw agregacji Państwo przed uruchomieniem polecenia scalania.

Poniższy przykładowy kod scala wszystkie partycje określonego grupa miar.Partycje są scalane w pierwszej partycji z grupa miar.

        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();
            }

Obiekty agregacji

Program do projektowania projekt agregacja i zastosować go do jednego lub więcej partycji, Aggregation obiektu.

Tworzenie i upuszczając agregacji

Skupiska można łatwo tworzyć i przypisane do miara grup lub partycje przy użyciu metoda DesignAggregations z AggregationDesign obiektu.AggregationDesign Obiekt jest oddzielny obiekt z partycji, AggregationDesign obiekt jest zawarty w MeasureGroup obiektu.Skupiska mogą służyć do określonego poziomu optymalizacji (od 0 do 100) lub określony poziom magazynu (bajtów).Wiele partycji można użyć tego samego projektu agregacja.

Poniższy przykładowy kod tworzy agregacji dla wszystkich partycji podanych grupa miar.Wszelkie istniejące agregacji w partycje są opuszczane.

        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;
        }