Partager via


Représentation (tabulaire) d'une perspective

Une perspective permet de simplifier ou mettre l'accent sur une plus petite partie du modèle pour l'application cliente.

Consultez Représentation (tabulaire) d'une perspective pour une explication détaillée sur la façon de créer et manipuler la représentation d'une perspective.

AttentionAttention

Les perspectives ne sont pas un mécanisme de sécurité ; les objets en dehors de la perspective sont toujours accessibles à l'utilisateur via d'autres interfaces.

Représentation d'une perspective

En termes d'objets AMO, une représentation de perspective a une relation de mappage un-à-un avec Perspective et aucun autre objet AMO principal n'est requis.

Perspective dans AMO

L'extrait de code suivant montre comment créer une perspective dans un modèle tabulaire. L'élément clé dans cet extrait de code est l'élément de perspective ; cet objet est une représentation graphique de tous les objets du modèle tabulaire accessibles à l'utilisateur. Les éléments de perspective perspectiveElements contiennent 4 colonnes et, pour ce scénario, seules les colonnes 1, 2 et 3 sont pertinentes. La colonne 1 contient le type d'élément affiché (elementTypeValue) ; la colonne 2 contient le nom complet de l'élément (--), qui devra probablement être analysé pour entrer l'élément dans la perspective ; la colonne 3 contient un élément de case à cocher (checkedElement) qui indique si l'élément fait partie ou non de la perspective.

        private void updatePerspective_Click(
                             AMO.Cube modelCube
                          ,  DataGridView perspectiveElements
                          ,  string updatedPerspectiveID
                     )
        {
            //Update is done by delete first, create new and insert after
            //if perspective doesn't exist then create first and insert after
            updatedPerspectiveID = updatedPerspectiveID.Trim();
            if (modelCube.Perspectives.Contains(updatedPerspectiveID))
            {
                modelCube.Perspectives.Remove(updatedPerspectiveID, true);
                newDatabase.Update(AMO.UpdateOptions.ExpandFull, AMO.UpdateMode.UpdateOrCreate);
            }
            AMO.Perspective currentPerspective = modelCube.Perspectives.Add(updatedPerspectiveID, updatedPerspectiveID);

            foreach (DataGridViewRow currentDGVRow in perspectiveElements.Rows)
            {
                bool checkedElement = (bool)currentDGVRow.Cells[3].Value;
                if (checkedElement)
                {
                    string elementTypeValue = currentDGVRow.Cells[1].Value.ToString();
                    string elementNameValue = currentDGVRow.Cells[2].Value.ToString();
                    switch (elementTypeValue)
                    {
                        case "Column: Attribute":
                        case "Column: Calculated Column":
                            {
                                string perspectiveDimensionName = Regex.Match(elementNameValue, @"(?<=')(.*?)(?=')").ToString();
                                string perspectiveDimensionAttributeName = Regex.Match(elementNameValue, @"(?<=\[)(.*?)(?=\])").ToString();
                                AMO.PerspectiveDimension currentPerspectiveDimension;
                                if (!currentPerspective.Dimensions.Contains(perspectiveDimensionName))
                                {
                                    currentPerspectiveDimension = currentPerspective.Dimensions.Add(perspectiveDimensionName);
                                }
                                else
                                {
                                    currentPerspectiveDimension = currentPerspective.Dimensions[perspectiveDimensionName];
                                }
                                if (!currentPerspectiveDimension.Attributes.Contains(perspectiveDimensionAttributeName))
                                {
                                    currentPerspectiveDimension.Attributes.Add(perspectiveDimensionAttributeName);
                                }
                            }
                            break;
                        case "Hierarchy":
                            {
                                string perspectiveDimensionName = Regex.Match(elementNameValue, @"(?<=')(.*?)(?=')").ToString();
                                string perspectiveDimensionHierarchyName = Regex.Match(elementNameValue, @"(?<=\[)(.*?)(?=\])").ToString();
                                AMO.PerspectiveDimension currentPerspectiveDimension;
                                if (!currentPerspective.Dimensions.Contains(perspectiveDimensionName))
                                {
                                    currentPerspectiveDimension = currentPerspective.Dimensions.Add(perspectiveDimensionName);
                                }
                                else
                                {
                                    currentPerspectiveDimension = currentPerspective.Dimensions[perspectiveDimensionName];
                                }
                                if (!currentPerspectiveDimension.Hierarchies.Contains(perspectiveDimensionHierarchyName))
                                {
                                    currentPerspectiveDimension.Hierarchies.Add(perspectiveDimensionHierarchyName);
                                }
                            }
                            break;
                        case "Measure":
                            {
                                string perspectiveMeasureGroupName = Regex.Match(elementNameValue, @"(?<=')(.*?)(?=')").ToString();
                                string measureName = Regex.Match(elementNameValue, @"(?<=\[)(.*?)(?=\])").ToString();
                                string perspectiveMeasureName = string.Format("[Measures].[{0}]", measureName);
                                AMO.PerspectiveCalculation currentPerspectiveCalculation = new AMO.PerspectiveCalculation(perspectiveMeasureName, AMO.PerspectiveCalculationType.Member);
                                if (!currentPerspective.Calculations.Contains(perspectiveMeasureName))
                                {
                                    currentPerspective.Calculations.Add(currentPerspectiveCalculation);
                                }
                                if (modelCube.MdxScripts["MdxScript"].CalculationProperties.Contains(string.Format("KPIs.[{0}]", measureName)))
                                {//Current Measure is also a KPI ==> will be added to the KPIs collection of the perspective
                                    AMO.PerspectiveKpi currentPerspectiveKpi = new AMO.PerspectiveKpi(perspectiveMeasureName);
                                    if (!currentPerspective.Kpis.Contains(perspectiveMeasureName))
                                    {
                                        currentPerspective.Kpis.Add(currentPerspectiveKpi);
                                    }
                                }
                            }
                            break;
                        default:
                            break;
                    }
                }
            }

            newDatabase.Update(AMO.UpdateOptions.ExpandFull, AMO.UpdateMode.CreateOrReplace);
            MessageBox.Show(String.Format("Perpective successfully updated."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }

Exemple AMO2Tabular

Toutefois, pour connaître la façon d'utiliser AMO pour créer et manipuler des représentations de perspective consultez le code source de l'exemple Objets AMO vers objets tabulaires. L'exemple est disponible sur Codeplex. Remarque importante à propos du code : le code est fourni uniquement comme un support aux concepts logiques expliqués ici et ne doit pas être utilisé dans un environnement de production, ni à des fins autres que pédagogiques.