/// <summary>
        ///		Añade un nodo de dimensión (y sus hijos)
        /// </summary>
        private void AddDimensionNodes(NodeColumnViewModel root, DimensionModel dimension)
        {
            NodeColumnViewModel node = new NodeColumnViewModel(this, root, NodeColumnViewModel.NodeColumnType.Dimension,
                                                               dimension.Id, null);
            BaseReportingDictionaryModel <DimensionModel> childs = new BaseReportingDictionaryModel <DimensionModel>();

            // Asigna el código de dimensión
            node.DimensionId = dimension.Id;
            // Añade los campos de la dimensión
            AddColumnNodes(node, dimension.DataSource.Columns, NodeColumnViewModel.NodeColumnType.DimensionColumn, dimension.Id, string.Empty);
            // Crea la colección de dimensiones hija a partir de las relaciones
            foreach (DimensionRelationModel relation in dimension.Relations)
            {
                if (relation.Dimension != null)
                {
                    childs.Add(relation.Dimension);
                }
            }
            // Añade los nodos de dimensión hija
            foreach (DimensionModel child in childs.EnumerateValuesSorted())
            {
                AddDimensionNodes(node, child);
            }
            // Añade el nodo a la raíz
            root.Children.Add(node);
        }
        /// <summary>
        ///		Añade los nodos de dimensiones
        /// </summary>
        private void AddDimensionNodes(ReportModel report)
        {
            NodeColumnViewModel root = new NodeColumnViewModel(this, null, NodeColumnViewModel.NodeColumnType.DimensionsRoot, "Dimensiones", null);
            BaseReportingDictionaryModel <DimensionModel> dimensions = GetDimensions(report);

            // Añade las dimensiones
            foreach (DimensionModel dimension in dimensions.EnumerateValuesSorted())
            {
                AddDimensionNodes(root, dimension);
            }
            // Añade el nodo raíz al árbol
            Children.Add(root);
        }
        /// <summary>
        ///		Añade los nodos de columnas
        /// </summary>
        private void AddColumnNodes(NodeColumnViewModel root, BaseReportingDictionaryModel <DataSourceColumnModel> columns,
                                    NodeColumnViewModel.NodeColumnType nodeColumnType, string dimensionId, string dataSourceId)
        {
            // Añade las columnas adecuadas al árbol
            foreach (DataSourceColumnModel column in columns.EnumerateValuesSorted())
            {
                if (column.Visible)
                {
                    NodeColumnViewModel node = new NodeColumnViewModel(this, root, nodeColumnType, column.Id, column);

                    // Asigna las propiedades
                    node.DimensionId  = dimensionId;
                    node.DataSourceId = dataSourceId;
                    // Añade el nodo
                    root.Children.Add(node);
                }
            }
        }