計算されるメジャー表現 (テーブル)
計算されるメジャーとは、使用されるたびに評価される名前付き DAX 式です。使用のたびに評価することの利点の 1 つは、使用されるコンテキストに応じて、計算されるメジャーが動的に評価されることです。
計算されるメジャー表現
計算されるメジャーは、すぐに評価できる名前付き DAX 式です。他の DAX 式から名前で参照することもできます。
AMO 内の計算されるメジャー
AMO を使用してテーブル モデルの計算されるメジャーを管理する場合、MdxScript オブジェクトの Command オブジェクトに定義されているメジャーと、論理的な計算されるメジャー オブジェクトが 1 対 1 で対応します。それぞれの計算されるメジャーが、Command オブジェクト内の CREATE MEASURE 式として、セミコロンで区切られて定義されます。 テーブル モデルにおける計算されるメジャーは、すべて MdxScript オブジェクト内の 1 つのコマンド オブジェクトのコレクション CREATE MEASURE 文字列に対応しています。また、計算される各メジャーは、CalculationProperty と一対一でマップされます。
次のコード スニペットは、計算されるメジャーの作成方法を示しています。
private void addCalculatedMeasure(
AMO.Cube modelCube
, string cmTableName
, string cmName
, string newCalculatedMeasureExpression
)
{
//Verify input requirements
if (string.IsNullOrEmpty(cmName) || string.IsNullOrWhiteSpace(cmName))
{
MessageBox.Show(String.Format("Calculated Measure name is not defined."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
if (string.IsNullOrEmpty(newCalculatedMeasureExpression) || string.IsNullOrWhiteSpace(newCalculatedMeasureExpression))
{
MessageBox.Show(String.Format("Calculated Measure expression is not defined."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
StringBuilder measuresCommand = new StringBuilder();
AMO.MdxScript mdxScript = modelCube.MdxScripts["MdxScript"];
//ToDo: Verify if measure already exits and ask user what wants to do next
if (mdxScript.Commands.Count == 1)
{
measuresCommand.AppendLine("-------------------------------------------------------------");
measuresCommand.AppendLine("-- Tabular Model measures command (do not modify manually) --");
measuresCommand.AppendLine("-------------------------------------------------------------");
measuresCommand.AppendLine();
measuresCommand.AppendLine();
mdxScript.Commands.Add(new AMO.Command(measuresCommand.ToString()));
}
else
{
measuresCommand.Append(mdxScript.Commands[1].Text);
}
measuresCommand.AppendLine(string.Format("CREATE MEASURE '{0}'[{1}]={2};", cmTableName, cmName, newCalculatedMeasureExpression));
mdxScript.Commands[1].Text = measuresCommand.ToString();
if (!mdxScript.CalculationProperties.Contains(cmName))
{
AMO.CalculationProperty cp = new AMO.CalculationProperty(cmName, AMO.CalculationType.Member);
cp.FormatString = ""; // ToDo: Get formatting attributes for the member
cp.Visible = true;
mdxScript.CalculationProperties.Add(cp);
}
try
{
modelCube.Update(AMO.UpdateOptions.ExpandFull, AMO.UpdateMode.UpdateOrCreate);
MessageBox.Show(String.Format("Calculated Measure successfully defined."), "AMO to Tabular message", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch (AMO.OperationException amoOpXp)
{
MessageBox.Show(String.Format("Calculated Measure 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 サンプルのソース コードを参照してください。特に、ソース ファイル "AddCalculatedMeasure.cs" の内容に注意してください。 このサンプルは、Codeplex でダウンロードできます。 このコードに関する重要な注意事項: このコードは、ここで説明する論理的概念を補足するためにのみ提供されています。運用環境では使用しないでください。教育目的以外の目的にも使用しないでください。