큐브 뷰 표현(테이블 형식)
큐브 뷰는 클라이언트 응용 프로그램을 위해 모델을 더 작은 부분으로 간소화하거나 집중시키는 메커니즘입니다.
큐브 뷰 표현을 만들고 조작하는 방법에 대한 자세한 내용은 큐브 뷰 표현(테이블 형식)을 참조하십시오.
주의 |
---|
큐브 뷰는 보안 메커니즘이 아니므로 다른 인터페이스를 통해 큐브 뷰 밖에 있는 개체에 계속 액세스할 수 있습니다. |
큐브 뷰 표현
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에 있습니다. 코드에 대한 중요 정보: 코드는 여기에서 설명한 논리적 개념에 대한 지원으로만 제공되며 프로덕션 환경에서 사용해서는 안 됩니다. 그리고 교육 목적 이외의 목적으로는 사용할 수 없습니다.