Ejemplo n.º 1
0
        public IEnumerable <DimensionValueDto> GetCorrespondingValues(DimensionTree tree, int dimensionId, DimensionDto child)
        {
            var childDimension = tree.GetDimensionDto(child.Id);
            var oldIds         = new List <int>();

            oldIds.AddRange(child.DimensionValues.Select(dv => dv.Id));
            var newIds = new List <int>();

            while (childDimension.Id != dimensionId)
            {
                var parentDimension = tree.GetDimensionDto((int)childDimension.ParentId);
                var selectors       = new List <List <Column> >
                {
                    oldIds.Select(childId => new Column {
                        Name = childDimension.IdName, Value = childId.ToString()
                    })
                    .ToList()
                };
                oldIds = newIds;
                var currentIds = QueryBuilder.Select(parentDimension.TableName, selectors);
                newIds.Clear();
                newIds.AddRange(from DataRow currentId in currentIds.Rows select Convert.ToInt32(currentId[Constants.String.Id]));
                childDimension = parentDimension;
            }
            var ret = new List <DimensionValueDto>();

            foreach (var newId in newIds)
            {
                ret.AddRange(GetValuesOfDimension(tree.GetDimensionDto(dimensionId), new Column {
                    Name = Constants.String.Id, Value = newId.ToString()
                }));
            }
            return(ret);
        }
Ejemplo n.º 2
0
 private void SetupDataLayer(DimensionTree tree)
 {
     _treeBuilderMock.Setup(c => c.ConvertToTree(1, It.IsAny <bool>())).Returns(tree);
     _dataMock.Setup(c => c.GetDimension(It.IsAny <int>()))
     .Returns((int id) => new Dimension {
         Name = tree.GetDimensionDto(id).Name, Id = id
     });
     _dataMock.Setup(c => c.GetMeasure(1)).Returns(new Measure {
         Id = 1
     });
     _starSchemaQuerierMock.Setup(c => c.GetValuesOfDimension(It.IsAny <DimensionDto>(), It.IsAny <Column>()))
     .Returns((DimensionDto dd, Column col) => tree.GetDimensionDto(dd.Id).DimensionValues);
 }
 private void Setup(List <Dimension> dimensions, DimensionTree tree)
 {
     _data.Setup(d => d.GetDimension(It.IsAny <int>())).Returns((int x) => dimensions.Single(d => d.Id == x));
     _data.Setup(d => d.GetAllDimValues(It.IsAny <int>())).Returns((int x) => dimensions.Single(d => d.Id == x).DimensionValues.ToList());
     _querier.Setup(q => q.GetValuesOfDimension(It.IsAny <DimensionDto>(), It.IsAny <Column>()))
     .Returns(
         (DimensionDto d, Column c) =>
         tree.GetDimensionDto(d.Id).DimensionValues.Where(dv => c.Value == dv.Value).ToList());
 }
        private IEnumerable <DimensionValueDto> GetFilteredValues(DimensionTree allDimensionsTree, DimensionDto dimension,
                                                                  List <FlatDimensionDto> filterDimensions, List <DimensionValueDto> dimensionValues = null)
        {
            var dimensionFilter = filterDimensions.SingleOrDefault(fd => fd.Id == dimension.Id);

            if (dimensionValues == null)
            {
                dimensionValues = _querier.GetValuesOfDimension(dimension);
            }
            var childrenInFilters   = filterDimensions.Where(fd => allDimensionsTree.GetDimensionDto(dimension.Id).GetSubtreeIds().Contains(fd.Id)).ToList();
            var valuesFromFilter    = new List <DimensionValueDto>();
            var valuesFromAncestors = new List <DimensionValueDto>();

            if (dimensionFilter != null)
            {
                valuesFromFilter =
                    dimensionFilter.DimensionValues
                    .Select(filterValue => dimensionValues.SingleOrDefault(v => v.Id == filterValue.Id))
                    .Where(v => v != null).ToList();
            }
            if (childrenInFilters.Any())
            {
                foreach (var child in childrenInFilters)
                {
                    var dimensionCorrespondingValues = _querier.GetCorrespondingValues(allDimensionsTree, dimension.Id, child);
                    foreach (var correspondingValue in dimensionCorrespondingValues)
                    {
                        if (dimensionValues.Select(dv => dv.Id).Contains(correspondingValue.Id))
                        {
                            valuesFromAncestors.Add(correspondingValue);
                        }
                    }
                }
            }
            if (valuesFromFilter.Any() && valuesFromAncestors.Any())
            {
                var filteredValues = valuesFromFilter.Select(v1 => v1.Id)
                                     .Where(v => valuesFromAncestors.Select(v2 => v2.Id)
                                            .Contains(v)).ToList();
                return(filteredValues.Any() ? dimensionValues.Where(xdv => filteredValues.Contains(xdv.Id)) : dimensionValues);
            }
            else if (valuesFromFilter.Any())
            {
                return(valuesFromFilter);
            }
            else if (valuesFromAncestors.Any())
            {
                return(valuesFromAncestors);
            }
            return(dimensionValues);
        }
Ejemplo n.º 5
0
        // Returns root dimension and list of its ids for concrete non-root dimension
        private DimensionValueIds GetRootDimensionIds(DimensionTree tree, int dimensionId, int valueId)
        {
            var isRoot         = tree.IsRoot(dimensionId);
            var childDimension = tree.GetDimensionDto(dimensionId);
            var oldIds         = new List <int> {
                valueId
            };
            var newIds = new List <int> {
                valueId
            };

            while (!isRoot)
            {
                var parentDimension = tree.GetDimensionDto((int)childDimension.ParentId);
                var selectors       = new List <List <Column> >
                {
                    oldIds.Select(childId => new Column {
                        Name = childDimension.IdName, Value = childId.ToString()
                    })
                    .ToList()
                };
                oldIds = newIds;

                var currentIds = QueryBuilder.Select(parentDimension.TableName, selectors);
                newIds.Clear();
                newIds.AddRange(from DataRow currentId in currentIds.Rows select Convert.ToInt32(currentId[Constants.String.Id]));
                childDimension = parentDimension;
                if (childDimension.ParentId == null)
                {
                    isRoot = true;
                }
            }
            return(new DimensionValueIds
            {
                DimensionId = childDimension.Id,
                ValueIds = new HashSet <int>(newIds)
            });
        }
        private GraphXAxisRootDto GetParentRoot(DimensionTree allDimensionsTree, TreeDimensionDto childDimension,
                                                Measure measure, DimensionValueDto xValue, List <FlatDimensionDto> filters, DimensionDto legendDimension = null)
        {
            GraphXAxisRootDto xAxisRoot;

            if (legendDimension == null)
            {
                xAxisRoot = new DrilldownGraphXAxisRootDto
                {
                    Id          = xValue.Id,
                    Name        = xValue.Value,
                    XAxisLeaves = new List <GraphXAxisLeafDto>()
                };
            }
            else
            {
                xAxisRoot = new GroupedGraphXAxisRootDto
                {
                    Id          = xValue.Id,
                    Name        = xValue.Value,
                    XAxisLeaves = new List <GraphXAxisLeafDto>()
                };
            }
            var parentDimension = allDimensionsTree.GetDimensionDto((int)childDimension.ParentId);
            var xDimValues      = _querier.GetValuesOfDimension(
                parentDimension, new Column {
                Name = childDimension.IdName, Value = xValue.Id.ToString()
            });
            var filteredValues = GetFilteredValues(allDimensionsTree, parentDimension, filters, xDimValues);

            foreach (var dimValue in filteredValues)
            {
                var leaf = GetLeaf(allDimensionsTree, allDimensionsTree.GetDimensionDto((int)childDimension.ParentId), dimValue, measure, filters, legendDimension);
                xAxisRoot.XAxisLeaves.Add(leaf);
            }
            return(xAxisRoot);
        }
Ejemplo n.º 7
0
        private List <List <Column> > ConvertToSelectors(DimensionTree allValues, IEnumerable <List <DimensionValueIds> > filters)
        {
            var selectors = new List <List <Column> >();

            foreach (var filter in filters)
            {
                var listToAdd = new List <Column>();
                foreach (var valueIds in filter)
                {
                    listToAdd.AddRange(valueIds.ValueIds.Select(dId => new Column {
                        Name = allValues.GetDimensionDto(valueIds.DimensionId).IdName, Value = dId.ToString()
                    }));
                }
                selectors.Add(listToAdd);
            }
            return(selectors);
        }
        public static List <FlatDimensionDto> GetFilters(DimensionTree tree, List <Tuple <int, int[]> > dimensionsAndValues)
        {
            var ret = new List <FlatDimensionDto>();

            foreach (var dimension in dimensionsAndValues)
            {
                var dimensionInTree = tree.GetDimensionDto(dimension.Item1);
                ret.Add(new FlatDimensionDto
                {
                    Id              = dimensionInTree.Id,
                    Name            = dimensionInTree.Name,
                    DatasetName     = dimensionInTree.DatasetName,
                    DimensionValues = dimension.Item2.Select(dv => dimensionInTree.DimensionValues.Single(dvt => dvt.Id == dv)).ToList()
                });
            }
            return(ret);
        }