Udostępnij przez


Programming AMO OLAP Advanced Objects

W tym temacie wyjaśniono, Analysis Management Objects (AMO) programowania szczegółów OLAP zaawansowane obiektów.Ten temat zawiera następujące sekcje:

  • Obiekty akcja

  • Obiekty kpi

  • Obiekty perspektywa

  • Obiekty ProactiveCaching

  • Translacja obiektów

Obiekty akcja

Akcja klasy są używane do tworzenia postaci aktywnego odpowiedzi, podczas przeglądania pewnych obszarach moduł.Akcja obiekty mogą być definiowane przy użyciu AMO, ale są używane z klient aplikacji, która przegląda dane.Akcje mogą być różnych typów i mają zostać utworzone zgodnie z typem.Czynności mogą być:

  • Drążenie akcja, które zwracają zestaw wierszy reprezentuje dane z zaznaczonych komórek moduł, gdzie występuje akcja.

  • Raportowanie akcja, które zwracają raportu z Reporting Services która jest skojarzona z zaznaczonej sekcji moduł, gdzie występuje akcja.

  • Standardowe akcja, które zwraca element akcja (adres URL, HTML, zestaw danych, zestaw wierszy i innych elementów), który jest skojarzony z zaznaczonej sekcji moduł, gdzie występuje akcja.

Tworzenie akcja obiektu wymaga następujących kroków:

  1. Tworzenie obiektu Akcja pochodna i wypełnić podstawowych atrybutów.

    Podstawowe atrybuty są następujące: Typ akcji, typ miejsce docelowe lub części moduł, docelowe lub określony obszar moduł, w których akcja jest dostępna, podpis i w przypadku, gdy podpis jest wyrażenie MDX.

  2. Wypełnij określone atrybuty typu akcja.

    Atrybuty są różne dla trzech rodzajów czynności można znaleźć przykładowy kod, znajdujący się w przypadku parametrów.

  3. Dodawanie akcji do moduł kolekcja i aktualizowania moduł.Akcja nie jest obiektem mogą być aktualizowane.

Testowanie akcja wymaga aplikacji innego programu.Można przetestować tę czynność w Business Intelligence Development Studio.Po pierwsze należy zainstalować Reporting Services przykłady, zobacz Processing Analysis Services Objects.

Następujący przykładowy kod replikuje trzy różne akcje z próbki AdventureWorks Analysis Services w programie Project.Aby uzyskać więcej informacji na temat instalowania próbki zobacz AdventureWorks Sample Databases. Akcje można odróżnić, ponieważ te, które zostaną wprowadzone przy użyciu poniższy przykład rozpoczynać "My".

        static public void CreateActions(Cube cube)
        {
            #region Adding a drillthrough action
            // Verify That action exists and drop it
            if (cube.Actions.ContainsName("My Reseller Details"))
                cube.Actions.Remove("My Drillthrough Action",true);

            //Create a Drillthrough action
            DrillThroughAction dtaction = new DrillThroughAction("My Reseller Details", "My Drillthrough Action");

            //Define the Action
            dtaction.Type = ActionType.DrillThrough;
            dtaction.TargetType = ActionTargetType.Cells;
            dtaction.Target = "MeasureGroupMeasures(\"Reseller Sales\")";
            dtaction.Caption = "My Drillthrough...";
            dtaction.CaptionIsMdx = false;

            #region create drillthrough action specifics
            //Adding Drillthrough columns
            //Adding Measure columns to the drillthrough
            MeasureGroup mg = cube.MeasureGroups.FindByName("Reseller Sales");
            MeasureBinding mb1 = new MeasureBinding();
            mb1.MeasureID = mg.Measures.FindByName( "Reseller Sales Amount").ID;
            dtaction.Columns.Add(mb1);
            
            MeasureBinding mb2 = new MeasureBinding();
            mb2.MeasureID = mg.Measures.FindByName("Reseller Order Quantity").ID;
            dtaction.Columns.Add(mb2);

            MeasureBinding mb3 = new MeasureBinding();
            mb3.MeasureID = mg.Measures.FindByName("Reseller Unit Price").ID;
            dtaction.Columns.Add(mb3);

            //Adding Dimension Columns to the drillthrough
            CubeAttributeBinding cb1 = new CubeAttributeBinding();
            cb1.CubeID = cube.ID;
            cb1.CubeDimensionID = cube.Dimensions.FindByName("Reseller").ID;
            cb1.AttributeID = "Reseller Name";
            cb1.Type = AttributeBindingType.All;
            dtaction.Columns.Add(cb1);

            CubeAttributeBinding cb2 = new CubeAttributeBinding();
            cb2.CubeID = cube.ID;
            cb2.CubeDimensionID = cube.Dimensions.FindByName("Product").ID;
            cb2.AttributeID = "Product Name";
            cb2.Type = AttributeBindingType.All;
            dtaction.Columns.Add(cb2);
            #endregion

            //Add the defined action to the cube
            cube.Actions.Add(dtaction);
            #endregion

            #region Adding a Standard action
            // Verify That action exists and drop it
            if (cube.Actions.ContainsName("My City Map"))
                cube.Actions.Remove("My Action", true);

            //Create a Drillthrough action
            StandardAction stdaction = new StandardAction("My City Map", "My Action");

            //Define the Action
            stdaction.Type = ActionType.Url;
            stdaction.TargetType = ActionTargetType.AttributeMembers;
            stdaction.Target = "[Geography].[City]";
            stdaction.Caption = "\"My View Map for \" + [Geography].[City].CurrentMember.Member_Caption + \"...\"";
            stdaction.CaptionIsMdx = true;

            #region create standard action specifics
            stdaction.Expression = "\"http://maps.msn.com/home.aspx?plce1=\" + " +
                "[Geography].[City].CurrentMember.Name + \",\" + " +
                "[Geography].[State-Province].CurrentMember.Name + \",\" + " +
                "[Geography].[Country].CurrentMember.Name + " +
                "\"&regn1=\" + " +
                "Case " +
                    "When [Geography].[Country].CurrentMember Is " +
                            "[Geography].[Country].&[Australia] " +
                        "Then \"3\" " +
                    "When [Geography].[Country].CurrentMember Is " +
                            "[Geography].[Country].&[Canada] " +
                        "Or [Geography].[Country].CurrentMember Is " +
                            "[Geography].[Country].&[United States] " +
                        "Then \"0\" " +
                        "Else \"1\" " +
                "End ";
            #endregion

            //Add the defined action to the cube
            cube.Actions.Add(stdaction);

            #endregion

            #region Adding a Reporting action
            // Verify That action exists and drop it
            if (cube.Actions.ContainsName("My Sales Reason Comparisons"))
                cube.Actions.Remove("My Report Action", true);

            //Create a Report action
            ReportAction rsaction = new ReportAction("My Sales Reason Comparisonsp", "My Report Action");

            //Define the Action
            rsaction.Type = ActionType.Report;
            rsaction.TargetType = ActionTargetType.AttributeMembers;
            rsaction.Target = "[Product].[Category]";
            rsaction.Caption = "\"My Sales Reason Comparisons for \" + [Product].[Category].CurrentMember.Member_Caption + \"...\"";
            rsaction.CaptionIsMdx = true;

            #region create Report action specifics
            rsaction.ReportServer = "MyRSSamplesServer";
            rsaction.Path = "ReportServer?/AdventureWorks Sample Reports/Sales Reason Comparisons";
            rsaction.ReportParameters.Add("ProductCategory", "UrlEscapeFragment( [Product].[Category].CurrentMember.UniqueName )");
            rsaction.ReportFormatParameters.Add("rs:Command", "Render");
            rsaction.ReportFormatParameters.Add("rs:Renderer", "HTML5");
            #endregion

            //Add the defined action to the cube
            cube.Actions.Add(rsaction);

            #endregion
        }

Obiekty kpi

A key performance indicator (KPI) is a collection of calculations that are associated with a measure group in a cube and are used to evaluate business success.Kpi objects can be defined by AMO, but are used from the client application that browses the data.

Tworzenie Kpi obiekt wymaga następujących kroków:

  1. Tworzenie Kpi obiekt, a następnie wypełnij Podstawowe atrybuty.

    Poniżej przedstawiono listę atrybutów podstawowe: Opis folderu wyświetlania skojarzony grupa miar i wartość. Wyświetlanie folderów aplikacji klient informuje o KPI powinny być zlokalizowane dla użytkownika końcowego go znaleźć.Skojarzone grupa miar wskazuje grupa miar wszystkich obliczeniach MDX powinien być przekazywany.Wartość wskazuje rzeczywistą wartość wskaźnika wydajności jako wyrażenie MDX.

  2. Należy zdefiniować wskaźniki KPI: Celem, stanem i trendem.

    Wskaźniki są wyrażenia MDX, które powinni ocenić między -1 do 1, ale jest przeglądania aplikacji, która określa zakres wartości dla wskaźników.

  3. Podczas przeglądania kluczowych wskaźników wydajności w Business Intelligence Development Studio wartości mniejsze niż -1 są traktowane jako -1, a wartości większej niż 1 są traktowane jako 1.

  4. Umożliwia zdefiniowanie obrazów graficznych.

    Obrazy graficzne są wartościami ciąg znaków, używany jako odwołanie w aplikacji klient do identyfikowania poprawny zestaw obrazów do wyświetlenia.Ciąg obrazu graficznego definiuje także zachowanie funkcja wyświetlania.Zazwyczaj zakres jest podzielona na nieparzystą liczbę stany od Zły do dobra, i stan każdego obrazu, z zestaw, przypisano.

    Jeśli używasz Business Intelligence Development Studio do przeglądania kluczowych wskaźników wydajności, następnie, w zależności od nazwy, zakres wskaźnika jest podzielony na trzy stany lub pięciu stanów. Ponadto istnieją nazw w przypadku gdy zakres jest odwrócony, jest -1 jest "Ważne" i "Negatywnego" jest 1.W Business Intelligence Development Studiotrzema stanami w ramach zakres są następujące:

    • Zły = -1 do liczby -0,5

    • OK =-0.4999 do -0,4999

    • Dobre = 0,50: 1

    W Business Intelligence Development Studiopięć stanów w zakresie są następujące:

    • Zły = -1 do liczby -0,75

    • Ryzyko =-0.7499 do-0.25

    • OK =-0,2499 do 0,2499

    • Podnoszenie = 0,25 do 0.7499

    • Dobre = 0,75: 1

W poniższej tabela wymieniono zużycia, nazwa i numer stanów skojarzony z obrazem.

Użycie obrazu

Nazwa obrazu

Liczba stanów

Stan

Kształty

3

Stan

Sygnalizacja świetlna

3

Stan

Droga znaków

3

Stan

Miernik

3

Stan

Manometr wycofana

5

Stan

Termometr

3

Stan

Cylinder

3

Stan

Buźki

3

Stan

Odchylenie od strzałki

3

Trend

Strzałka standardowe

3

Trend

Stan strzałki

3

Trend

Stan wycofana strzałki

5

Trend

Buźki

3

  1. Dodać wskaźnik KPI do kolekcja moduł i zaktualizować moduł, ponieważ kluczowego wskaźnika wydajności nie jest obiektem mogą być aktualizowane.

Testowanie wskaźnika KPI wymaga aplikacji innego programu.Można przetestować KPI w Business Intelligence Development Studio.

Następujący przykładowy kod tworzy KPI w folderze "Finansowego przychód Zwiększaj i Perpective" dla moduł AdventureWorks, która nie znajduje się przykładowy AdventureWorks Analysis Services w programie Project.Aby uzyskać więcej informacji na temat instalowania próbki zobacz AdventureWorks Sample Databases.

        static public void CreateKPIs(Cube cube)
        {
            Kpi kpi = cube.Kpis.Add("My Internet Revenue", "My Internet Revenue");
            kpi.Description = "(My) Revenue achieved through direct sales via Interner";
            kpi.DisplayFolder = "\\Financial Perspective\\Grow Revenue";
            kpi.AssociatedMeasureGroupID = "Internet Sales";
            kpi.Value = "[Measures].[Internet Sales Amount]";
            #region Goal
            kpi.Goal = "Case" +
                       "     When IsEmpty" +
                       "          (" +
                       "            ParallelPeriod" +
                       "            (" +
                       "              [Date].[Fiscal Time].[Fiscal Year]," +
                       "              1," +
                       "              [Date].[Fiscal Time].CurrentMember" +
                       "            )" +
                       "          )" + 
                       "     Then [Measures].[Internet Sales Amount]" +
                       "     Else 1.10 *" +
                       "          (" +
                       "            [Measures].[Internet Sales Amount]," +
                       "            ParallelPeriod" +
                       "            (" +
                       "              [Date].[Fiscal Time].[Fiscal Year]," +
                       "              1," +
                       "              [Date].[Fiscal Time].CurrentMember" +
                       "            )" +
                       "          ) " +
                       " End";
            #endregion
            #region Status
            kpi.Status = "Case" +
                         "   When KpiValue( \"Internet Revenue\" ) / KpiGoal ( \"Internet Revenue\" ) >= .95 " +
                         "   Then 1 " +
                         "   When KpiValue( \"Internet Revenue\" ) / KpiGoal ( \"Internet Revenue\" ) <  .95 " +
                         "        And  " +
                         "        KpiValue( \"Internet Revenue\" ) / KpiGoal ( \"Internet Revenue\" ) >= .85 " +
                         "   Then 0 " +
                         "   Else -1 " +
                         "End";
            #endregion
            #region Trend
            kpi.Trend = "Case " +
                        "    When VBA!Abs " +
                        "         ( " +
                        "           KpiValue( \"Internet Revenue\" ) -  " +
                        "           ( " +
                        "             KpiValue ( \"Internet Revenue\" ), " +
                        "             ParallelPeriod " +
                        "             (  " +
                        "               [Date].[Fiscal Time].[Fiscal Year], " +
                        "               1, " +
                        "               [Date].[Fiscal Time].CurrentMember " +
                        "             ) " +
                        "           ) / " +
                        "           ( " +
                        "             KpiValue ( \"Internet Revenue\" ), " +
                        "             ParallelPeriod " +
                        "             (  " +
                        "               [Date].[Fiscal Time].[Fiscal Year], " +
                        "               1, " +
                        "               [Date].[Fiscal Time].CurrentMember " +
                        "             ) " +
                        "           )   " +
                        "         ) <=.02  " +
                        "    Then 0 " +
                        "    When KpiValue( \"Internet Revenue\" ) -  " +
                        "         ( " +
                        "           KpiValue ( \"Internet Revenue\" ), " +
                        "           ParallelPeriod " +
                        "           (  " +
                        "             [Date].[Fiscal Time].[Fiscal Year], " +
                        "             1, " +
                        "             [Date].[Fiscal Time].CurrentMember " +
                        "           ) " +
                        "         ) / " +
                        "         ( " +
                        "           KpiValue ( \"Internet Revenue\" ), " +
                        "           ParallelPeriod " +
                        "           (  " +
                        "             [Date].[Fiscal Time].[Fiscal Year], " +
                        "             1, " +
                        "             [Date].[Fiscal Time].CurrentMember " +
                        "           ) " +
                        "         )  >.02 " +
                        "    Then 1 " +
                        "    Else -1 " +
                        "End";
            #endregion
            kpi.TrendGraphic = "Standard Arrow";
            kpi.StatusGraphic = "Cylinder";
        }.

Obiekty perspektywa

Perspective obiekty mogą być definiowane przez AMO, ale są używane z klient aplikacji, która przegląda dane.

Tworzenie Perspective obiekt wymaga następujących kroków:

  1. Tworzenie Perspective obiekt, a następnie wypełnij Podstawowe atrybuty.

    Poniżej przedstawiono listę atrybutów podstawowe: Nazwa domyślnej miara, opis i adnotacji.

  2. Dodaj wszystkie obiekty z moduł obiektu nadrzędnego, który powinien być rozpatrywany przez użytkownika końcowego.

    Dodawanie moduł wymiarów (atrybuty i hierarchie), grupa miar (miara i grupa miar), działania, kluczowe wskaźniki wydajności i obliczeń.

  3. perspektywa można dodać do kolekcja moduł i zaktualizować moduł, ponieważ perspektywa nie jest obiektem mogą być aktualizowane.

Testowanie perspektywa wymaga zastosowania innego programu.Można przetestować z perspektywa w Business Intelligence Development Studio.

Poniższy przykładowy kod tworzy perspektywa o nazwie "Sprzedaż bezpośrednie" dla dostarczonego moduł.

        static public void CreatePerspectives(Cube cube)
        {
            Perspective perspective = cube.Perspectives.Add("Direct Sales", "Direct Sales");
            CubeDimension dim1 = cube.Dimensions.GetByName("Date");
            PerspectiveDimension pdim1 = perspective.Dimensions.Add(dim1.DimensionID);
            pdim1.Attributes.Add("Date");
            pdim1.Attributes.Add("Calendar Year");
            pdim1.Attributes.Add("Fiscal Year");
            pdim1.Attributes.Add("Calendar Quarter");
            pdim1.Attributes.Add("Fiscal Quarter");
            pdim1.Attributes.Add("Calendar Month Number");
            pdim1.Attributes.Add("Fiscal Month Number");
            pdim1.Hierarchies.Add("Calendar Time");
            pdim1.Hierarchies.Add("Fiscal Time");

            CubeDimension dim2 = cube.Dimensions.GetByName("Product");
            PerspectiveDimension pdim2 = perspective.Dimensions.Add(dim2.DimensionID);
            pdim2.Attributes.Add("Product Name");
            pdim2.Attributes.Add("Product Line");
            pdim2.Attributes.Add("Model Name");
            pdim2.Attributes.Add("List Price");
            pdim2.Attributes.Add("Size");
            pdim2.Attributes.Add("Weight");
            pdim2.Hierarchies.Add("Product Model Categories");
            pdim2.Hierarchies.Add("Product Categories");

            PerspectiveMeasureGroup pmg = perspective.MeasureGroups.Add("Internet Sales");
            pmg.Measures.Add("Internet Sales Amount");
            pmg.Measures.Add("Internet Order Quantity");
            pmg.Measures.Add("Internet Unit Price");

            pmg = perspective.MeasureGroups.Add("Reseller Sales");
            pmg.Measures.Add("Reseler Sales Amount");
            pmg.Measures.Add("Reseller Order Quantity");
            pmg.Measures.Add("Reseller Unit Price");

            PerspectiveAction pact = perspective.Actions.Add("Drillthrough Action");

            PerspectiveKpi pkpi = perspective.Kpis.Add("Internet Revenue");
            Cube.Update();
        }

Obiekty ProactiveCaching

ProactiveCaching obiekty mogą być definiowane przez AMO.

Tworzenie ProactiveCaching obiekt wymaga następujących kroków:

  1. Tworzenie ProactiveCaching obiekt.

    Istnieją nie Podstawowe atrybuty, aby zdefiniować.

  2. Dodawanie specyfikacji pamięci podręcznej.

Specyfikacja

Description

AggregationStorage

Typ magazynu dla agregacji.

Dotyczy tylko partycję.W wymiarze muszą być Regular.

SilenceInterval

Minimalna ilość czas, w pamięci podręcznej istnieje przed MOLAP, rozpoczyna się do tworzenia obrazów dysków.

opóźnienie

Odstęp czas między najwcześniejszą powiadomienie i w chwili, kiedy obrazy MOLAP zostały zniszczone.

SilenceOverrideInterval

Czas po początkowym powiadomienie o po upływie którego obrazowanie MOLAP uruchamiane bezwarunkowo.

ForceRebuildInterval

Czas (począwszy od po upuszczeniu świeże obrazu MOLAP) po których MOLAP obrazowania uruchamia bezwarunkowo (nie powiadomienia).

OnlineMode

Gdy obraz MOLAP jest dostępny.

Może być Immediate lub OnCacheComplete.

  1. Dodawanie ProactiveCaching obiekt do kolekcja nadrzędnej. Trzeba będzie zaktualizować obiektu nadrzędnego, ponieważ ProactiveCaching nie jest obiektem mogą być aktualizowane.

Poniższy przykładowy kod tworzy ProactiveCaching obiekt na wszystkich partycjach z grupy miara Internet Sales w module firmy Adventure Works w określonej bazie danych.

        static public void SetProactiveCachingSettings(Database db)
        {
            ProactiveCaching pc;
            if (db.Cubes.ContainsName("Adventure Works") && db.Cubes.FindByName("Adventure Works").MeasureGroups.ContainsName("Internet Sales"))
            {
                ProactiveCachingTablesBinding pctb;
                TableNotification tn;

                MeasureGroup mg = db.Cubes.FindByName("Adventure Works").MeasureGroups.FindByName("Internet Sales");
                foreach(Partition part in mg.Partitions)
                {
                    pc = new ProactiveCaching();
                    pc.AggregationStorage = ProactiveCachingAggregationStorage.MolapOnly;
                    pc.SilenceInterval = TimeSpan.FromSeconds(10);
                    pc.Latency = TimeSpan.FromSeconds(-1);
                    pc.SilenceOverrideInterval = TimeSpan.FromMinutes(10);
                    pc.ForceRebuildInterval = TimeSpan.FromSeconds(-1);
                    pc.Enabled = true;
                    pc.OnlineMode = ProactiveCachingOnlineMode.OnCacheComplete;
                    pctb = new ProactiveCachingTablesBinding();
                    pctb.NotificationTechnique = NotificationTechnique.Server;
                    tn = new TableNotification("[FactInternetSales]", "dbo");
                    pctb.TableNotifications.Add( tn);
                    pc.Source = pctb;
                    
                    part.ProactiveCaching = pc;
                    part.Update();
                }
            }
        }

Translacja obiektów

Tłumaczenie obiektów mogą być definiowane przez AMO, ale są używane z aplikacji klienckiej, która przegląda dane.Tłumaczenie obiektów są obiektami proste do kodu.Tłumaczenie obiektu podpisów są dostarczane przez par identyfikator regionalny i przetłumaczyć podpis.Każdy podpis można włączyć wiele tłumaczenia.Można podać tłumaczeń dla większości Analysis Services obiekty, takie jak wymiary, atrybutów, hierarchie, moduły, wymiary, grupy, środków i innych.

Poniższy przykładowy kod zawiera hiszpański translacji nazwy atrybut nazwa produktu.

        static public void CreateTranslations(Database db)
        {
            //Spanish Tranlations for Product Category in Product Dimension
            Dimension dim = db.Dimensions["Product"];
            DimensionAttribute atr = dim.Attributes["Product Name"];
            Translation tran = atr.Translations.Add(3082);
            tran.Caption = "Nombre Producto";

            dim.Update(UpdateOptions.ExpandFull);

        }