다음을 통해 공유


큐브 뷰 표현(테이블 형식)

큐브 뷰는 클라이언트 응용 프로그램을 위해 모델을 더 작은 부분으로 간소화하거나 집중시키는 메커니즘입니다.

큐브 뷰 표현을 만들고 조작하는 방법에 대한 자세한 내용은 큐브 뷰 표현(테이블 형식)을 참조하십시오.

주의 사항주의

큐브 뷰는 보안 메커니즘이 아니므로 다른 인터페이스를 통해 큐브 뷰 밖에 있는 개체에 계속 액세스할 수 있습니다.

큐브 뷰 표현

AMO 개체를 기준으로 큐브 뷰 표현은 Perspective와 일 대 일 매핑 관계를 가지며 그 밖의 주요 AMO 개체는 필수 항목이 아닙니다.

AMO의 큐브 뷰

다음 코드 조각에서는 테이블 형식 모델에서 큐브 뷰를 만드는 방법을 보여 줍니다. 이 코드 조각의 키 요소는 perspectiveElements입니다. 이 개체는 사용자에게 노출되는 테이블 형식 모델의 모든 개체에 대한 그래픽 표현입니다. perspectiveElements는 4개의 열을 포함하며 이 시나리오에서는 열 1, 열 2 및 열 3만 관련이 있습니다. 열 1은 표시되는 요소 형식인 -elementTypeValue-를 포함합니다. 열 2는 요소의 전체 이름인 --를 포함하며 큐브 뷰에 요소를 입력하려면 이 이름을 구문 분석해야 합니다. 열 3은 확인란 항목인 -checkedElement-를 포함하며 이 항목은 요소가 큐브 뷰의 일부인지 여부를 알려줍니다.

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

AMO2Tabular 예제

그러나 AMO를 사용하여 큐브 뷰 표현을 만들고 조작하는 방법을 알아보려면 AMO to Tabular 예제의 원본 코드를 참조하십시오. 이 예제는 Codeplex에 있습니다. 코드에 대한 중요 정보: 코드는 여기에서 설명한 논리적 개념에 대한 지원으로만 제공되며 프로덕션 환경에서 사용해서는 안 됩니다. 그리고 교육 목적 이외의 목적으로는 사용할 수 없습니다.