在数据库设计和开发中,避免存储任何可以从其他字段计算或重建的数据是一种惯例。因此,在 Navicat BI 中构建图表时,你可能会缺少一些数据。但这不是问题,因为 Navicat BI 提供了专门用于此目的的计算字段。在今天的博客中,我们将使用计算字段来构建图表,该图标显示每个客户的平均租赁时间(即客户在归还电影前保留电影的时间长度)。


获取客户租赁信息

正如本系列之前的博客中提到的,我们应该在设计图表前创建数据源,因为我们需要指定图表使用的数据源。数据源引用连接中的表或文件/ODBC 源中的数据,并可从不同服务器类型的表中选择数据。创建新数据源后,我们可以点击“新建数据源查询”打开查询设计器。在这里,我们可以直接在编辑器中编写 SQL 语句,使用可视化查询生成器,或从 Navicat 导入查询。下面是 SELECT 语句,它将获取客户信息、租赁金额、影片租赁日期和归还日期:



保存查询并刷新数据后,我们就能看到所有查询字段和结果集:



现在,我们可以使用 rental_date 和 return_date 字段来计算租用期限。为此,请右键单击字段列表中的 return_date(在 macOS 上按住 Control 键),然后从弹出菜单中选择新建计算字段...:



“新建计算字段”对话框中,你可以查看到很多有用的函数,包括聚合函数、日期时间函数、逻辑函数等。我们将使用 DATEDIFF() 函数计算出租日期和返回日期字段之间的天数。该函数接受一个时间单位以及开始和结束日期。我们可以阅读函数列表下方的说明,了解更多信息。我们将传递一个“D”(日)作为单位,以及两个日期字段,如下所示:



对话框底部有一个预览,告诉我们是否得到了想要的结果。

单击“确定”按钮后,我们就可以在字段列表和结果中看到新字段了:



建立每个客户的平均租赁时间图表

由于每个客户 ID 都是一个单独的数据点,因此使用散点图可能效果不错。散点图是将单个数据点沿着 X 轴和 Y 轴绘制的数据图。我们将使用 customer_id 作为 X 轴,使用 rental_duration (Average) 作为 Y 轴。只需将字段拖动到图表设计器中的 X 轴和 Y 轴字段,将平均值聚合应用到 rental_duration 上,然后,就可以立即绘制图表了!



以下是显示模式下的完整图表:



补充:显示每位客户的租赁次数


虽然平均值很有用,但显示每位客户租用一部或多部电影的次数也很有用。为此,我们可以使用聚合函数。我们将计算结果集中的金额条目数,并按 customer_id 进行分组。下面是新计算字段对话框,其中调用了 AGGCOUNT() 函数:



在图表设计器中,我们将把新的 number_of_rentals 字段拖到颜色槽中。添加升序排序后,图例项将按租用次数从少到多排序:



我们可以将光标悬停在单个数据点上,查看其详细信息。此时会出现一个工具提示,显示租用次数、customer_id 以及平均租用天数 rental_duration: