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()); } }