コード例 #1
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            //Console.WriteLine(String.Format("ConceptFilter.GetQuery( {0} ) ", currentfilter.Item));

            var factparts    = taxonomy.FactParts;
            var factsofparts = taxonomy.FactsOfParts;
            //var query = new FactBaseQuery();
            FactBaseQuery result  = null;
            var           queries = new List <FactBaseQuery>();

            if (Concepts.Count == 1)
            {
            }
            foreach (var concept in Concepts)
            {
                var query = new FactBaseQuery();
                queries.Add(query);
                var tag = concept.QName.Content;
                query.Concept = tag;
                if (!Complement)
                {
                    query.DictFilters = parent.DictFilters + String.Format("{0} ", tag);
                    if (factparts.ContainsKey(tag))
                    {
                        query.DictFilterIndexes.Add(factparts[tag]);
                    }
                }
                else
                {
                    query.FalseFilters = parent.DictFilters + String.Format("{0} ", tag);
                    if (factparts.ContainsKey(tag))
                    {
                        query.NegativeDictFilterIndexes.Add(factparts[tag]);
                    }
                }
                SetCover(query);
            }
            if (queries.Count == 1)
            {
                result = queries.FirstOrDefault();
            }
            if (queries.Count > 1)
            {
                result = new FactPoolQuery();
                foreach (var query in queries)
                {
                    result.AddChildQuery(query);
                }
            }
            return(result);
        }
コード例 #2
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            var query = new FactPoolQuery();

            query.DictFilterIndexes.AddRange(parent.DictFilterIndexes);
            foreach (var child in currentfilter.Children)
            {
                var filter = child.Item as Filter;
                if (filter != null)
                {
                    var childquery = filter.GetQuery(taxonomy, child, query);
                    query.AddChildQuery(childquery);
                }
            }
            parent.AddChildQuery(query);
            return(query);
        }
コード例 #3
0
        public override FactBaseQuery GetQuery(Taxonomy taxonomy, Hierarchy <XbrlIdentifiable> currentfilter, FactBaseQuery parent)
        {
            //Console.WriteLine(String.Format("ExplicitDimensionFilter.GetQuery( {0} ) ", currentfilter.Item));

            var _complement  = Complement;
            var factsofparts = taxonomy.FactsOfParts;
            var factparts    = taxonomy.FactParts;
            var resultquery  = new FactBaseQuery();

            //var querycontainer = parent;
            if (Members.Count == 0)
            {
                var dimkey = String.Format("{0}:{1}", this.Dimension.QName.Domain, this.Dimension.QName.Value);

                var domains     = taxonomy.DomainsofDimensions.ContainsKey(dimkey) ? taxonomy.DomainsofDimensions[dimkey] : new List <string>();
                var firstdomain = domains.FirstOrDefault();
                if (firstdomain != null)
                {
                    var members = taxonomy.GetMembersOf(firstdomain).Where(i => !i.IsDefaultMember).ToList();
                    this.Members = members.Select(i => {
                        var dm             = new DimensionMember();
                        dm.QName.Content   = i.Content;
                        dm.IsDefaultMember = i.IsDefaultMember;
                        return(dm);
                    }).ToList();
                }
            }
            var firstmemebr = Members.FirstOrDefault();
            var domaintag   = String.Format("[{0}:{1}]{2}", this.Dimension.QName.Domain, this.Dimension.QName.Value, firstmemebr.QName.Domain);
            //FactBaseQuery resultquery = new FactBaseQuery();
            var querycontainer = resultquery;
            var poolneeded     = Members.Count > 1 || (Members.Count == 1 && firstmemebr.IsDefaultMember && this.Complement);

            if (poolneeded)
            {
                querycontainer = new FactPoolQuery();
                resultquery.AddChildQuery(querycontainer);
                //resultquery.DictFilterIndexes.Add(factparts[domaintag]);

                //querycontainer = resultquery;
            }
            foreach (var member in Members)
            {
                var membertag = String.Format("[{0}:{1}]{2}", this.Dimension.QName.Domain, this.Dimension.QName.Value, member.QName.Content);
                if (!member.IsDefaultMember)
                {
                    if (!_complement)
                    {
                        if (factparts.ContainsKey(membertag))
                        {
                            var xquery = querycontainer;
                            if (xquery is FactPoolQuery)
                            {
                                var fbq = new FactBaseQuery();
                                xquery.AddChildQuery(fbq);
                                xquery = fbq;
                            }
                            xquery.DictFilterIndexes.Add(factparts[membertag]);
                        }
                    }
                    else
                    {
                        if (factparts.ContainsKey(membertag))
                        {
                            querycontainer.NegativeDictFilterIndexes.Add(factparts[membertag]);
                        }
                    }
                }
                else
                {
                    //default member
                    if (!_complement)
                    {
                        if (factparts.ContainsKey(domaintag))
                        {
                            var xquery = querycontainer;
                            if (xquery is FactPoolQuery)
                            {
                                var fbq = new FactBaseQuery();
                                xquery.AddChildQuery(fbq);
                                xquery = fbq;
                            }
                            xquery.NegativeDictFilterIndexes.Add(factparts[domaintag]);
                        }
                    }
                    else
                    {
                        //default member with complement
                        if (Members.Count == 1)
                        {
                            var tag = String.Format("[{0}:{1}]", this.Dimension.QName.Domain, this.Dimension.QName.Value);

                            var domain  = member.QName.Domain;
                            var members = taxonomy.GetMembersOf(domain, this._Members.Select(i => i.QName.Content).ToList());

                            foreach (var memberitem in members)
                            {
                                var mfbq             = new FactBaseQuery();
                                var memberdictfilter = tag + memberitem;

                                //FP if (taxonomy.FactsOfDimensions.ContainsKey(memberdictfilter))
                                var ix = taxonomy.FactParts[memberdictfilter];
                                if (taxonomy.FactsOfParts.ContainsKey(ix))
                                {
                                    mfbq.DictFilters = memberdictfilter + ", ";
                                    if (factparts.ContainsKey(memberdictfilter))
                                    {
                                        mfbq.DictFilterIndexes.Add(factparts[memberdictfilter]);
                                    }
                                    querycontainer.AddChildQuery(mfbq);
                                }
                            }
                            //return resultquery;
                        }
                        else
                        {
                            if (factparts.ContainsKey(domaintag))
                            {
                                querycontainer.DictFilterIndexes.Add(factparts[domaintag]);
                            }
                        }
                    }
                }
            }



            SetCover(resultquery);


            return(resultquery);
        }