// This function looks for the master measure most similar to MeasureName public QSMasterItem GetMasterMeasure(string MeasureName) { // Look for a measure in the app master measures, and return the name used in the app QSMasterItem meas = MasterMeasures.Find(m => m.Name.ToLower().Trim() == MeasureName.ToLower().Trim()); if (meas == null) { // If not an exact match, try to find a master measure that contains the measure searched meas = MasterMeasures.Find(m => m.Name.ToLower().Trim().Contains(MeasureName.ToLower().Trim())); } if (meas == null) { // Search based on similarity, using the Levenshteing algorithm, from the NinjaNye.SearchExtensions library var result = MasterMeasures.LevenshteinDistanceOf(m => m.Name) .ComparedTo(MeasureName) .OrderBy(m => m.Distance); if (result.Count() > 0) { meas = (QSMasterItem)result.First().Item; } } if (meas != null) { // Evaluate and return the master measure expression LastMeasure = meas; return(meas); } else { return(null); } }
public QSMasterItem GetMasterDimensions(string DimensionName) { // Look for a dimension in the app master dimensions, and return the name used in the app QSMasterItem dim = MasterDimensions.Find(m => m.Name.ToLower().Trim() == DimensionName.ToLower().Trim()); if (dim == null) { // If not an exact match, try to find a master dimension that contains the dimension searched dim = MasterDimensions.Find(m => m.Name.ToLower().Trim().Contains(DimensionName.ToLower().Trim())); } if (dim == null) { // Search based on similarity, using the Levenshteing algorithm, from the NinjaNye.SearchExtensions library var result = MasterDimensions.LevenshteinDistanceOf(m => m.Name) .ComparedTo(DimensionName) .OrderBy(m => m.Distance); if (result.Count() > 0) { dim = (QSMasterItem)result.First().Item; } } if (dim != null) { // Evaluate and return the master dimension expression LastDimension = dim; return(dim); } else { return(null); } }
public string PrepareMasterVisualizationDirectLink(QSMasterItem vis) { //single/?appid=62905416-3e48-4267-aafe-797014fe2675&obj=dcksUYY&opt=nointeraction string url = qsSingleServer + "/single/?appid=" + qsSingleApp + "&obj=" + vis.Id + "&opt=nointeraction"; return(url); }
public string GetMeasureFormattedValue(string MeasureName, ref string FoundMeasure) { // Same as GetExpressionFormattedValue(), but for a specific Master Measure QSMasterItem Measure = GetMasterMeasure(MeasureName); if (Measure == null) { return(MeasureName + " has not been found in Measures"); } else { FoundMeasure = Measure.Name; return(Measure.FormattedExpression); // Get the total value directly from the Measure object } }
private void QSReadMasterItems() { // Get all the Master Visualizations MasterVisualizations.Clear(); try { var allMasterObjects = qsApp.GetMasterObjectList().Items?.Select(item => qsApp.GetObject <MasterObject>(item.Info.Id)); foreach (IMasterObject mo in allMasterObjects) { QSMasterItem mi = new QSMasterItem(); var properties = mo.Properties; mi.Id = properties.Info.Id; mi.Name = properties.MetaDef.Title; mi.Tags = mo.MetaAttributes.Tags; MasterVisualizations.Add(mi); } } catch (Exception e) { Console.WriteLine("QSEasy Error in QSReadMasterItems: {0} Exception caught.", e); } // Get all the Master Measures MasterMeasures.Clear(); try { // Get all the Master Measures var allMeasures = qsApp.GetMeasureList().Items; foreach (IMeasureObjectViewListContainer mm in allMeasures) { QSMasterItem mi = new QSMasterItem(); INxLibraryMeasureDef md = qsApp.GetMeasure(mm.Info.Id).NxLibraryMeasureDef; mi.Id = mm.Info.Id; mi.Name = md.Label; mi.Expression = md.Def; // In FormattedExpression I get the total value already calculated mi.FormattedExpression = GetExpressionFormattedValue(Expression: mi.Expression, Label: mi.Name); MasterMeasures.Add(mi); } LastMeasure = MasterMeasures.Count > 0 ? MasterMeasures.First() : null; } catch (Exception e) { Console.WriteLine("QSEasy Error in QSReadMasterItems: {0} Exception caught.", e); } // Get all the Master Dimensions MasterDimensions.Clear(); try { // Get all the Master Dimensions var allDimensions = qsApp.GetDimensionList().Items; foreach (DimensionObjectViewListContainer md in allDimensions) { if (md.Data.Grouping == NxGrpType.GRP_NX_NONE) // This is to avoid drill-down dimensions, I only use single dimensions { QSMasterItem mi = new QSMasterItem(); INxLibraryDimensionDef dd = qsApp.GetDimension(md.Info.Id).NxLibraryDimensionDef; mi.Id = md.Info.Id; mi.Name = md.Data.Title; mi.Expression = dd.FieldDefs.First(); MasterDimensions.Add(mi); } } LastDimension = MasterDimensions.Count > 0 ? MasterDimensions.First() : null; } catch (Exception e) { Console.WriteLine("QSEasy Error in QSReadMasterItems: {0} Exception caught.", e); } }