共用方式為


導出量值表示法 (表格式)

導出量值是一種每次使用時所評估的具名 DAX 運算式,這是在導出量值根據其使用的內容而動態評估時,每次評估的其中一個優點。

導出量值表示法

導出量值是一種準備要評估的具名 DAX 運算式,也可以依據其名稱在其他 DAX 運算式中參考。

AMO 中的導出量值

當使用 AMO 管理表格式模型導出量值時,邏輯導出量值物件與 MdxScript 物件的 Command 物件中所定義的量值之間具有一對一相符關係;每一個不同的**「導出量值」**都會定義為 Command 物件內的 CREATE MEASURE 運算式而且會以分號區隔。 表格式模型中的所有導出量值都會對應到 MdxScript 物件中一個命令物件內的連接字串 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 對表格式範例的原始程式碼,特別要檢查以下的原始程式檔:AddCalculatedMeasure.cs。 您可以在 Codeplex 上取得此範例。 有關此程式碼的重要注意事項:此程式碼的提供目的只是為了支援這裡所說明的邏輯概念,不應該用於實際執行環境,也不應該用於教學以外的其他用途。