Udostępnij za pośrednictwem


Programowanie AMO OLAP zaawansowane obiektów

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

  • Akcja obiektów

  • Obiekty KWW

  • Obiekty perspektywy

  • Obiekty ProactiveCaching

  • Tłumaczenie obiektów

Akcja obiektów

Akcja klasy są używane do tworzenia active odpowiedzi, podczas przeglądania pewnych obszarach moduł.Obiekty akcji można zdefiniować za pomocą AMO, ale są używane z klient aplikacji, która przegląda dane.Mają utworzone zgodnie z typem i akcje mogą być różnych typów.Akcje mogą być:

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

  • Zgłoszenie akcja, które zwracają raport z Reporting Services , skojarzony z zaznaczonej sekcji moduł, gdzie występuje akcja.

  • Standardowe akcje zwracające element akcja (adres URL, HTML, DataSet, wierszy i innych elementów), skojarzone z zaznaczonej sekcji moduł, gdzie występuje akcja.

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

  1. Tworzenie obiektu pochodnych akcja i zapełnianie atrybutami podstawowymi.

    Podstawowe atrybuty są następujące: Typ akcji, typ miejsce docelowe lub sekcji podpis kostki, target lub określonego obszaru moduł, których działanie jest dostępna, a podpis jest wyrażenie MDX.

  2. Wypełnij określonych atrybutów typu akcja.

    Atrybuty są różne dla trzech rodzajów akcji, zobacz przykładowy kod, który następuje parametrów.

  3. Dodaj akcja do modułów kolekcja i aktualizacji moduł.Akcja nie jest aktualizowalny obiektu.

Testowanie akcja wymaga zastosowania innego programu.Można przetestować akcja w Business Intelligence Development Studio.Najpierw musisz zainstalować Reporting Services próbek, zobacz Przetwarzanie Analysis Services obiekty.

Następujący przykładowy kod replikuje trzy różne akcje z próbki Adventure Works Analysis Services projektu.Aby uzyskać więcej informacji dotyczących instalowania próbki, zobacz Przykładowe bazy danych AdventureWorks2008R2.Akcje można odróżnić, ponieważ te, które wprowadzić za pomocą następujących przykładowych zaczynają "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 KWW

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 obiektu wymaga następujących kroków:

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

    Poniżej przedstawiono listę atrybutów podstawowe: Opis folderu wyświetlania, skojarzone grupy miar i wartość.Aplikacja klient informuje Folder wyświetlania gdzie KPI powinien znajdować się dla użytkownika końcowego go znaleźć.Skojarzone grupa miar wskazuje grupa miar gdzie określonych wszystkich obliczeniach MDX.Wartość wskazuje rzeczywistej wartości wskaźnika wydajności jako wyrażenie MDX.

  2. Zdefiniuj wskaźników KPI: Celem, stanem i trendem

    Wskaźniki są wyrażeń MDX, które należy ocenić między -1 do 1, ale jest przeglądania aplikacji, która określa zakres wartości 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ększe niż 1 są traktowane jako 1.

  4. Zdefiniuj obrazów graficznych.

    Obrazy graficzne są ciąg wartości, używany jako odwołanie w aplikacji klienckiej do identyfikowania poprawnego zestaw obrazów do wyświetlenia.Ciąg obrazu graficznego definiuje również zachowanie funkcja wyświetlania.Zazwyczaj zakres jest podzielona na nieparzystą liczbę państw od Zły do dobra, i każdemu Państwu 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 Państwa lub pięć państw.Ponadto istnieją nazwy gdzie zakres jest odwrócony, które jest -1 jest 'Dobra' a 1 "Bad".W Business Intelligence Development Studio, trzy Państwa w zakres są następujące:

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

    • OK =-0.4999 do -0,4999

    • Dobre = 0,50 do 1

    W Business Intelligence Development Studio, pięć państw w ramach zakres są następujące:

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

    • Ryzyko =-0.7499 do-0.25

    • OK =-0,2499 do 0,2499

    • Podnoszenie = 0,25 lub 0.7499

    • Dobre = 0,75 do 1

W poniższej tabela przedstawiono użycia, nazwa i numer skojarzony z obrazem Państwa.

Użycie obrazu

Nazwa obrazu

Liczba stanów

Stan

Kształty

3

Stan

Sygnalizacja świetlna

3

Stan

Znaki drogowe

3

Stan

Miernik

3

Stan

Skrajnia wyksięgowania

5

Stan

Termometr

3

Stan

Cylinder

3

Stan

Buźki

3

Stan

Odchylenie strzałki

3

Trend

Standard strzałki

3

Trend

Stan strzałki

3

Trend

Stan odwróconą strzałkę

5

Trend

Buźki

3

  1. Dodać wskaźnik KPI w module kolekcja i aktualizacji moduł, ponieważ KWW nie jest aktualizowalny obiektu.

Badania KPI wymaga zastosowania innego programu.Można przetestować KPI w Business Intelligence Development Studio.

Poniższy przykładowy kod tworzy KPI "Przychodów finansowych Zwiększaj i Perpective" folder moduł Adventure Works, zawarta 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 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 perspektywy

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

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

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

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

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

    Dodawanie moduł wymiarów (atrybuty i hierarchie), grupa miar (miara i grupa miar), akcje, kluczowych wskaźników wydajności i obliczeń.

  3. Dodaj do kolekcja moduł perspektywa i aktualizacji moduł, ponieważ perspektywa nie jest aktualizowalny obiektu.

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średnia" 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 pracownika AMO.

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

  1. Tworzenie ProactiveCaching obiektu.

    Nie ma żadnych atrybutów podstawowych do definiowania.

  2. Dodać specyfikacje pamięci podręcznej.

Specyfikacja

Opis

AggregationStorage

Typ magazynu dla agregacji.

Dotyczy tylko partycję.Na wymiar musi być Regular.

SilenceInterval

Minimalna ilość czas pamięci podręcznej istnieje przed MOLAP uruchamia imaging.

Czas oczekiwania

Czas pomiędzy najwcześniejszą powiadomienie i momentem, kiedy niszczony obrazów MOLAP.

SilenceOverrideInterval

Czas po wstępne powiadomienie po którym MOLAP imaging uruchamiane bezwarunkowo.

ForceRebuildInterval

Czas (począwszy od po przerwaniu świeżego obraz MOLAP) po MOLAP, które imaging uruchamia bezwarunkowo (żadne powiadomienia).

OnlineMode

Gdy obraz MOLAP jest dostępna.

Mogą być Immediate lub OnCacheComplete.

  1. Dodaj ProactiveCaching obiekt do kolekcja nadrzędnej.Trzeba będzie zaktualizować nadrzędnej, ponieważ ProactiveCaching nie jest aktualizowalny obiektu.

Poniższy przykładowy kod tworzy ProactiveCaching obiektu na wszystkich partycjach ze sprzedaży Internet grupa miar w module 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();
                }
            }
        }

Tłumaczenie obiektów

Tłumaczenie obiektów mogą być definiowane przez pracownika AMO, ale są używane z klient aplikacji, która przegląda dane.Tłumaczenie obiektów są prostych obiektów do kodu.Tłumaczenia dla obiektu podpisy są dostarczane przez par identyfikator ustawień regionalnych i podpis tłumaczone.Każdy podpis można włączyć wiele tłumaczenia.Tłumaczenia dostępne dla większości Usługi Analysis Services obiektów, takich jak wymiary, atrybutów, hierarchie, modułów, miara grupy miaras i inni.

Poniższy przykładowy kod zawiera Hiszpańskie tłumaczenie nazwę atrybut nazwy 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);

        }