コード例 #1
0
        public static DaxCalcProperty CreateDefaultCalculationProperty()
        {
            var rv = new DaxCalcProperty();

            rv.Format = FormatType.General;
            return(rv);
        }
コード例 #2
0
        public static MeasuresContainer CreateFromDatabase(Database database)
        {
            if (database == null)
            {
                throw new ArgumentNullException(nameof(database));
            }
            if (database.Model == null)
            {
                throw new ArgumentNullException(nameof(database.Model));
            }

            var measures = new List <DaxMeasure>();

            foreach (var table in database.Model.Tables)
            {
                foreach (var tableMeasure in table.Measures)
                {
                    var measure    = ToSystemEnding(tableMeasure);
                    var newMeasure = new DaxMeasure(measure.Name, table.Name, measure.Expression);
                    newMeasure.CalcProperty = DaxCalcProperty.CreateFromJsonMeasure(measure);

                    measures.Add(newMeasure);
                }
            }

            return(new MeasuresContainer(measures));
        }
コード例 #3
0
        public static MeasuresContainer CreateFromXmlDatabase(Microsoft.AnalysisServices.Database database)
        {
            if (database == null)
            {
                throw new ArgumentNullException(nameof(database));
            }

            var allMeasures = new List <DaxMeasure>();

            foreach (Cube cube in database.Cubes)
            {
                foreach (MdxScript script in cube.MdxScripts)
                {
                    foreach (Command command in script.Commands)
                    {
                        var measures = ParseDaxScript(command.Text);
                        foreach (var measure in measures.AllMeasures)
                        {
                            foreach (CalculationProperty property in script.CalculationProperties)
                            {
                                if (property.CalculationReference != measure.NameInBrackets)
                                {
                                    continue;
                                }

                                var kpi         = measure.CalcProperty?.KPI.Clone();
                                var newProperty = DaxCalcProperty.CreateFromXmlProperty(property);
                                measure.CalcProperty = newProperty;
                                if (newProperty.KPI != null)
                                {
                                    foreach (var annotation in newProperty.KPI.Annotations)
                                    {
                                        kpi.Annotations.Add(annotation.Clone());
                                    }
                                }
                                measure.CalcProperty.KPI = kpi;

                                allMeasures.Add(measure);
                            }
                        }
                    }
                }
            }

            return(new MeasuresContainer(allMeasures));
        }
コード例 #4
0
        public MdxScript ToMdxScript(int compatibilityLevel)
        {
            var script = new MdxScript();

            script.ID   = "MdxScript";
            script.Name = "MdxScript";

            var firstCommand = new Command();

            firstCommand.Text = compatibilityLevel < 1103 ?
                                ServerCommandProducer.CommonCommandText1100 :
                                ServerCommandProducer.CommonCommandText1103;
            script.Commands.Add(firstCommand);

            if (compatibilityLevel < 1103)
            {
                //Add all measures full text in one command
                var command = new Command();
                command.Text = ServerCommandProducer.DoNotModify1100 + string.Concat(
                    Measures.Select(i => i.FullText + ";" + Environment.NewLine)
                    );
                script.Commands.Add(command);
            }
            else
            {
                foreach (var measure in Measures)
                {
                    var command = new Command();
                    command.Text = ServerCommandProducer.DoNotModify1103;

                    if (!string.IsNullOrWhiteSpace(measure.Scope))
                    {
                        command.Text  = command.Text.TrimEnd('\r', '\n', ' ');
                        command.Text += $@"

-- MDX SCRIPT --

{measure.Scope}

-- MDX SCRIPT --


";
                    }
                    command.Text += measure.FullText + ";" + Environment.NewLine;

                    if (measure.CalcProperty?.KPI != null)
                    {
                        var goalName    = "_" + measure.Name + " Goal";
                        var goalMeasure = GetSupportMeasure(goalName);
                        if (goalMeasure != null)
                        {
                            command.Text += goalMeasure.FullText + "; " + Environment.NewLine;
                        }

                        var statusName    = "_" + measure.Name + " Status";
                        var statusMeasure = GetSupportMeasure(statusName);
                        if (statusMeasure != null)
                        {
                            command.Text += statusMeasure.FullText + Environment.NewLine + "; " + Environment.NewLine;
                        }

                        var trendName    = "_" + measure.Name + " Trend";
                        var trendMeasure = GetSupportMeasure(trendName);
                        if (trendMeasure != null)
                        {
                            command.Text += trendMeasure.FullText + Environment.NewLine + "; " + Environment.NewLine;
                        }

                        //ASSOCIATED_MEASURE_GROUP = 'DimCurrency'
                        command.Text += "CREATE KPI CURRENTCUBE." + measure.NameInBrackets +
                                        " AS Measures." + measure.NameInBrackets;
                        command.Text += ", ASSOCIATED_MEASURE_GROUP = '" + measure.TableName + "'";
                        if (goalMeasure != null)
                        {
                            command.Text += ", GOAL = Measures." + goalMeasure.NameInBrackets;
                        }
                        if (statusMeasure != null)
                        {
                            command.Text += ", STATUS = Measures." + statusMeasure.NameInBrackets;
                        }
                        if (!string.IsNullOrWhiteSpace(measure.CalcProperty.KPI.StatusGraphic))
                        {
                            command.Text += ", STATUS_GRAPHIC = " + measure.CalcProperty.KPI.StatusGraphic;
                        }
                        if (trendMeasure != null)
                        {
                            command.Text += ", TREND = Measures." + trendMeasure.NameInBrackets;
                        }
                        if (!string.IsNullOrWhiteSpace(measure.CalcProperty.KPI.TrendGraphic))
                        {
                            command.Text += ", TREND_GRAPHIC = " + measure.CalcProperty.KPI.TrendGraphic;
                        }
                        command.Text += ";" + Environment.NewLine;
                    }
                    command.Annotations.Insert(0, "FullName", measure.Name);
                    command.Annotations.Insert(1, "Table", measure.TableName);

                    script.Commands.Add(command);
                }
            }


            foreach (var measure in Measures)
            {
                var property = measure.CalcProperty != null?
                               measure.CalcProperty.ToXmlCalculationProperty(measure.NameInBrackets) :
                                   DaxCalcProperty.CreateDefaultCalculationProperty().ToXmlCalculationProperty(measure.NameInBrackets);

                script.CalculationProperties.Add(property);

                if (measure.CalcProperty?.KPI != null)
                {
                    var kpiProperties = measure.CalcProperty.GetKpiProperties(measure.Name);
                    foreach (var kpiProperty in kpiProperties)
                    {
                        script.CalculationProperties.Add(kpiProperty);
                    }
                }
            }

            var lastProperty = new CalculationProperty();

            lastProperty.CalculationReference = compatibilityLevel < 1103 ?
                                                "Measures.[__No measures defined]" :
                                                "[__XL_Count of Models]";
            lastProperty.CalculationType = CalculationType.Member;
            lastProperty.Visible         = false;
            script.CalculationProperties.Add(lastProperty);

            return(script);
        }