public static CreateDatasetRequest GetDataset( string datasetName, TabModel.TableCollection tables, TabModel.RelationshipCollection relationships, Action <TabModel.Measure> unsupportedMeasureAction, Action <TabModel.Relationship> unsupportedRelationshipAction ) { List <TabModel.Measure> allMeasures = tables.SelectMany(t => t.Measures).Select(m => m).ToList(); if (!CheckUnsupportedMeasures(allMeasures, out List <TabModel.Measure> unsupportedMeasures, out List <TabModel.Measure> supportedMeasures)) { // Diagnostic - list of unsupported measures foreach (var m in unsupportedMeasures) { unsupportedMeasureAction?.Invoke(m); } } var datasetSchema = new CreateDatasetRequest { Name = datasetName, Tables = new List <Table>(), Relationships = new List <Relationship>() }; foreach (var t in tables) { datasetSchema.Tables.Add(GetTable(t, unsupportedMeasures)); } foreach (var r in relationships) { bool addedRelationship = false; if ((r is TabModel.SingleColumnRelationship sr) && sr.IsActive && (sr.FromCardinality != sr.ToCardinality)) { if (r != null) { var pushRelationship = new Relationship { Name = sr.Name, FromTable = sr.FromTable.Name, FromColumn = sr.FromColumn.Name, ToTable = sr.ToTable.Name, ToColumn = sr.ToColumn.Name, CrossFilteringBehavior = r.CrossFilteringBehavior == TabModel.CrossFilteringBehavior.OneDirection ? CrossFilteringBehavior.OneDirection : r.CrossFilteringBehavior == TabModel.CrossFilteringBehavior.BothDirections ? CrossFilteringBehavior.BothDirections : r.CrossFilteringBehavior == TabModel.CrossFilteringBehavior.Automatic ? CrossFilteringBehavior.Automatic : null }; datasetSchema.Relationships.Add(pushRelationship); addedRelationship = true; } } if (!addedRelationship) { unsupportedRelationshipAction?.Invoke(r); } } return(datasetSchema); }