Compartir a través de


Representación de perspectiva (tabular)

Una perspectiva es un mecanismo para simplificar o centrar el modelo en una parte menor de él para la aplicación cliente.

Vea Representación de perspectiva (tabular) para obtener una explicación detallada acerca de cómo crear y manipular la representación de la perspectiva.

Nota de advertenciaAdvertencia

Las perspectivas no son un mecanismo de seguridad. Se podrá tener acceso a los objetos que están fuera de la perspectiva mediante otras interfaces.

Representación de perspectiva

Por lo que respecta a los objetos de AMO, las representaciones de perspectivas tienen una relación de asignación uno a uno con Perspective y no se necesitan otros objetos principales de AMO.

Perspectiva de AMO

En el fragmento de código siguiente se muestra cómo se crea una perspectiva en un modelo tabular. El elemento clave de este fragmento de código es perspectiveElements. Este objeto es una representación gráfica de todos los objetos del modelo tabular que se exponen al usuario. perspectiveElements contiene cuatro columnas, pero en este escenario solo son relevantes las columnas 1, 2 y 3. La columna 1 contiene el tipo de elemento mostrado - elementTypeValue-; la columna 2 contiene el nombre completo del elemento --, que probablemente tendrá que analizarse para poder incorporar el elemento en la perspectiva; la columna 3 contiene un elemento de casilla - checkedElement-, que indica si el elemento forma parte de la perspectiva o no.

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

Ejemplo AMO2Tabular

Sin embargo, para saber cómo usar AMO para crear y manipular representaciones de perspectiva vea el código fuente del ejemplo AMO a tabular. El ejemplo está disponible en Codeplex. Nota importante sobre el código: el código se proporciona solo como apoyo de los conceptos lógicos explicados aquí y no debe utilizarse en un entorno de producción; no debe usarse para otros fines excepto el pedagógico.