首先考察数据结构的复杂性的特点。在这里以微软的演示数据库 nwind.mdb为例子进行分析,现在要出订单明细报表,则涉及到的数据结构如图所示
可以发现这5张表的数据组成了一个3层的树状结构。第一层是Customers的数据,第二层是Orders,Employees组成的数据,第三层是OrderDetails,Products组成的。其意思就是说数据库中存在好几个客户,一个客户有多个订单,一个订单有多个货物。
面对这种比较复杂的数据,传统的报表工具由于采用两层的数据源模型,因此需要一次性获取数据,采用眉毛胡子一起抓的思想,这就导致可能需要编写复杂的SQL语句,例如对于订单明细报表,SQL语句可以为"SELECT Customers.CompanyName, Customers.ContactName, Customers.Phone,
OrderDetails.*, Orders.OrderDate,
Products.ProductName, Employees.FirstName, Employees.LastName
FROM ((Orders
INNER JOIN (OrderDetails
INNER JOIN Products ON OrderDetails.ProductID = Products.ProductID)
ON Orders.OrderID = OrderDetails.OrderID)
INNER JOIN Customers ON Orders.CustomerID = Customers.CustomerI