/// <summary>
        /// Переводит элементы иерархии memberInfoHierarchy, перечисленные в SelectionInfo и находящиеся там в состоянии stateInDictionary, в состояние newState 
        /// </summary>
        /// <param name="memberInfoHierarchy">Иерархия элементов</param>
        /// <param name="SelectionInfo">Коллекция элементов, которые моут быть переведены</param>
        /// <param name="stateInDictionary">Состояние в коллекции, которое подлежит переводу в новое</param>
        /// <param name="newState">Новое состояние элементов</param>
        private void SetMembersInfoToNewState(RootOlapMemberInfo memberInfoHierarchy, List<MemberChoiceSettings> selectionInfo, SelectStates stateInDictionary, SelectStates newState)
        {
            if (selectionInfo != null)
            {
                foreach (MemberChoiceSettings si in selectionInfo)
                {
                    if (!String.IsNullOrEmpty(si.UniqueName) && si.SelectState == stateInDictionary)
                    {
                        OlapMemberInfo memberInfo = memberInfoHierarchy.FindMember(si.UniqueName);

                        //Если элемент найден, то переводим в новое состояние
                        if (memberInfo != null)
                        {
                            memberInfo.SetNewState(newState);
                        }
                    }
                }
            }
        }
        /// <summary>
        /// Формирует OlapMemberInfoCollection для указанного Set с учетом иерархии
        /// </summary>
        /// <param name="Set">Set</param>
        private RootOlapMemberInfo BuildHierarсhyBySelection()
        {
            //Задача:
            //Получить элементы, входящие в Set и сформировать иерархию с учетом родителей
            //Например: База - FoodMart 2000, Куб - Sales, Измерение - [Customers]
            //	Set: {[Customers].[Mexico].Children,  [Customers].[USA].Children} - все штаты Мексики и США
            //	Сформированная иерархия должна включать в себя: 
            //		All Customers
            //			Mexico
            //				<штаты Мексики>
            //			США
            //				<штаты США>
            //
            //
            //Алгоритм решения:
            //1. Выполняем запрос, который ворзвращает всех предков элементов Set, не попавших в сам Set
            //2. Строим иерархию предков, не попавших в Set (результат из п.1)
            //3. Выполняем запрос, который ворзвращает элементы Set
            //4. Добавляем в иерархию элементы Set и у станавливаем их в нужное состояние
            //	

            RootOlapMemberInfo memberInfoHierarchy = new RootOlapMemberInfo(MemberData.Empty);
            memberInfoHierarchy.HierarchyStateChanged += new OlapMemberInfo.StateChangedEventHandler(OlapMemberInfoHierarchy_HierarchyStateChanged);

            if (SelectedInfo.Count == 0)
            {
                if (!LoadSetWithAscendants(m_SelectedSet))
                {
                    //GetRootMembersCount();
                    Load();
                }
                return memberInfoHierarchy;
            }


            //Формируем Set из элементов
            string Set = String.Empty;

            foreach (MemberChoiceSettings si in SelectedInfo)
            {
                if (!String.IsNullOrEmpty(si.UniqueName))
                {
                    if (!String.IsNullOrEmpty(Set))
                        Set += ",";
                    Set += si.UniqueName;
                }
            }

            if (String.IsNullOrEmpty(Set))
            {
//                GetRootMembersCount();
                Load();
                return memberInfoHierarchy;
            }

            Set = "{" + Set + "}";

            if (!LoadSetWithAscendants(Set))
            {
                Load();
                //GetRootMembersCount();
            }

            return memberInfoHierarchy;
        }