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); }
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); }
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); }