示例#1
0
        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);
        }