public String GenerateFromSet(String cubeName, String subCube)
        {
            String from_Set = String.Empty;

            if (String.IsNullOrEmpty(subCube))
            {
                from_Set = OlapHelper.ConvertToQueryStyle(cubeName);
            }
            else
            {
                from_Set = OlapHelper.ConvertSubCubeToQueryStyle(subCube);
            }
            return(from_Set);
        }
        String BuildGetMembers()
        {
            StringBuilder builder = new StringBuilder();
            if (m_CurrentTupleItem != null && m_DevileryModeCombo.Combo.SelectedIndex >= 0)
            {
                builder.Append("SELECT TOPCOUNT({");

                if (m_DevileryModeCombo.Combo.SelectedIndex == 0)
                {
                    // Запросить дочерние
                    builder.AppendFormat("{0}.Children - {0}.DataMember", m_CurrentTupleItem.UniqueName);
                }
                if (m_DevileryModeCombo.Combo.SelectedIndex == 1)
                {
                    // Запросить соседние
                    builder.AppendFormat("{0}.Siblings - {0}", m_CurrentTupleItem.UniqueName);
                }
                if (m_DevileryModeCombo.Combo.SelectedIndex == 2)
                {
                    // Запросить выбранные
                    builder.AppendFormat("{0}", m_MembersChoice.SelectedSet);
                }

                builder.Append("}, 1000)");
                builder.AppendFormat(" on 0 FROM {0} ", OlapHelper.ConvertToQueryStyle(CubeName));

                // Условие WHERE
                String where = String.Empty;
                IDictionary<String, MemberInfo> tuple = m_Cell.GetTuple();
                foreach (MemberInfo member in tuple.Values)
                {
                    if (member.UniqueName != m_CurrentTupleItem.UniqueName)
                    {
                        if (!String.IsNullOrEmpty(where))
                        {
                            where = where + ", ";
                        }
                        where = where + member.UniqueName;
                    }
                }
                if (!String.IsNullOrEmpty(where))
                {
                    builder.AppendFormat("WHERE ({0})", where);
                }
                // дочерние select {[Персона].[Персонал].&[0x806600000000024F].Children - [Персона].[Персонал].&[0x806600000000024F].DataMember} on 0 from [Бюджет] where ([Сценарий].[Сценарии].&[План], [Период].[ГКМ].[Год].&[2008], [Measures].[Сумма], [Статья].[Статьи].&[и_Ресурсы_Загрузка], [ЦФО].[Менеджмент].&[У-5], [Контрагент].[Контрагенты].[Все контрагенты], [Проект].[Проекты].[Все проекты], [Договор].[Договоры].[Все договоры], [Подразделение].[Подразделения].[Все подразделения], [Номенклатура].[Вид-Группа-Номенклатура].[Вся номенклатура], [Бизнес-процесс].[Бизнес-процессы].[Все бизнес-процессы], [Вид Деятельности].[Вид-Группа-Деятельность].[Вид].&[Технологические работы])
                // соседние select {[Персона].[Персонал].&[0x806600000000019E].Siblings - [Персона].[Персонал].&[0x806600000000019E]} on 0  from [Бюджет] where ([Сценарий].[Сценарии].&[План], [Период].[ГКМ].[Год].&[2008], [Measures].[Сумма], [Статья].[Статьи].&[и_Ресурсы_Загрузка], [ЦФО].[Менеджмент].&[У-5], [Контрагент].[Контрагенты].[Все контрагенты], [Проект].[Проекты].[Все проекты], [Договор].[Договоры].[Все договоры], [Подразделение].[Подразделения].[Все подразделения], [Номенклатура].[Вид-Группа-Номенклатура].[Вся номенклатура], [Бизнес-процесс].[Бизнес-процессы].[Все бизнес-процессы], [Вид Деятельности].[Вид-Группа-Деятельность].[Вид].&[Технологические работы])
            }
            return builder.ToString();
        }
        public MemberDataWrapper GetMember(String cubeName, String memberUniqueName, List <LevelPropertyInfo> memberProperties)
        {
            StringBuilder builder = new StringBuilder();
            StringBuilder members = new StringBuilder();

            members.Append("{");
            if (memberProperties != null && memberProperties.Count > 0)
            {
                // Формируем строку WITH MEMBER
                builder.Append("WITH ");
                int           i = 0;
                List <String> used_properties = new List <String>();
                foreach (LevelPropertyInfo prop in memberProperties)
                {
                    if (!used_properties.Contains(prop.Name))
                    {
                        String memberName = String.Format("[Measures].[-{0}-]", prop.Name);
                        if (i > 0)
                        {
                            members.Append(", ");
                        }
                        members.Append(memberName);

                        builder.AppendFormat("MEMBER {0} AS {1} ", memberName, String.Format("'{0}.Level.Hierarchy.CurrentMember.Properties(\"{1}\", TYPED)'", memberUniqueName, prop.Name));
                        i++;
                        used_properties.Add(prop.Name);
                    }
                }
            }
            members.Append("}");

            // Select
            builder.AppendFormat("Select {0} on 0, {1} on 1 from {2}", memberUniqueName, members, OlapHelper.ConvertToQueryStyle(cubeName));

            CellSetData cs_descr          = GetDescription(builder.ToString());
            List <MemberDataWrapper> list = GetMembers(cs_descr);

            if (list != null && list.Count > 0)
            {
                return(list[0]);
            }
            return(null);
        }