Beispiel #1
0
        /// <summary>
        /// Возвращает список кубов
        /// </summary>
        /// <returns></returns>
        public Dictionary <String, CubeDefInfo> GetCubes()
        {
            try
            {
                System.Diagnostics.Trace.TraceInformation("{0} Ranet.Olap.Core.Providers.OlapMetadataProvider Getting Cubes List Started", DateTime.Now.ToString());

                Dictionary <String, CubeDefInfo> list = new Dictionary <String, CubeDefInfo>();
                AdomdConnection conn = GetConnection();
                foreach (CubeDef cube in conn.Cubes)
                {
                    CubeDefInfo info = InfoHelper.CreateCubeInfo(cube);
                    if (info != null)
                    {
                        if (!list.ContainsKey(info.Name))
                        {
                            list.Add(info.Name, info);
                        }
                    }
                }
                return(list);
            }
            finally {
                System.Diagnostics.Trace.TraceInformation("{0} Ranet.Olap.Core.Providers.OlapMetadataProvider Getting Cubes List Completed", DateTime.Now.ToString());
            }
        }
Beispiel #2
0
        String GetCubeMetadata(MetadataQuery args)
        {
            OlapMetadataProvider provider = new OlapMetadataProvider(new ConnectionInfo(args.Connection, GetConnectionString(args.Connection)));

            CubeDefInfo info = provider.GetCubeMetadata(args.CubeName, args.QueryType);

            return(XmlSerializationUtility.Obj2XmlStr(info, Common.Namespace));
        }
        private void ApplyItemsSelection()
        {
            CubeTreeNode node = null;

            node = Tree.SelectedItem as CubeTreeNode;

            //Запоминаем выбранный элемент
            m_SelectedInfo = node != null ? node.Info as CubeDefInfo : null;
        }
        public void InitializeMetadata(CubeDefInfo cubeInfo)
        {
            List <CoordinateItem> list = new List <CoordinateItem>();

            if (cubeInfo != null)
            {
                foreach (DimensionInfo dim_Info in cubeInfo.Dimensions)
                {
                    foreach (HierarchyInfo hier_info in dim_Info.Hierarchies)
                    {
                        CoordinateItem item = new CoordinateItem(dim_Info.UniqueName, hier_info.UniqueName);
                        item.Hierarchy_Custom_AllMemberUniqueName = hier_info.Custom_AllMemberUniqueName;
                        item.DimensionCaption = dim_Info.Caption;
                        item.HierarchyCaption = hier_info.Caption;
                        if (m_Slice != null && m_Slice.ContainsKey(hier_info.UniqueName))
                        {
                            MemberWrap wrap = m_Slice[hier_info.UniqueName];
                            item.SourceMember = wrap;

                            item.DestMember = wrap;
                            // Если в приемник попадает элемент типа ALL, то
                            // пытаемся заменить его на DefaultMember. Если же DefaultMember совпадет в итоге с AllMember
                            // то в приемник устанавливаем Unknown элемент
                            if (!String.IsNullOrEmpty(hier_info.Custom_AllMemberUniqueName) &&
                                hier_info.Custom_AllMemberUniqueName == wrap.UniqueName)
                            {
                                if (!String.IsNullOrEmpty(hier_info.DefaultMember) &&
                                    hier_info.DefaultMember == hier_info.Custom_AllMemberUniqueName)
                                {
                                    MemberWrap unk_wrap = new MemberWrap();
                                    unk_wrap.IsUnknownMember = true;
                                    item.DestMember          = unk_wrap;
                                }
                                else
                                {
                                    if (!String.IsNullOrEmpty(hier_info.DefaultMember))
                                    {
                                        MemberWrap def_wrap = new MemberWrap();
                                        def_wrap.IsDefaultMember = true;
                                        item.DestMember          = def_wrap;
                                    }
                                }
                            }
                        }
                        list.Add(item);
                    }
                }
            }
            m_Coordinates.Initialize(list);
        }
        public CubeItemControl(CubeDefInfo info, bool useIcon)
            : base(useIcon)
        {
            if (info == null)
            {
                throw new ArgumentNullException("info");
            }

            m_Info = info;
            Text   = info.Caption;

            if (useIcon)
            {
                Icon = UriResources.Images.Cube16;
            }
        }
        void OlapDataLoader_DataLoaded(object sender, DataLoaderEventArgs e)
        {
            bool stopWaiting = true;

            try
            {
                if (e.Error != null)
                {
                    LogManager.LogError(this, e.Error.ToString());
                    return;
                }

                if (e.Result.ContentType == InvokeContentType.Error)
                {
                    LogManager.LogError(this, e.Result.Content);
                    return;
                }

                MdxQueryArgs mdx_args = e.UserState as MdxQueryArgs;
                if (mdx_args != null)
                {
                    CellSetData cs_descr = CellSetData.Deserialize(e.Result.Content);
                    InitializeTuple(cs_descr);

                    // Зачитываем метаданные куба в целом
                    stopWaiting = false;
                    LogManager.LogInformation(this, this.Name + " - Loading cube metadata.");
                    MetadataQuery args = CommandHelper.CreateGetCubeMetadataArgs(Connection, CubeName, MetadataQueryType.GetCubeMetadata_AllMembers);
                    OlapDataLoader.LoadData(args, args);
                }

                MetadataQuery metadata_args = e.UserState as MetadataQuery;
                if (metadata_args != null)
                {
                    CubeDefInfo cs_descr = XmlSerializationUtility.XmlStr2Obj <CubeDefInfo>(e.Result.Content);
                    m_CopyControl.InitializeMetadata(cs_descr);
                }
            }
            finally
            {
                if (stopWaiting)
                {
                    IsWaiting = false;
                }
            }
        }
 public void InitializeMetadata(CubeDefInfo cubeInfo)
 {
     comboNonEmptyBehavior.ItemsSource = null;
     m_NonEmptyBehavoirSource.Clear();
     if (cubeInfo != null)
     {
         foreach (var info in cubeInfo.Measures)
         {
             // Не выводим вычисляемые меры
             if (String.IsNullOrEmpty(info.Expression))
             {
                 m_NonEmptyBehavoirSource.Add(new ComboBoxItemData()
                 {
                     Text = info.Name
                 });
             }
         }
     }
     comboNonEmptyBehavior.ItemsSource = m_NonEmptyBehavoirSource;
 }
Beispiel #8
0
        /// <summary>
        /// Возвращает список кубов
        /// </summary>
        /// <returns></returns>
        public CubeDefInfo  GetCubeMetadata(String cubeName, MetadataQueryType type)
        {
            try
            {
                System.Diagnostics.Trace.TraceInformation("{0} Ranet.Olap.Core.Providers.OlapMetadataProvider Getting Cube '{1}' Metadata Started",
                                                          DateTime.Now.ToString(), cubeName);

                CubeDef cube = FindCube(cubeName);
                if (cube != null)
                {
                    CubeDefInfo cube_info = InfoHelper.CreateCubeInfo(cube);
                    foreach (Dimension dim in cube.Dimensions)
                    {
                        DimensionInfo dim_info = InfoHelper.CreateDimensionInfo(dim);
                        cube_info.Dimensions.Add(dim_info);

                        foreach (Hierarchy hierarchy in dim.Hierarchies)
                        {
                            HierarchyInfo hier_info = InfoHelper.CreateHierarchyInfo(hierarchy);
                            dim_info.Hierarchies.Add(hier_info);

                            foreach (Level level in hierarchy.Levels)
                            {
                                LevelInfo level_info = InfoHelper.CreateLevelInfo(level);
                                hier_info.Levels.Add(level_info);
                            }

                            //AdomdConnection conn = GetConnection(ConnectionString);

                            //// Для каждой иерархии пытаемся определить элемент, который имеет тип MemberTypeEnum.All
                            //try
                            //{
                            //    AdomdRestrictionCollection restrictions = new AdomdRestrictionCollection();
                            //    restrictions.Add("CATALOG_NAME", conn.Database);
                            //    restrictions.Add("CUBE_NAME", OlapHelper.ConvertToNormalStyle(cubeName));
                            //    restrictions.Add("DIMENSION_UNIQUE_NAME", dim.UniqueName);
                            //    restrictions.Add("HIERARCHY_UNIQUE_NAME", hierarchy.UniqueName);
                            //    restrictions.Add("MEMBER_TYPE", 2/*MemberTypeEnum.All*/);

                            //    DataSet ds = conn.GetSchemaDataSet("MDSCHEMA_MEMBERS", restrictions);
                            //    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                            //    {
                            //        DataTable table = ds.Tables[0];
                            //        if (table.Columns.Contains("MEMBER_UNIQUE_NAME"))
                            //        {
                            //            object obj = ds.Tables[0].Rows[0]["MEMBER_UNIQUE_NAME"];
                            //            if (obj != null)
                            //                hier_info.Custom_AllMemberUniqueName = obj.ToString();
                            //        }
                            //    }
                            //}catch
                            //{
                            //}

                            //// Для каждой иерархии пытаемся определить элемент, который имеет тип MemberTypeEnum.Unknown
                            //try
                            //{
                            //    AdomdRestrictionCollection restrictions = new AdomdRestrictionCollection();
                            //    restrictions.Add("CATALOG_NAME", conn.Database);
                            //    restrictions.Add("CUBE_NAME", OlapHelper.ConvertToNormalStyle(cubeName));
                            //    restrictions.Add("DIMENSION_UNIQUE_NAME", dim.UniqueName);
                            //    restrictions.Add("HIERARCHY_UNIQUE_NAME", hierarchy.UniqueName);
                            //    restrictions.Add("MEMBER_TYPE", 0 /*MemberTypeEnum.Unknown.All*/);

                            //    DataSet ds = conn.GetSchemaDataSet("MDSCHEMA_MEMBERS", restrictions);
                            //    if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                            //    {
                            //        DataTable table = ds.Tables[0];
                            //        if (table.Columns.Contains("MEMBER_UNIQUE_NAME"))
                            //        {
                            //            object obj = ds.Tables[0].Rows[0]["MEMBER_UNIQUE_NAME"];
                            //            if (obj != null)
                            //                hier_info.Custom_UnknownMemberUniqueName = obj.ToString();
                            //        }
                            //    }
                            //}
                            //catch
                            //{
                            //}
                        }
                    }

                    foreach (Kpi kpi in cube.Kpis)
                    {
                        KpiInfo kpi_info = InfoHelper.CreateKpiInfo(kpi);
                        cube_info.Kpis.Add(kpi_info);
                    }

                    foreach (Measure measure in cube.Measures)
                    {
                        MeasureInfo measure_info = InfoHelper.CreateMeasureInfo(measure);
                        cube_info.Measures.Add(measure_info);
                    }

                    foreach (NamedSet set in cube.NamedSets)
                    {
                        NamedSetInfo set_info = InfoHelper.CreateNamedSetInfo(set);
                        cube_info.NamedSets.Add(set_info);
                    }

                    if (type == MetadataQueryType.GetCubeMetadata_AllMembers)
                    {
                        AdomdConnection conn = GetConnection();
                        // Для каждой иерархии пытаемся определить элемент, который имеет тип MemberTypeEnum.All
                        try
                        {
                            AdomdRestrictionCollection restrictions = new AdomdRestrictionCollection();
                            restrictions.Add("CATALOG_NAME", conn.Database);
                            restrictions.Add("CUBE_NAME", OlapHelper.ConvertToNormalStyle(cubeName));
                            restrictions.Add("MEMBER_TYPE", 2 /*MemberTypeEnum.All*/);

                            DataSet ds = conn.GetSchemaDataSet("MDSCHEMA_MEMBERS", restrictions);
                            if (ds != null && ds.Tables.Count > 0 && ds.Tables[0].Rows.Count > 0)
                            {
                                DataTable table = ds.Tables[0];
                                if (table.Columns.Contains("MEMBER_UNIQUE_NAME") &&
                                    table.Columns.Contains("HIERARCHY_UNIQUE_NAME") &&
                                    table.Columns.Contains("DIMENSION_UNIQUE_NAME"))
                                {
                                    foreach (DataRow row in ds.Tables[0].Rows)
                                    {
                                        String dimension_UniqueName = row["DIMENSION_UNIQUE_NAME"] != null ? row["DIMENSION_UNIQUE_NAME"].ToString() : String.Empty;
                                        String hierarchy_UniqueName = row["HIERARCHY_UNIQUE_NAME"] != null ? row["HIERARCHY_UNIQUE_NAME"].ToString() : String.Empty;
                                        String member_UniqueName    = row["MEMBER_UNIQUE_NAME"] != null ? row["MEMBER_UNIQUE_NAME"].ToString() : String.Empty;

                                        if (!String.IsNullOrEmpty(dimension_UniqueName) &&
                                            !String.IsNullOrEmpty(hierarchy_UniqueName) &&
                                            !String.IsNullOrEmpty(member_UniqueName))
                                        {
                                            DimensionInfo dimension = cube_info.GetDimension(dimension_UniqueName);
                                            if (dimension != null)
                                            {
                                                HierarchyInfo hierarchy = dimension.GetHierarchy(hierarchy_UniqueName);
                                                if (hierarchy != null)
                                                {
                                                    hierarchy.Custom_AllMemberUniqueName = member_UniqueName;
                                                }
                                            }
                                        }
                                    }
                                }
                            }
                        }
                        catch (Exception ex)
                        {
                            //throw ex;
                        }
                    }

                    cube_info.MeasureGroups = GetMeasureGroups(cubeName);

                    return(cube_info);
                }

                return(null);
            }
            finally {
                System.Diagnostics.Trace.TraceInformation("{0} Ranet.Olap.Core.Providers.OlapMetadataProvider Getting Cube '{1}' Metadata Completed",
                                                          DateTime.Now.ToString(), cubeName);
            }
        }
 public void Initialize(CubeDefInfo cubeInfo)
 {
     m_CubeInfo = cubeInfo;
     CreateMeasures();
 }
Beispiel #10
0
 public void Initialize(CubeDefInfo cubeInfo, Top_FilterWrapper wrapper)
 {
     comboMeasure.Initialize(cubeInfo);
     Initialize(wrapper);
 }
Beispiel #11
0
 public void Initialize(CubeDefInfo cubeInfo)
 {
     comboMeasure.Initialize(cubeInfo);
 }
 public void Initialize(CubeDefInfo cubeInfo)
 {
     m_CubeInfo = cubeInfo;
     m_TopFilterControl.Initialize(cubeInfo);
     m_ValueFilterControl.Initialize(cubeInfo);
 }
Beispiel #13
0
        public void Initialize(Dictionary <String, CalculationInfoBase> members, Dictionary <String, CalculationInfoBase> sets, CubeDefInfo cubeInfo, String measureGroupName)
        {
            m_Members = members;
            m_Sets    = sets;
            m_ClearButton.IsEnabled = (Members.Count + Sets.Count) > 0;

            MemberCtrl.InitializeMetadata(cubeInfo);

            if (CubeBrowser.CubeInfo != cubeInfo)
            {
                CubeBrowser.Initialize(cubeInfo);
            }
            CubeBrowser.MeasureGroupName = measureGroupName;

            MemberCtrl.IsEnabled = SetCtrl.IsEnabled = false;

            foreach (CalculationInfoBase info in Members.Values)
            {
                CalcMemberInfo member = info as CalcMemberInfo;
                if (member != null)
                {
                    // Добавляем в список стандартных пользовательские строки форматирования
                    if (!String.IsNullOrEmpty(member.FormatString))
                    {
                        if (!FormatStrings.Contains(member.FormatString))
                        {
                            FormatStrings.Add(member.FormatString);
                        }
                    }
                }
            }

            MemberCtrl.FormatStrings = FormatStrings;
            MembersList.Initialize(members, sets);

            RefreshMetadataTree();

            //CalcMemberInfo memberInfo = MembersList.CurrentObject as CalcMemberInfo;
            //if (memberInfo != null)
            //{
            //    MemberCtrl.Initialize(memberInfo);
            //}
        }
Beispiel #14
0
        public void Initialize(CubeDefInfo cubeInfo)
        {
            Groups.Clear();
            Groups.Add(RootGroup.Name, RootGroup);

            if (cubeInfo != null)
            {
                // Создаем описатели групп мер
                foreach (MeasureGroupInfo groupInfo in cubeInfo.MeasureGroups)
                {
                    if (!Groups.ContainsKey(groupInfo.Name))
                    {
                        Groups.Add(groupInfo.Name, new GroupInfo(groupInfo.Name, groupInfo.Caption));
                    }
                }

                foreach (MeasureInfo measureInfo in cubeInfo.Measures)
                {
                    String groupName = measureInfo.MeasureGroup;

                    // Если папка указана, то добавлем в иерархию (если она не привязана к группе, то она попадает в корневую коллекцию папкок)
                    // DisplayFolder может содержать иерархию папок, разделенную "\\"
                    if (!String.IsNullOrEmpty(measureInfo.DisplayFolder))
                    {
                        // Определяем группу, в которую входит данная папка (группы может и не быть)
                        GroupInfo groupInfo = null;
                        if (!String.IsNullOrEmpty(groupName) && Groups.ContainsKey(groupName))
                        {
                            groupInfo = Groups[groupName];
                        }

                        // Разбиваем полный путь на составляющие и создаем папку для каждой из них
                        String[] folders_names = measureInfo.DisplayFolder.Split(new String[] { "\\" }, StringSplitOptions.RemoveEmptyEntries);
                        if (folders_names != null)
                        {
                            String     folderName      = String.Empty;
                            FolderInfo prev_folderInfo = null;
                            foreach (String folderCaption in folders_names)
                            {
                                // Создаем узел для группы
                                if (!String.IsNullOrEmpty(folderCaption))
                                {
                                    // Получаем имя папки для данного уровня
                                    if (!String.IsNullOrEmpty(folderName))
                                    {
                                        folderName += "\\";
                                    }
                                    folderName += folderCaption;

                                    // Пытаемся найти папку с данным именем. Если она не найдена, то создаем ее
                                    FolderInfo folderInfo = GetFolder(groupInfo != null ? groupInfo.Name : String.Empty, folderName);
                                    if (folderInfo == null)
                                    {
                                        // Создаем данную папку
                                        folderInfo = new FolderInfo(folderName, folderCaption);

                                        // Если предыдущая папка в иерархии известна, то добавляем в нее
                                        if (prev_folderInfo != null)
                                        {
                                            prev_folderInfo.Folders.Add(folderName, folderInfo);
                                        }
                                        else
                                        {
                                            // Если группа известна то добавляем в группу в коллекцию корневых, иначе просто в коллекцию корневых папок
                                            if (groupInfo != null)
                                            {
                                                groupInfo.Folders.Add(folderName, folderInfo);
                                            }
                                            else
                                            {
                                                RootGroup.Folders.Add(folderName, folderInfo);
                                            }
                                        }
                                    }

                                    prev_folderInfo = folderInfo;
                                }
                            }
                        }
                    }
                }
            }
        }
 public CubeTreeNode(CubeDefInfo info) : base(info)
 {
     Icon = UriResources.Images.Cube16;
 }