创建你的第一个 Dashboard
本节专注于为最终用户(数据分析师、业务分析师、数据科学家等)提供文档, 他们将使用 Superset 进行数据分析和探索工作流程。 除了这个站点,Preset.io在docs.preset.io 维护了一套最新的最终用户文档。
本教程针对希望在 Superset 中创建图表和仪表板的人。 我们将向你展示如何将 Superset 连接到一个新的数据库,并配置该数据库中的一个表以供分析。 你还将探索你已暴露的数据,并将可视化添加到仪表板中,以便了解从头到尾的用户体验。
连接到一个新的数据库
Superset 本身没有存储层来存储你的数据,而是与你现有的 SQL 数据库或数据存储配对。
首先,我们需要将你的数据库的连接凭据添加进来,以便能够查询和可视化其中的数据。 如果你通过 Docker compose 本地使用 Superset, 你可以跳过这一步,因为已经为你预置了一个名为 examples 的 Postgres 数据库,并在 Superset 中预先配置好了。
在右上角的 + 菜单下,选择数据,然后选择 Connect Database 选项:
然后在出现的模态窗口中选择你的数据库类型:
一旦选择了数据库,你可以在该窗口中配置许多高级选项,或者为了本教程的目的,你可以点击所有这些字段下方的链接:
请注意,如果你尝试连接到另一个本地运行的数据库(无论是在主机还是另一个容器上), 并且收到 The port is closed.
的消息,则你需要调整 HOST 为 host.docker.internal
一旦点击了那个链接,你只需要指定两件事(数据库名称和 SQLAlchemy URI):
如表单下方的文本所述,你应该参考 SQLAlchemy 文档关于创建新的连接 URI的部分,针对你的目标数据库。
点击 Test Connection 按钮确认一切正常。如果连接看起来没问题,通过点击模态窗口右下角的 Connect 按钮保存配置:
恭喜你,你刚刚在 Superset 中添加了一个新的数据源!
注册新表
既然你已经配置了数据源,现在可以选择特定的表(在 Superset 中称为 Datasets),将其暴露在 Superset 中以供查询。
导航至 Data ‣ Datasets ,然后选择右上角的 + Dataset 按钮。
一个模态窗口应该出现在你面前。 使用出现的下拉菜单选择你的 Database 、Schema 和 Table 。 在下面的例子中,我们注册了来自 examples 数据库的 cleaned_sales_data 表。
完成设置后,点击右下角的 Add 按钮。你现在应该能在数据集列表中看到你的数据集(dataset)。
自定义列属性
现在你已经注册了 dataset,可以配置列属性,以确定列在 Explore workflow 中应如何处理:
- 列是否具有时间属性?(它是否应该用于时间序列图表中的切片和切块(slicing & dicing)?)
- 列是否可过滤?
- 列是否具有维度?
- 如果它是 datetime 列,Superset 应该如何解析日期时间格式?(使用 ISO-8601 字符串模式)
Superset 语义层
Superset 有一个轻量级的语义层,为分析师提供了许多生活质量改进。 Superset 的语义层可以存储两种类型的计算数据:
- 虚拟指标:你可以编写 SQL 查询,聚合多个列的值 (例如
SUM(recovered) / SUM(confirmed)
), 并使其作为列(例如recovery_rate
)在 Explore 中可视化。允许并鼓励在指标中使用聚合函数。
你也可以在这个视图中认证指标,如果你愿意的话,为你的团队提供服务。
- 虚拟计算列:你可以编写 SQL 查询,自定义特定列的外观和行为 (例如
CAST(recovery_rate as float)
)。不允许在计算列中使用聚合函数。
在 Explore 视图中创建图表
Superset 有两个主要的界面用于探索数据:
- Explore :无代码可视化构建器。选择你的数据集(
dataset
),选择图表(chart
),自定义外观,然后发布。 - SQL Lab:用于清理、联接和准备数据以供 Explore workflow 使用的 SQL IDE
我们现在将专注于 Explore 视图来创建图表。 从 Datasets 选项卡开始 Explore workflow, 首先点击将为你的图表提供数据的 dataset 名称。
你现在面对的是一个强大的数据探索和图表迭代工作流。
- 左侧的 Dataset 视图列出了列和指标,范围限定于你当前选择的数据集。
- 图表区域下方的 Data 预览也提供了有用的数据上下文。
- 使用 Data 标签和 Customize 标签,你可以更改可视化类型,选择时间列,选择分组的指标,并自定义图表的美学。
当你使用下拉菜单自定义图表时,确保点击 Run 按钮以获取视觉反馈。
在下面的截图中,我们仅通过点击下拉菜单中的选项就制作了一个按产品线分组的时间序列条形图,以可视化我们的季度销售数据。
创建切片和仪表板
要保存你的图表,首先点击 Save 按钮。你可以:
- 将图表保存并添加到现有仪表板
- 将图表保存并添加到新仪表板
在下面的截图中,我们将图表保存到一个名为 "Superset Duper Sales Dashboard" 的新仪表板:
要发布,点击 Save and goto Dashboard。
在幕后,Superset 将创建一个切片,并在其轻量级数据层中存储创建图表所需的所有信息 (查询、图表类型、所选选项、名称等)。
要调整图表大小,首先点击右上角的编辑仪表板按钮。
然后,点击并拖动图表的右下角,直到图表布局在底层网格上定位到你喜欢的位置。
点击 Save 以保留更改。
恭喜你!你已经成功地在 Superset 中链接、分析和可视化了数据。 还有大量的其他表格配置和可视化选项,所以请开始探索并创建自己的切片和仪表板吧。
管理 Dashboard 访问权限
仪表板的访问权限是通过所有者(具有仪表板编辑权限的用户)进行管理的。
非所有者的用户访问权限可以通过以下两种方式管理:
- Dataset 权限 - 如果你向相关角色的数据集权限添加权限,它会自动授予对所有使用这些许可数据集的仪表板的隐式访问权限。
- Dashboard 角色 - 如果你启用 DASHBOARD_RBAC 功能标志,那么你可以管理哪些角色可以访问仪表板
- superset.apache.org/docs/config...
- 授予角色仪表板访问权限将绕过数据集级别的检查。拥有仪表板访问权限隐式地授予了读取仪表板中所有特色图表的权限,从而也包括了所有相关的数据集。
- 如果仪表板未指定任何角色,则应用常规的 Dataset permissions。
自定义仪表板
以下 URL 参数可用于修改仪表板的渲染方式:
standalone
:0
(默认):仪表板正常显示1
:隐藏顶部导航2
:隐藏顶部导航+标题3
:隐藏顶部导航+标题+顶级标签(tab
)
show_filters
:0
:不带过滤栏渲染仪表板1
(默认):如果启用了原生过滤器,则带过滤栏渲染仪表板
expand_filters
:- (默认):如果有原生过滤器,则带展开的过滤栏渲染仪表板
0
:带折叠的过滤栏渲染仪表板1
:带展开的过滤栏渲染仪表板
例如,在运行本地开发构建时,以下操作将禁用顶部导航并移除过滤栏: http://localhost:8088/superset/dashboard/my-dashboard/?standalone=1&show_filters=0
在 Superset 中探索数据
在本教程中,我们将通过探索一个真实数据集来介绍 Apache Superset 中的关键概念。 这个数据集包含了 2011 年英国某组织员工的飞行记录。关于每次飞行,提供了以下信息:
- 旅行者的部门。为了本教程的目的,部门名称已更改为橙色、黄色和紫色。
- 机票的价格。
- 旅行等级(经济舱、高级经济舱、商务舱和头等舱)。
- 票是单程还是往返。
- 出行日期。
- 关于出发地和目的地的信息。
- 出发地与目的地之间的距离,单位为千米(km)。
启用数据上传功能
您可能需要启用将 CSV 或 Excel 文件上传到数据库的功能。以下部分解释了如何为示例数据库启用此功能。
在顶部菜单中,选择 Data ‣ Databases 。在列表中找到 examples 数据库,并选择 Edit 按钮。
在弹出的模态窗口中,切换到 Extra 选项卡,并勾选 Allow Data Upload 复选框。 最后点击 Save 按钮。
加载 CSV 数据
从 GitHub 下载 CSV 数据集到您的计算机。在 Superset 菜单中,选择 Data ‣ Upload a CSV。
然后,将 Table Name 输入为 tutorial_flights,并从您的计算机中选择 CSV 文件。
接下来,在 Parse Dates 字段中输入文本 Travel Date。
保持所有其他选项为其默认设置,选择页面底部的 Save。
Table 可视化
现在,您应该在 Datasets 选项卡中看到 tutorial_flights 作为数据集。 点击条目以使用此数据集启动 Explore 工作流。
在本节中,我们将创建一个表格可视化来展示不同旅行等级下的航班数量和成本。
默认情况下,Apache Superset 仅显示最近一周的数据。 在我们的例子中,我们想可视化数据集中所有的数据。 点击 Time ‣ Time Range 部分,将 Range Type 更改为 No Filter。
点击Apply以保存更改。
现在,我们想通过使用 Group by 选项来指定表格中的行。 因为在这个例子中,我们想了解不同的旅行等级,所以我们在此菜单中选择 Travel Class。
接下来,我们可以使用 Metrics 选项来指定我们希望在表格中看到的度量。
COUNT(*)
,代表 table 中的行数(在这种情况下,每个旅行等级(Travel Class)的航班数量)SUM(Cost)
,代表每个旅行等级花费的总金额
最后,选择 Run Query 来查看 table 的结果。
要保存可视化结果,点击屏幕左上角的 Save。在随后的模态窗口中,
- 选择 Save as 选项并将图表名称输入为 Tutorial Table(您将能够通过 Charts 屏幕再次找到它,该屏幕可通过顶部菜单访问)。
- 选择 Add To Dashboard 并输入 Tutorial Dashboard。最后,选择 Save & Go To Dashboard。
Dashboard (仪表板)基础
接下来,我们将探索仪表板界面。如果您已经按照前一节操作,那么您应该已经打开了仪表板。 否则,您可以通过顶部菜单选择 Dashboards,然后从仪表板列表中选择 Tutorial dashboard 来导航至仪表板。
在这个仪表板上,您应该能看到在前一节中创建的表格。 选择 Edit dashboard,然后将鼠标悬停在表格上。 通过选择表格右下角(光标也会变化),您可以拖拽调整其大小。
最后,通过选择右上角的 Save changes 来保存您的修改。
Pivot Table(透视表)
在本节中,我们将使用更复杂的可视化 --- 透视表(Pivot Table),来扩展我们的分析。 到本节结束时,您将创建一个表格,展示前六个月各部门不同旅行等级下的月度飞行支出。
通过选择右上角的 + ‣ Chart 来创建一个新的图表。 再次选择 tutorial_flights 作为数据源,然后点击可视化类型进入可视化菜单。 选择 Pivot Table 可视化(您可以在搜索框中输入文本进行筛选),然后选择 Create New Chart。
在 Time 部分,保持时间列为 Travel Date(这会自动选择,因为我们数据集中只有一个时间列)。 然后选择时间粒度为月,因为每日数据对于观察模式来说太过详细。 然后选择时间范围为 2011 年的前六个月,方法是在时间范围部分点击 Last week, 然后在 Custom 中选择开始/结束
时间为2011年1月1日(1st January 2011
)和2011年6月30日(30th June 2011
), 可以直接输入日期或使用日历小部件(通过选择月份名称和年份,可以更快地移动到较远的日期)。
接下来,在 Query 部分,移除默认的 COUNT(*),添加 Cost,保持默认的 SUM 聚合。 请注意,Apache Superset 会通过列表左侧列的符号指示指标的类型(ABC 表示字符串,# 表示数字,钟面表示时间等)。
在 Group by 中,选择 Time :这将自动使用我们在时间部分定义的 Time Column(时间列
) 和 Time Grain(时间粒度
) 选择。
在 Columns 中,首先选择 Department,然后选择 Travel Class。 一切就绪,让我们 Run Query 来看看一些数据吧!
您应该能在行中看到月份,在列中看到 Department 和 Travel Class。 将此图表发布到您之前创建的现有 Tutorial Dashboard 上。
Line Chart(折线图)
在本节中,我们将创建一个折线图来理解整个数据集中按月平均机票价格的变化。
在时间部分,如同之前一样,保持时间列为 Travel Date 和 Time Grain 为月, 但这次对于 Time range 选择无过滤,因为我们想查看整个数据集。
在指标部分,移除默认的 COUNT(*)
指标,而是添加 AVG(Cost)
,以展示平均值。
接下来,选择 Run Query 来在图表上展示数据。
看起来怎么样?我们可以看到平均成本在十二月上升。 然而,也许将单程和往返票合并在一起并不合理,而是应该为每种票型分别显示两条线。
让我们通过在 Group by box(按...分组框)
中选择 Ticket Single or Return, 然后再次选择 Run Query 来实现这一点。 不错!我们可以看到平均而言,单程票比往返票便宜,而十二月的大峰值是由往返票造成的。
我们的图表看起来已经很不错了,但是让我们通过前往左侧窗格的 Customize 标签页来进行更多定制。 在这个窗格内,尝试改变颜色方案(Color Scheme
),通过在显示范围过滤(Show Range Filter
)下拉菜单中选择无来移除范围过滤, 并使用 X 轴 Label 和 Y 轴 Label 添加一些标签。
一旦完成,将图表发布在您的 Tutorial Dashboard 上。
Markup(标记)
在本节中,我们将在仪表板上添加一些文本。如果您已经在仪表板上,可以通过顶部菜单选择 Dashboards, 然后从仪表板列表中选择 Tutorial dashboard 来导航至此。通过选择 Edit dashboard 进入编辑模式。
在 Insert 组件窗格中,将 Markdown 框拖放到仪表板上。寻找蓝色线条,它们指示框将放置的位置。
现在,要编辑文本,选择该框。您可以输入文本, 采用 markdown 格式(有关此格式的更多信息,请参阅 此 Markdown 速查表)。 您可以使用框顶部的菜单在 Edit 和 Preview 之间切换。
要退出,选择仪表板上的任何其他部分。最后,别忘了使用 Save changes 来保留您的修改。
发布你的 Dashboard
如果您已经遵循了前一节中概述的所有步骤,那么您应该拥有一个如下所示的仪表板。 如果愿意,您可以通过选择 Edit dashboard 并拖放来重新排列仪表板的元素。
如果您想让其他用户也能访问您的仪表板,只需在左上角仪表板标题旁选择 Draft,将其状态更改为已发布即可。 您也可以通过选择星形图标将此仪表板设为收藏。
Annotations(注释)
Annotations 允许您向图表添加额外的上下文。 在本节中,我们将向在前一节中制作的 Tutorial Line Chart 添加注释。 具体来说,我们将添加英国民航局因冰岛 Grímsvötn 火山爆发而取消部分航班的日期(23-25 May 2011)。
首先,通过导航至 Manage ‣ Annotation Layers 来添加注释层。 通过选择绿色加号添加新记录来添加新的注释层。 输入名称 Volcanic Eruptions 并保存。我们可以使用这个层来引用多个不同的注释。
接下来,通过导航至 Manage ‣ Annotations,然后选择绿色加号创建新的注释。 然后,选择 Volcanic Eruptions 层, 添加简短描述 Grímsvötn 以及爆发日期(23-25 May 2011),最后保存。
然后,通过前往图表,从列表中选择 Tutorial Line Chart 来导航至折线图。 接下来,转到 Annotations 和 Layers 部分,选择添加注释层。在此对话框中:
- 将层命名为 Volcanic Eruptions
- 将 Annotation Layer Type 更改为 Event
- 设置 Annotation Source 为 Superset annotation
- 指定 Annotation Layer 为Volcanic Eruptions
选择 Apply 以在图表上显示您的注释。
如果需要,您可以通过更改显示配置部分中的设置来更改注释的外观。 否则,选择 OK ,最后选择 Save 来保存您的图表。 如果您保持默认选择覆盖图表,您的注释将被保存到图表中, 并且也会自动出现在 Tutorial Dashboard 中。
高级分析
在本节中,我们将探索 Apache Superset 的高级分析功能,该功能允许您对数据应用额外的转换。转换的三种类型是:
设置基础图表
在本节中,我们将设置一个基础图表,然后可以对该图表应用不同的 高级分析 功能。 首先,使用相同的 tutorial_flights 数据源和 Line Chart 可视化类型创建一个新的图表。 在时间部分,将时间范围设置为 1st October 2011 至 31st October 2011。
接下来,在查询部分,将指标更改为 Cost 的总和。 选择 Run Query 以显示图表。您应该能看到 2011 年十月每天的总成本。
最后,将可视化保存为 Tutorial Advanced Analytics Base, 并将其添加到 Tutorial Dashboard 中。
Rolling Mean(移动平均)
数据中存在大量波动,这使得很难识别任何趋势。我们可以采取的一种方法是显示时间序列的滚动平均值。 为此,在 Advanced Analytics 的 Moving Average 子部分中, 选择 mean 在 Rolling 框中,并在 Periods 和 Min Periods 中都输入 7。 周期是以时间粒度(Time Grain)的倍数表示的滚动周期(rolling period)长度。 在我们的示例中,时间粒度是一天,因此滚动周期是 7 天,例如在2011年10月7日, 显示的值将对应于2011年10月的前七天。 最后,通过将 Min Periods 指定为 7,我们确保平均值始终基于 7 天计算,避免了任何启动期。
在选择 Run Query 显示图表后,您会发现数据的波动较小,且序列开始得更晚,因为启动期被排除在外。
将图表保存为 Tutorial Rolling Mean,并将其添加到 Tutorial Dashboard 中。
Time Comparison(时间比较)
在本节中,我们将比较时间序列中的值与一周前的值。 首先,通过在顶部菜单中选择 Charts, 然后在列表中选择可视化名称来打开 Tutorial Advanced Analytics Base 图表 (或者,找到 Tutorial Dashboard 中的图表,并从该可视化的菜单中选择 Explore chart)。
接下来,在 Advanced Analytics 的 Time Comparison 子部分中, 通过键入 "minus 1 week(减去1周)"(注意,此框接受自然语言输入)来输入时间偏移。 运行查询以查看新图表,其中包含一个额外的系列,其值相同,但时间向后移动了一周。
然后,将 Calculation type(计算类型) 更改为 Absolute difference(绝对差),并选择 Run Query。 我们现在只能看到一个序列,这一次显示的是我们之前看到的两个序列之间的差异。
将图表保存为 Tutorial Time Comparison,并将其添加到 Tutorial Dashboard 中。
Resampling the data(重采样数据)
在本节中,我们将重采样数据,以便我们不是拥有每日数据,而是拥有每周数据。 如前一节所述,重新打开 Tutorial Advanced Analytics Base 图表。
接下来,在 Advanced Analytics 的 Python 函数子部分中, 在 Rule 中输入 7D,对应于七天,在 Method 中输入 median,并通过选择 Run Query 来显示图表。
请注意,我们现在每隔 7 天有一个数据点。 在我们的情况下,显示的值对应于七个每日数据点内的中位数。 有关本节中各种选项含义的更多信息,请参阅 Pandas文档。
最后,将您的图表保存为 Tutorial Resample,并将其添加到 Tutorial Dashboard 中。 前往 tutorial dashboard 查看四个图表并排显示,比较不同的输出。