Example #1
0
        public void ProjectionTest()
        {
            // Create Oldedb top set
            SetTopOledb dbTop = new SetTopOledb("Northwind");

            dbTop.ConnectionString = Northwind;
            dbTop.Open();
            dbTop.ImportSchema();

            SetTop wsTop = new SetTop("My Mashup");

            //
            // Load test data
            //
            Set targetSet = Mapper.ImportSet(dbTop.FindSubset("Order Details"), wsTop);

            targetSet.TableDefinition.Populate();

            //
            // Create derived dimensions
            //
            Set od = wsTop.FindSubset("Order Details");

            // Create expression
            Dim        d1   = od.GetGreaterDim("Order ID");
            Dim        d2   = d1.GreaterSet.GetGreaterDim("Customer ID");
            Dim        d3   = d2.GreaterSet.GetGreaterDim("Last Name");
            List <Dim> path = new List <Dim> {
                d1, d2, d3
            };

            Expression expr = Expression.CreateProjectExpression(path, Operation.PROJECTION);

            // Add derived dimension
            Dim derived1 = d3.GreaterSet.CreateDefaultLesserDimension("Customer Last Name", od);

            derived1.Add();

            var funcExpr = ExpressionScope.CreateFunctionDeclaration("Customer Last Name", "Order Details", "String");

            funcExpr.Statements[0].Input = expr; // Return statement
            funcExpr.ResolveFunction(wsTop);
            funcExpr.Resolve();

            derived1.SelectExpression = funcExpr;

            // Update
            derived1.Evaluate();

            Assert.AreEqual("Axen", od.GetValue("Customer Last Name", 10));
        }
Example #2
0
        public void ArithmeticTest()
        {
            // Create Oldedb top set
            SetTopOledb dbTop = new SetTopOledb("Northwind");

            dbTop.ConnectionString = Northwind;
            dbTop.Open();
            dbTop.ImportSchema();

            SetTop wsTop = new SetTop("My Mashup");

            //
            // Load test data
            //
            Set targetSet = Mapper.ImportSet(dbTop.FindSubset("Order Details"), wsTop);

            targetSet.TableDefinition.Populate();

            Set products  = wsTop.FindSubset("Products");
            Set doubleSet = wsTop.GetPrimitive("Double");

            //
            // Create derived dimensions
            //

            // "List Price", "Standard Cost", "Target Level"
            // Column names are function names and they have to be assign to expression node names (DOT)
            // But where is 'this' variable and 'this' set? This set is Input.OutputSet. And the function will be applied to whatever is stored in Input.Output (interpreted as offset).
            // So Input.Output has to be assigned explicitly offset in a loop. Or we need to store a variable 'this' which, when evaluated, writes its current value to Input.Output.

            // Create simple (one-segment) function expressions
            Dim d1 = products.GetGreaterDim("List Price");
            Dim d2 = products.GetGreaterDim("Standard Cost");
            Dim d3 = products.GetGreaterDim("Target Level");

            Expression d1_Expr = Expression.CreateProjectExpression(new List <Dim> {
                d1
            }, Operation.DOT);
            Expression d2_Expr = Expression.CreateProjectExpression(new List <Dim> {
                d2
            }, Operation.DOT);
            Expression d3_Expr = Expression.CreateProjectExpression(new List <Dim> {
                d3
            }, Operation.DOT);

            // Add derived dimension
            Dim derived1 = wsTop.CreateColumn("Derived Column", products, doubleSet, true);

            derived1.Add();

            Expression arithmExpr = new Expression("MINUS", Operation.SUB);

            arithmExpr.Input = d1_Expr;

            Expression plusExpr = new Expression("PLUS", Operation.ADD);

            plusExpr.Input = d2_Expr;
            plusExpr.AddOperand(d3_Expr);

            arithmExpr.AddOperand(plusExpr);

            var funcExpr1 = ExpressionScope.CreateFunctionDeclaration("Derived Column", "Products", "Double");

            funcExpr1.Statements[0].Input = arithmExpr; // Return statement
            funcExpr1.ResolveFunction(wsTop);
            funcExpr1.Resolve();

            derived1.SelectExpression = funcExpr1;

            // Update
            derived1.Evaluate();
            Assert.AreEqual(-32.5, products.GetValue("Derived Column", 2));

            //
            // Another (simpler) test
            //
            // Add derived dimension
            Dim derived2 = wsTop.CreateColumn("Derived Column 2", products, doubleSet, true);

            derived2.Add();

            plusExpr       = new Expression("PLUS", Operation.ADD);
            plusExpr.Input = d1_Expr;
            plusExpr.AddOperand(d1_Expr);

            var funcExpr2 = ExpressionScope.CreateFunctionDeclaration("Derived Column 2", "Products", "Double");

            funcExpr2.Statements[0].Input = plusExpr; // Return statement
            funcExpr2.ResolveFunction(wsTop);
            funcExpr2.Resolve();

            derived2.SelectExpression = funcExpr2; // plusExpr;

            // Update
            derived2.Evaluate();
            Assert.AreEqual(60.0, products.GetValue("Derived Column 2", 2));
        }
Example #3
0
        public void RecommendAggregationTest()
        {
            // Create Oldedb top set
            SetTopOledb dbTop = new SetTopOledb("Root");

            dbTop.ConnectionString = Northwind;
            dbTop.Open();
            dbTop.ImportSchema();

            SetTop wsTop = new SetTop("My Mashup");

            //
            // Load test data
            //
            Set targetSet = Mapper.ImportSet(dbTop.FindSubset("Order Details"), wsTop);

            targetSet.TableDefinition.Populate();

            Set cust      = wsTop.FindSubset("Customers");
            Set prod      = wsTop.FindSubset("Products");
            Set doubleSet = wsTop.GetPrimitive("Double");

            //
            // Test aggregation recommendations. From Customers to Product
            // Grouping (deproject) expression: (Customers) <- (Orders) <- (Order Details)
            // Measure (project) tupleExpr+ession: (Order Details) -> (Product) -> List Price
            //
            RecommendedAggregations recoms = new RecommendedAggregations();

            recoms.SourceSet = cust;
            recoms.TargetSet = prod;
            recoms.FactSet   = null; // Any

            recoms.Recommend();

            recoms.GroupingPaths.SelectedFragment = recoms.GroupingPaths.Alternatives[0];
            recoms.FactSets.SelectedFragment      = recoms.FactSets.Alternatives[0];
            recoms.MeasurePaths.SelectedFragment  = recoms.MeasurePaths.Alternatives[0];

            recoms.MeasureDimensions.SelectedFragment    = recoms.MeasureDimensions.Alternatives.First(f => ((Dim)f.Fragment).Name == "List Price");
            recoms.AggregationFunctions.SelectedFragment = recoms.AggregationFunctions.Alternatives.First(f => f.Fragment == "SUM");

            Dim derived1 = wsTop.CreateColumn("Average List Price", cust, doubleSet, true);

            derived1.Add();

            Expression aggreExpr = recoms.GetExpression();

            var funcExpr = ExpressionScope.CreateFunctionDeclaration("Average List Price", cust.Name, doubleSet.Name);

            funcExpr.Statements[0].Input = aggreExpr; // Return statement
            funcExpr.ResolveFunction(wsTop);
            funcExpr.Resolve();

            derived1.SelectExpression = funcExpr;

            // Update
            derived1.Evaluate();

            Assert.AreEqual(64.0, cust.GetValue("Average List Price", 2));
        }
Example #4
0
        public void AggregationTest()
        {
            // Create Oldedb top set
            SetTopOledb dbTop = new SetTopOledb("Northwind");

            dbTop.ConnectionString = Northwind;
            dbTop.Open();
            dbTop.ImportSchema();

            SetTop wsTop = new SetTop("My Mashup");

            //
            // Load test data
            //
            Set targetSet = Mapper.ImportSet(dbTop.FindSubset("Order Details"), wsTop);

            targetSet.TableDefinition.Populate();

            //
            // Create derived dimensions
            //
            Set odet   = wsTop.FindSubset("Order Details");
            Set orders = wsTop.FindSubset("Orders");
            Set cust   = wsTop.FindSubset("Customers");

            // Create deproject (grouping) expression: (Customers) <- (Orders) <- (Order Details)
            Dim        d1   = odet.GetGreaterDim("Order ID");
            Dim        d2   = d1.GreaterSet.GetGreaterDim("Customer ID");
            List <Dim> path = new List <Dim> {
                d1, d2
            };

            Expression deprExpr = Expression.CreateDeprojectExpression(path);

            // Create project (measure) expression: (Order Details) -> (Product) -> List Price
            Dim        d3      = odet.GetGreaterDim("Product ID");
            Dim        d4      = d3.GreaterSet.GetGreaterDim("List Price");
            List <Dim> mesPath = new List <Dim> {
                d3, d4
            };

            Expression projExpr = Expression.CreateProjectExpression(mesPath, Operation.DOT);

            Expression aggreExpr = Expression.CreateAggregateExpression("SUM", deprExpr, projExpr);

            // Add derived dimension
            Dim derived1 = d4.GreaterSet.CreateDefaultLesserDimension("Average List Price", cust);

            derived1.Add();

            var funcExpr1 = ExpressionScope.CreateFunctionDeclaration("Average List Price", cust.Name, d4.GreaterSet.Name);

            funcExpr1.Statements[0].Input = aggreExpr; // Return statement
            funcExpr1.ResolveFunction(wsTop);
            funcExpr1.Resolve();

            derived1.SelectExpression = funcExpr1;

            // Update
            derived1.Evaluate();

            Assert.AreEqual(64.0m, cust.GetValue("Average List Price", 2));
        }