계산 열 표현(테이블 형식)
계산 열은 테이블에 새 열을 만드는 DAX 식이며 구해진 값이 테이블에 저장됩니다. 테이블이 처리될 때마다 계산 열 식이 계산됩니다.
계산 열 표현
테이블 형식 개체 모델에서 계산 열은 열의 정의에 따라 식에서 값이 계산되는 테이블의 열입니다.
AMO의 계산 열
AMO를 사용하여 테이블 형식 모델 테이블을 관리하는 경우 AMO의 계산 열에 대해 일 대 일 개체 일치가 없습니다. AMO의 계산 열은 Dimension의 특성 및 MeasureGroup의 특성으로 표현됩니다.
다음 코드 조각에서는 계산 열을 기존 테이블 형식 모델에 추가하는 방법을 보여 줍니다. 이 코드에서는 AMO 데이터베이스 개체인 newDatabase 및 AMO 큐브 개체인 modelCube를 보유하고 있다고 가정합니다.
private void addCalculatedColumn(
AMO.Database newDatabase
, AMO.Cube modelCube
, String ccTableName
, String ccName
, String newCalculatedColumnExpression
)
{
if (string.IsNullOrEmpty(ccName) || string.IsNullOrWhiteSpace(ccName))
{
MessageBox.Show(String.Format("Calculated Column name is not defined."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (string.IsNullOrEmpty(newCalculatedColumnExpression) || string.IsNullOrWhiteSpace(newCalculatedColumnExpression))
{
MessageBox.Show(String.Format("Calculated Column expression is not defined."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (newDatabase.Dimensions[ccTableName].Attributes.Contains(ccName))
{
MessageBox.Show(String.Format("Calculated Column name already defined."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
//Add CC attribute to the Dimension
AMO.Dimension dim = newDatabase.Dimensions[ccTableName];
AMO.DimensionAttribute currentAttribute = dim.Attributes.Add(ccName, ccName);
currentAttribute.Usage = AMO.AttributeUsage.Regular;
currentAttribute.KeyUniquenessGuarantee = false;
currentAttribute.KeyColumns.Add(new AMO.DataItem(ccTableName, ccName, OleDbType.Empty));
currentAttribute.KeyColumns[0].Source = new AMO.ExpressionBinding(newCalculatedColumnExpression);
currentAttribute.KeyColumns[0].NullProcessing = AMO.NullProcessing.Preserve;
currentAttribute.NameColumn = new AMO.DataItem(ccTableName, ccName, System.Data.OleDb.OleDbType.WChar);
currentAttribute.NameColumn.Source = new AMO.ExpressionBinding(newCalculatedColumnExpression);
currentAttribute.NameColumn.NullProcessing = AMO.NullProcessing.ZeroOrBlank;
currentAttribute.OrderBy = AMO.OrderBy.Key;
AMO.AttributeRelationship currentAttributeRelationship = dim.Attributes["RowNumber"].AttributeRelationships.Add(currentAttribute.ID);
currentAttributeRelationship.Cardinality = AMO.Cardinality.Many;
currentAttributeRelationship.OverrideBehavior = AMO.OverrideBehavior.None;
//Add CC as attribute to the MG
AMO.MeasureGroup mg = modelCube.MeasureGroups[ccTableName];
AMO.DegenerateMeasureGroupDimension currentMGDim = (AMO.DegenerateMeasureGroupDimension)mg.Dimensions[ccTableName];
AMO.MeasureGroupAttribute mga = new AMO.MeasureGroupAttribute(ccName);
mga.KeyColumns.Add(new AMO.DataItem(ccTableName, ccName, OleDbType.Empty));
mga.KeyColumns[0].Source = new AMO.ExpressionBinding(newCalculatedColumnExpression);
currentMGDim.Attributes.Add(mga);
try
{
//Update Dimension, CubeDimension and MG in server
newDatabase.Update(AMO.UpdateOptions.ExpandFull, AMO.UpdateMode.UpdateOrCreate);
}
catch (AMO.OperationException amoOpXp)
{
MessageBox.Show(String.Format("Calculated Column expression contains syntax errors, or references undefined or missspelled elements.\nError message: {0}", amoOpXp.Message), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
catch (AMO.AmoException amoXp)
{
MessageBox.Show(String.Format("AMO exception accessing the server.\nError message: {0}", amoXp.Message), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Warning);
return;
}
catch (Exception)
{
throw;
}
}
AMO2Tabular 예제
AMO를 사용하여 계산 열 표현을 만들고 조작하는 방법을 알아보려면 AMO to Tabular 예제의 원본 코드를 참조하십시오. 특히, AddCalculatedColumn.cs 원본 파일을 확인해 보십시오. 이 예제는 Codeplex에 있습니다. 코드에 대한 중요 정보: 코드는 여기에서 설명한 논리적 개념에 대한 지원으로만 제공되며 프로덕션 환경에서 사용해서는 안 됩니다. 그리고 교육 목적 이외의 목적으로는 사용할 수 없습니다.