You are currently browsing legacy 2.5 version of documentation. Click here to switch to the newest 4.2 version.

We can help you with migration to the latest RavenDB

Contact Us Now
see on GitHub

Dynamic reporting

In order to explain this feature, let us start with an example. First we are creating the a simple index. The one thing to notice is that we are explicitly setting the Sort mode for Total to be Double.

Figure 1: Create index

Now we are going to Query > Reporting:

Figure 2: Go to reporting

And then we can start issue reporting queries:

Figure 2:Use reporting

This is the equivalent of doing:

select EmployeeID, sum(tot.Total) Total from Orders o join 
    (
        select sum((Quantity * UnitPrice) * (1- Discount)) Total, OrderId from [Order Details]
        group by OrderID
    ) tot
    on o.OrderID = tot.OrderID
where o.CustomerID = @CustomerId
group by EmployeeID

The nice thing about this, and what makes this feature different from standard map/reduce, is that you can filter the input data into the aggregation. In code, this would look something like this:

session.Query<Order>("Orders/Total")
  .Where(x => x.Company == "companies/1")
  .AggregateBy(x => x.Employee)
  .SumOn(x => x.Total)
  .ToList();

This reporting availability takes advantage of the dynamic aggregation feature.