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