public MeasureGroupItemControl(MeasureGroupInfo info) 
            : base(false)
        {
            if (info == null)
                throw new ArgumentNullException("info");

            m_Info = info;
            Text = info.Caption;
        }
        public List<MeasureGroupInfo> GetMeasureGroups(String cubeName)
        {
            try
            {
                System.Diagnostics.Trace.TraceInformation("{0} Ranet.Olap.Core.Providers.OlapMetadataProvider Get Measures Groups List Started \r\n cubeName: '{1}'",
                    DateTime.Now.ToString(), cubeName);

                Dictionary<String, MeasureGroupInfo> list = new Dictionary<String, MeasureGroupInfo>();
                AdomdConnection conn = GetConnection();

                AdomdRestrictionCollection restrictions = new AdomdRestrictionCollection();
                restrictions.Add("CATALOG_NAME", conn.Database);
                if (!String.IsNullOrEmpty(cubeName))
                {
                    restrictions.Add("CUBE_NAME", OlapHelper.ConvertToNormalStyle(cubeName));
                }

                #region Получение списка групп мер
                DataSet ds = conn.GetSchemaDataSet("MDSCHEMA_MEASUREGROUPS", restrictions);
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    DataTable table = ds.Tables[0];

                    if (ds.Tables[0].Columns.Count > 0)
                    {
                        foreach (DataRow row in ds.Tables[0].Rows)
                        {
                            MeasureGroupInfo info = new MeasureGroupInfo();
                            if (table.Columns.Contains("CATALOG_NAME"))
                            {
                                if (row["CATALOG_NAME"] != null)
                                {
                                    info.CatalogName = row["CATALOG_NAME"].ToString();
                                }
                            }

                            if (table.Columns.Contains("CUBE_NAME"))
                            {
                                if (row["CUBE_NAME"] != null)
                                {
                                    info.CubeName = row["CUBE_NAME"].ToString();
                                }
                            }

                            if (table.Columns.Contains("MEASUREGROUP_NAME"))
                            {
                                if (row["MEASUREGROUP_NAME"] != null)
                                {
                                    info.Name = row["MEASUREGROUP_NAME"].ToString();
                                }
                            }

                            if (table.Columns.Contains("DESCRIPTION"))
                            {
                                if (row["DESCRIPTION"] != null)
                                {
                                    info.Description = row["DESCRIPTION"].ToString();
                                }
                            }

                            if (table.Columns.Contains("MEASUREGROUP_CAPTION"))
                            {
                                if (row["MEASUREGROUP_CAPTION"] != null)
                                {
                                    info.Caption = row["MEASUREGROUP_CAPTION"].ToString();
                                }
                            }

                            if (table.Columns.Contains("IS_WRITE_ENABLED"))
                            {
                                if (row["IS_WRITE_ENABLED"] != null)
                                {
                                    info.IsWriteEnabled = Convert.ToBoolean(row["IS_WRITE_ENABLED"]);
                                }
                            }

                            if (!list.ContainsKey(info.Name))
                            {
                                list.Add(info.Name, info);
                            }
                        }
                    }
                }
                #endregion Получение списка групп мер

                #region Получение списка мер и распознавание для каких групп мер они относятся
                ds = conn.GetSchemaDataSet("MDSCHEMA_MEASURES", restrictions);
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    DataTable table = ds.Tables[0];

                    if (ds.Tables[0].Columns.Count > 0)
                    {
                        foreach (DataRow row in ds.Tables[0].Rows)
                        {
                            String measuresGroupName = string.Empty;
                            if (table.Columns.Contains("MEASUREGROUP_NAME"))
                            {
                                if (row["MEASUREGROUP_NAME"] != null)
                                {
                                    measuresGroupName = row["MEASUREGROUP_NAME"].ToString();
                                }
                            }

                            String measureUniqueName = String.Empty;
                            if (table.Columns.Contains("MEASURE_UNIQUE_NAME"))
                            {
                                if (row["MEASURE_UNIQUE_NAME"] != null)
                                {
                                    measureUniqueName = row["MEASURE_UNIQUE_NAME"].ToString();
                                }
                            }

                            if (!String.IsNullOrEmpty(measuresGroupName) &&
                                !String.IsNullOrEmpty(measureUniqueName))
                            {
                                if (list.ContainsKey(measuresGroupName))
                                {
                                    if (!list[measuresGroupName].Measures.Contains(measureUniqueName))
                                        list[measuresGroupName].Measures.Add(measureUniqueName);
                                }
                            }
                        }
                    }
                }
                #endregion Получение списка мер и распознавание для каких групп мер они относятся

                #region Получение списка KPI и распознавание для каких групп мер они относятся
                ds = conn.GetSchemaDataSet("MDSCHEMA_KPIS", restrictions);
                if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                {
                    DataTable table = ds.Tables[0];

                    if (ds.Tables[0].Columns.Count > 0)
                    {
                        foreach (DataRow row in ds.Tables[0].Rows)
                        {
                            String kpiName = string.Empty;
                            if (table.Columns.Contains("KPI_NAME"))
                            {
                                if (row["KPI_NAME"] != null)
                                {
                                    kpiName = row["KPI_NAME"].ToString();
                                }
                            }

                            String measuresGroupName = string.Empty;
                            if (table.Columns.Contains("MEASUREGROUP_NAME"))
                            {
                                if (row["MEASUREGROUP_NAME"] != null)
                                {
                                    measuresGroupName = row["MEASUREGROUP_NAME"].ToString();
                                }
                            }

                            if (!String.IsNullOrEmpty(measuresGroupName) &&
                                !String.IsNullOrEmpty(kpiName))
                            {
                                if (list.ContainsKey(measuresGroupName))
                                {
                                    if (!list[measuresGroupName].Kpis.Contains(kpiName))
                                        list[measuresGroupName].Kpis.Add(kpiName);
                                }
                            }
                        }
                    }
                }
                #endregion Получение списка KPI и распознавание для каких групп мер они относятся

                #region Получение списка измерений для каждой группы мер (MDSCHEMA_DIMENSIONS как оказалось не содержит информации о принадлежности измерения к группе мер - поэтому делаем несколько запросов MDSCHEMA_MEASUREGROUP_DIMENSIONS)

                foreach (MeasureGroupInfo info in list.Values)
                {
                    AdomdRestrictionCollection restrictions1 = new AdomdRestrictionCollection();
                    restrictions1.Add("CATALOG_NAME", conn.Database);
                    restrictions1.Add("CUBE_NAME", OlapHelper.ConvertToNormalStyle(cubeName));
                    restrictions1.Add("MEASUREGROUP_NAME", info.Name);
                    ds = conn.GetSchemaDataSet("MDSCHEMA_MEASUREGROUP_DIMENSIONS", restrictions1);

                    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                    {
                        DataTable table = ds.Tables[0];

                        if (ds.Tables[0].Columns.Count > 0)
                        {
                            foreach (DataRow row in ds.Tables[0].Rows)
                            {
                                if (table.Columns.Contains("DIMENSION_UNIQUE_NAME"))
                                {
                                    if (row["DIMENSION_UNIQUE_NAME"] != null)
                                    {
                                        String dimensionUniqueName = row["DIMENSION_UNIQUE_NAME"].ToString();
                                        if (!String.IsNullOrEmpty(dimensionUniqueName))
                                        {
                                            if (!info.Dimensions.Contains(dimensionUniqueName))
                                                info.Dimensions.Add(dimensionUniqueName);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
                #endregion Получение списка KPI и распознавание для каких групп мер они относятся

                List<MeasureGroupInfo> result = new List<MeasureGroupInfo>();
                foreach (MeasureGroupInfo info in list.Values)
                {
                    result.Add(info);
                }

                return result;
            }
            finally
            {
                System.Diagnostics.Trace.TraceInformation("{0} Ranet.Olap.Core.Providers.OlapMetadataProvider Get Measures Groups List Completed ",
                    DateTime.Now.ToString());
            }
        }