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 String BuildDrillThrough(CellInfo cell)
        {
            String result = String.Empty;

            if (cell != null)
            {
                //var tuple = new Dictionary<String, MemberInfo>();
                //if (cell.ColumnMember != null && cell.ColumnMember != MemberInfo.Empty)
                //{
                //    cell.ColumnMember.CollectAncestors(tuple);
                //}
                //if (cell.RowMember != null && cell.RowMember != MemberInfo.Empty)
                //{
                //    cell.RowMember.CollectAncestors(tuple);
                //}

                //var statement = GetMoveAxesStatement(RefreshQuery());
                var statement = this.CreateWrappedStatement();
                var tuple     = cell.GetTuple();
                if (statement != null && tuple != null && tuple.Count > 0)
                {
                    statement.Axes.Clear();
                    List <MdxExpression> members = new List <MdxExpression>();
                    foreach (var member in tuple.Values)
                    {
                        var expr = new MdxObjectReferenceExpression(member.UniqueName, member.Caption);
                        members.Add(expr);
                    }

                    statement.Axes.Add(new MdxAxis("0", new MdxTupleExpression(members)));

                    using (MdxDomProvider provider = MdxDomProvider.CreateProvider())
                    {
                        StringBuilder sb = new StringBuilder();
                        provider.GenerateMdxFromDom(statement, sb, new MdxGeneratorOptions());
                        result = sb.ToString();
                    }

                    if (!String.IsNullOrEmpty(result))
                    {
                        result = String.Format("DRILLTHROUGH {0}", result);
                    }
                }
            }
            return(result);
        }
 void InitializeTuple(CellSetData cs_descr)
 {
     if (cs_descr != null)
     {
         CellSetDataProvider cellSetProvider = new CellSetDataProvider(cs_descr);
         CellInfo            cell            = cellSetProvider.GetCellInfo(0, 0);
         if (cell != null)
         {
             IDictionary <String, MemberWrap> slice = new Dictionary <String, MemberWrap>();
             IDictionary <String, MemberInfo> tuple = cell.GetTuple();
             foreach (String hierarchyUniqueName in tuple.Keys)
             {
                 slice.Add(hierarchyUniqueName, new MemberWrap(tuple[hierarchyUniqueName]));
             }
             m_CopyControl.Initialize(slice);
         }
     }
 }
        public void Initialize(CellInfo cell)
        {
            m_Cell = cell;

            List <TupleItem> list = new List <TupleItem>();

            if (m_Cell != null)
            {
                IDictionary <String, MemberInfo> tuple = m_Cell.GetTuple();
                foreach (MemberInfo member in tuple.Values)
                {
                    list.Add(new TupleItem(member));
                }
            }
            m_Grid.ItemsSource = list;
            if (list.Count > 0)
            {
                m_Grid.SelectedIndex = 0;
            }
            else
            {
                m_Grid.SelectedIndex = -1;
            }
        }