public static DaxCalcProperty CreateDefaultCalculationProperty() { var rv = new DaxCalcProperty(); rv.Format = FormatType.General; return(rv); }
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)); }
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)); }
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); }