![Logo](https://qcloudimg.tencent-cloud.cn/raw/ec986f1f1e4266f4c6b1389cc5196745.png)
数据仪表盘
基于人工智能的数据分析与图表生成工具
# 能力简介
一款可编写查询语句、生成统计图表的工具,并支持分组展示图表,构建个性化的数据仪表盘。同时,借助腾讯混元大模型的AI能力,用户只需简单描述统计分析需求,即可快速准确地生成图表。该工具致力于让您的业务分析和商业决策更加简单和高效。
# 功能特性
数据看板: 提供统计报表展示看板,聚合展示柱状图、折线图、饼图等各类图表,支持添加自定义看板分组。
编写查询语句: 开发人员可手动编写查询语句,或修改 AI 生成的查询语句,进行数据的统计分析。
会话式 AI: 描述数据分析需求,AI 自助生成查询语句,并渲染生成图表,实现数据可视化。
打通云数据库: 支持快捷添加云开发环境的数据库集合,无需额外的数据库配置。
多平台支持: 支持 PC、H5 端访问使用,外出办公依然从容实现数据分析。
# 快速上手
# 安装 数据仪表盘模板
访问云开发控制台 > 云模板 > 模板中心,安装数据仪表盘。
等待安装完成后,单击应用右上角的打开管理端,进入数据仪表盘应用,即可开始使用。
# 配置数据源
进行数据分析前,首先需要配置用于数据分析的云数据库集合。在数据仪表盘应用中,进入数据源管理模块,单击一键自动同步,全选当前云开发环境中的所有集合,单击确认,将集合导入到数据仪表盘应用中。
数据仪表盘应用会读取集合中前5条数据,分析数据结构和字段标识,用于后续的会话式 AI 分析。为了使输入的 prompt 能够更简单,AI 能够更准确的理解数据结构,需要对集合和其中的字段进行备注的补充。在数据源管理列表中,找到需要备注的集合,单击编辑,即可打开备注编辑界面。如下图所示,补充了订单集合和其中各个字段的备注,然后单击确认进行保存即可。
# 会话式 AI 分析
切换到 ChatDB 界面,输入想要统计的数据需求,AI 仅可分析生成查询语句,对数据进行汇总计算,生成表格。建议您采用以下提示词格式进行提问:
序号 建议提示词 示例 1 统计[集合标识]中的数据,统计维度为[字段A标识],统计指标为[字段A标识]的合计值/计数值/最大值。 统计order表中的数据,统计维度为customerName,统计指标为totalAmount 2 统计[集合备注]中的数据,统计维度为[字段A备注],统计指标为[字段A备注]的合计值/计数值/最大值。 统计订单表中的数据,统计维度为客户名称,统计指标为下单金额的合计值 3 分析[集合备注]中,不同[字段A备注]的数据,分别下单/购买/使用了多少[字段B备注]。 统计订单表中的数据,统计维度为客户名称,统计指标为下单金额的合计值 4 [集合备注]表,按[日期类型的字段A备注]分析,每天每月分别下单/购买/使用了多少[字段B备注]。 订单表,按下单时间分析,每天分别下单的多少金额。 生成数据表格后,可回复想要的图表类型,生成所需的统计图表,目前支持的图表类型为:柱状图、饼图、折线图、面积图。
单击访问图表详情,可打开图表详情页,该页面可进行以下操作:
图表共享:可将页面链接发送给其他团队成员。
手动修改查询语句:如生成结果不符合预期,可修改下方的查询语句,然后单击生成预览,重新进行图表生成。
说明:
查询语句支持 MongoDB 标准的 aggregate 语句,完整语法说明请参见 db.collection.aggregate()。
切换图表类型,单击图表下方的切换按钮,可将图表切换为柱状图、折线图等其他图表样式。
生成希望收藏的图表后,回复收藏,即可将该图表收藏至数据看板 > 我的收藏中。
生成的图表会被自动记录保存在所有图表模块的历史会话中。
# 搭建数据看板
在数据看板界面中,可添加构建多图表聚合展示的数据看板,支持自定义看板分组,构建适用于不同场景的看板。
单击右上角的添加图表,可选:
查询语句:即通过编写查询语句,生成图表,详细操作见下一节编写查询语句。
AI 生成图表:通过与 AI 会话生成图表,详细操作见上一节会话式 AI 分析,被收藏的图表默认展示于我的收藏分组中。
- 单击右上角的分组,可添加、编辑看板分组。
# 编写查询语句
# 语句编写入口
在数据看板界面中,单击添加图表 > 查询语句,可打开编写查询语句界面,填写查询名称、查询语句,单击生成预览,即可生成图表,切换到所需的图表类型,选择所需分组,单击确认即可保存该图表到对应分组下的数据看板。
# 查询语句写法
# 语法说明
查询语句支持 MongoDB 标准的 aggregate 语句。
aggregate
是一个强大的方法,用于执行复杂的数据处理和分析操作。aggregate
方法使用一个管道(pipeline)来处理数据,每个阶段(stage)在管道中执行特定的操作。一个标准的 aggregate 语句格式如下:
db.collection.aggregate([ { $stage1: { /* stage1 operations */ } }, { $stage2: { /* stage2 operations */ } }, // ... more stages ... { $stageN: { /* stageN operations */ } } ], options);
查询语句完整语法说明请参见 db.collection.aggregate() ,以下提供基础说明和常用示例。
常见的 stage 及其用途:
$match
:用于过滤文档,类似于 SQL 中的WHERE
子句。$group
:用于分组文档,类似于 SQL 中的GROUP BY
子句。$project
:用于重塑文档,选择和重命名字段。$sort
:用于排序文档,类似于 SQL 中的ORDER BY
子句。$limit
:用于限制返回的文档数量,类似于 SQL 中的LIMIT
子句。$skip
:用于跳过指定数量的文档,类似于 SQL 中的OFFSET
子句。$unwind
:用于将数组字段拆分为多条文档。$lookup
:用于在集合之间进行左外连接,类似于 SQL 中的JOIN
。
- 以下是一些示例,展示了如何使用 aggregate 方法来执行不同的操作。
# 示例 1:简单的 $match
和 $group
假设我们有一个 sales 集合,包含以下文档:
{ "_id": 1, "item": "apple", "quantity": 5, "price": 10 } { "_id": 2, "item": "banana", "quantity": 10, "price": 5 } { "_id": 3, "item": "apple", "quantity": 15, "price": 10 } { "_id": 4, "item": "banana", "quantity": 20, "price": 5 }
我们想要按
item
分组,并计算每种item
的总销售量。db.sales.aggregate([ { $match: { item: { $in: ["apple", "banana"] } } }, { $group: { _id: "$item", totalQuantity: { $sum: "$quantity" } } } ]);
输出:
{ "_id": "apple", "totalQuantity": 20 } { "_id": "banana", "totalQuantity": 30 }
# 示例2:使用 $project
和 $sort
假设我们有一个
students
集合,包含以下文档:{ "_id": 1, "name": "Alice", "score": 85 } { "_id": 2, "name": "Bob", "score": 90 } { "_id": 3, "name": "Charlie", "score": 80 }
我们想要选择
name
和score
字段,并按score
降序排序。db.students.aggregate([ { $project: { _id: 0, name: 1, score: 1 } }, { $sort: { score: -1 } } ]);
输出:
{ "name": "Bob", "score": 90 } { "name": "Alice", "score": 85 } { "name": "Charlie", "score": 80 }
# 示例 3:使用 $lookup
进行连接
假设我们有两个集合:orders 和 customers。
有一个
orders
集合:{ "_id": 1, "customerId": 1, "amount": 100 } { "_id": 2, "customerId": 2, "amount": 200 }
有一个customers 集合:
{ "_id": 1, "name": "Alice" } { "_id": 2, "name": "Bob" }
我们想要将 orders 和 customers 连接起来,获取每个订单的客户信息。
db.orders.aggregate([ { $lookup: { from: "customers", localField: "customerId", foreignField: "_id", as: "customerInfo" } }, { $unwind: "$customerInfo" }, { $project: { _id: 1, amount: 1, "customerInfo.name": 1 } } ]);
输出:
{ "_id": 1, "amount": 100, "customerInfo": { "name": "Alice" } } { "_id": 2, "amount": 200, "customerInfo": { "name": "Bob" } }