public Set GetFunctionalDepartmentSetByUser() { SetBuilder sb = new SetBuilder(); try { DataSet dsUsersFunctionalDepartments = GetGACSFunctionDepartmentsByUser(); if (dsUsersFunctionalDepartments.Tables.Count == 1) // if the dataset is populated with one datatable (which should be the case) { DataTable dtUsersFunctionalDepartments = dsUsersFunctionalDepartments.Tables[0]; foreach (DataRow row in dtUsersFunctionalDepartments.Rows) // loop through each functional department returned by GACS { MemberCollection members = Context.CurrentCube.Dimensions["Functional Department"].Hierarchies["Functional Department"].Levels[1].GetMembers(); // Context.CurrentCube.Dimensions["Functional Department"].AttributeHierarchies["FunctionalDepartmentHierarchy"].Levels["FunctionalDepartment"].GetMembers(); foreach (Member m in members) // foreach functional department returned by the cube { if (String.Compare(row[0].ToString(), m.Name, true) == 0) // if CUBE.FunctionalDepartmentName = GACS.FunctionalDepartmentName { TupleBuilder tb = new TupleBuilder(); tb.Add(new Expression(string.Format(m.UniqueName)).CalculateMdxObject(null).ToMember()); sb.Add(tb.ToTuple()); } } } } } catch (Exception e) { // because sb is outside the scope of the try statement, in the event of an exception an empty set should be returned, i.e.: no access to any functional departments } return sb.ToSet(); }
public Set GetFunctionalDepartmentSetByUser() { SetBuilder sb = new SetBuilder(); try { DataSet dsUsersFunctionalDepartments = GetGACSFunctionDepartmentsByUser(); if (dsUsersFunctionalDepartments.Tables.Count == 1) // if the dataset is populated with one datatable (which should be the case) { DataTable dtUsersFunctionalDepartments = dsUsersFunctionalDepartments.Tables[0]; foreach (DataRow row in dtUsersFunctionalDepartments.Rows) // loop through each functional department returned by GACS { MemberCollection members = Context.CurrentCube.Dimensions["Functional Department"].Hierarchies["Functional Department"].Levels[1].GetMembers(); // Context.CurrentCube.Dimensions["Functional Department"].AttributeHierarchies["FunctionalDepartmentHierarchy"].Levels["FunctionalDepartment"].GetMembers(); foreach (Member m in members) // foreach functional department returned by the cube { if (String.Compare(row[0].ToString(), m.Name, true) == 0) // if CUBE.FunctionalDepartmentName = GACS.FunctionalDepartmentName { TupleBuilder tb = new TupleBuilder(); tb.Add(new Expression(string.Format(m.UniqueName)).CalculateMdxObject(null).ToMember()); sb.Add(tb.ToTuple()); } } } } } catch (Exception e) { // because sb is outside the scope of the try statement, in the event of an exception an empty set should be returned, i.e.: no access to any functional departments } return(sb.ToSet()); }
public Set AsymmetricDrillDown(Set InputSet, int TupleIndex, int HierarchyIndex) { int cHier = InputSet.Hierarchies.Count; if (HierarchyIndex >= cHier) { throw new System.ArgumentOutOfRangeException("Specified hierarchy index is out of range"); } SetBuilder sb = new SetBuilder(); int i = 0; foreach (Tuple t in InputSet.Tuples) { sb.Add(t); if (i == TupleIndex) { Member m = t.Members[HierarchyIndex]; foreach (Member child in m.GetChildren()) { TupleBuilder tb = new TupleBuilder(); for (int iHier = 0; iHier < cHier; iHier++) { if (iHier != HierarchyIndex) { tb.Add(t.Members[iHier]); } else { tb.Add(child); } } sb.Add(tb.ToTuple()); } } i++; } return(sb.ToSet()); }
public Set InverseHierarchility(Set InputSet) { int c = InputSet.Hierarchies.Count; if (c < 2) { return(InputSet); } SetBuilder sb = new SetBuilder(); foreach (Tuple t in InputSet.Tuples) { TupleBuilder tb = new TupleBuilder(); for (int i = c - 1; i >= 0; i--) { tb.Add(t.Members[i]); } sb.Add(tb.ToTuple()); } return(sb.ToSet()); }
private static Set buildAsymmetricSet(params Member[] memberList) { Context.TraceEvent(100, 0, "AsymmetricSet: Starting"); // build a list of all the unique Hierarchies from the members in memberList. List<Hierarchy> hierList = new List<Hierarchy>(); foreach (Member m in memberList) { // Check that the member variable is correctly populated. If the user passes // in a non-existant member we get a member object whose properties are all // null or empty strings. if (m.UniqueName.Length > 0) { if (!hierList.Exists(delegate(Hierarchy h) { if (h.UniqueName == m.ParentLevel.ParentHierarchy.UniqueName) return true; else return false; })) hierList.Add(m.ParentLevel.ParentHierarchy); } } // SetBuilder & TupleBuilder are IDisposeable so we ensure they // are disposed by utilizing a using block. using (SetBuilder asymSet = new SetBuilder()) { foreach (Member paramMbr in memberList) { if (paramMbr.UniqueName.Length > 0) { // create a tuple for each member that was passed in, // combined with the default member from the other hierarchies. using (TupleBuilder tb = new TupleBuilder()) { foreach (Hierarchy h in hierList) // for each unique hierarchy { Hierarchy paramHier = paramMbr.ParentLevel.ParentHierarchy; if (paramHier.UniqueName == h.UniqueName) { //System.Diagnostics.Trace.WriteLine("Adding member " + paramMbr.UniqueName); tb.Add(paramMbr); } else { Member defMbr = MDX.StrToSet(h.DefaultMember).Tuples[0].Members[0]; //System.Diagnostics.Trace.WriteLine("Adding default member " + defMbr.UniqueName); tb.Add(defMbr); } } Tuple t = tb.ToTuple(); // if the members added to the TupleBuilder will result in a non-existant tuple // (eg. [Calendar Quarter 1] and [December]) the ToTuple method returns a Tuple // containing 0 members. If such a tuple is added to the SetBuilder, the // SetBuilder.ToSet will throw an exception if (t.Members.Count > 0) { asymSet.Add(tb.ToTuple()); } }// using tb } } //foreach paramMbr Context.TraceEvent(100, asymSet.Count, "AsymmetricSet: Finished (" + asymSet.Count.ToString() + " tuples generated)"); return asymSet.ToSet(); } //using SetBuilder }
private static Set buildAsymmetricSet(params Member[] memberList) { Context.TraceEvent(100, 0, "AsymmetricSet: Starting"); // build a list of all the unique Hierarchies from the members in memberList. List <Hierarchy> hierList = new List <Hierarchy>(); foreach (Member m in memberList) { // Check that the member variable is correctly populated. If the user passes // in a non-existant member we get a member object whose properties are all // null or empty strings. if (m.UniqueName.Length > 0) { if (!hierList.Exists(delegate(Hierarchy h) { if (h.UniqueName == m.ParentLevel.ParentHierarchy.UniqueName) { return(true); } else { return(false); } })) { hierList.Add(m.ParentLevel.ParentHierarchy); } } } // SetBuilder & TupleBuilder are IDisposeable so we ensure they // are disposed by utilizing a using block. using (SetBuilder asymSet = new SetBuilder()) { foreach (Member paramMbr in memberList) { if (paramMbr.UniqueName.Length > 0) { // create a tuple for each member that was passed in, // combined with the default member from the other hierarchies. using (TupleBuilder tb = new TupleBuilder()) { foreach (Hierarchy h in hierList) // for each unique hierarchy { Hierarchy paramHier = paramMbr.ParentLevel.ParentHierarchy; if (paramHier.UniqueName == h.UniqueName) { //System.Diagnostics.Trace.WriteLine("Adding member " + paramMbr.UniqueName); tb.Add(paramMbr); } else { Member defMbr = MDX.StrToSet(h.DefaultMember).Tuples[0].Members[0]; //System.Diagnostics.Trace.WriteLine("Adding default member " + defMbr.UniqueName); tb.Add(defMbr); } } Tuple t = tb.ToTuple(); // if the members added to the TupleBuilder will result in a non-existant tuple // (eg. [Calendar Quarter 1] and [December]) the ToTuple method returns a Tuple // containing 0 members. If such a tuple is added to the SetBuilder, the // SetBuilder.ToSet will throw an exception if (t.Members.Count > 0) { asymSet.Add(tb.ToTuple()); } } // using tb } } //foreach paramMbr Context.TraceEvent(100, asymSet.Count, "AsymmetricSet: Finished (" + asymSet.Count.ToString() + " tuples generated)"); return(asymSet.ToSet()); } //using SetBuilder }