本文档详细介绍了如何在仪表盘中集成和使用Python组件,包括数据查询、处理、可视化以及动态参数绑定的技术实现,并提供了完整的代码示例与输出规范。关于在仪表盘界面中Python组件的功能使用详见:Python组件 。
1 使用过程样例
1、使用分析模式,输入问句执行一个查询,点击 添加到仪表盘 按钮,如下图所示:
2、页面自动跳转到仪表盘页面,并且会显示刚才的查询结果,如下图所示:
3、点击 编辑 按钮,可以修改python代码,如下图所示
2 手工编写python代码
2.1 修改代码示例
上述问句查询的是:各年的海尔以及类似品牌的销售额和同比。
我们现在想修改下代码,除了查出“品牌”,还希望查出“产品名称”,效果如下图所示:
2.2 代码解读
在仪表盘Python组件中,这里只会贴一个代码片段,然后系统会自动将用户编写的代码片段提交到后台的Jupyter Kernel中执行。一些基础包已在Jupyter Kernel中初始化了,当然也可以在该代码片段中添加所需的包,但只能添加Jupyter容器中已导入的包。
# 查询各年海尔及类似品牌的销售额和同比数据 sql_json = { "sel": ["销售_年月", "品牌", "产品名称" ,"销售额", "销售额同比增长率"], "from": "销售表", "conds": [${品牌}] } df_sales = detail_trend_data_query_assistant(sql_json) # 提取年份信息 df_sales['年'] = df_sales['销售_年月'].str[:4] # 按年汇总数据 df_result = df_sales.groupby(['年', '品牌', '产品名称']).agg({ '销售额': 'sum', '销售额同比增长率': 'mean' }).reset_index() # 输出结果 import json json_result = json.dumps([{"output_variable_name": "df_result", "type": "dataframe", "desc": "各年海尔及类似品牌的销售额和同比数据"}]) json_result
在上面的代码中,主要分为以下几个部分:
mql部分
sql_json = { "sel": ["销售_年月", "品牌", "产品名称" ,"销售额", "销售额同比增长率"], "from": "销售表", "conds": [${品牌}] }
执行mql函数
df_sales = detail_trend_data_query_assistant(sql_json)
- 正常的pandas对dataframe的处理
# 提取年份信息 df_sales['年'] = df_sales['销售_年月'].str[:4] # 按年汇总数据 df_result = df_sales.groupby(['年', '品牌', '产品名称']).agg({ '销售额': 'sum', '销售额同比增长率': 'mean' }).reset_index()
输出结果集
import json json_result = json.dumps([{"output_variable_name": "df_result", "type": "dataframe", "desc": "各年海尔及类似品牌的销售额和同比数据"}]) json_result
2.3 编写其他代码
2.3.1 表格输出
# 创建数据 data = { '姓名': ['张三', '李四', '王五', '赵六', '孙七'], '年龄': [20, 22, 21, 23, 20], '成绩': [85.5, 90.0, 78.5, 88.0, 92.5] } # 创建 DataFrame df_result = pd.DataFrame(data) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "df_result", "type": "dataframe", "desc": "学生成绩表"}]) json_result
2.3.2 图形输出
# 创建数据 data = { '姓名': ['张三', '李四', '王五', '赵六', '孙七'], '年龄': [20, 22, 21, 23, 20], '成绩': [85.5, 90.0, 78.5, 88.0, 92.5] } # 创建 DataFrame df_result = pd.DataFrame(data) import plotly.graph_objects as go # 创建图形 fig = go.Figure() # 添加销售额柱状图 fig.add_trace(go.Bar( x=df_result['姓名'], y=df_result['成绩'], name='成绩' )) # 设置图形布局 fig.update_layout( title='学生成绩', xaxis_title='姓名', yaxis_title='成绩', legend=dict( orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1 ) ) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "fig", "type": "plotly", "desc": "学生成绩表"}]) json_result
2.3.3 多结果集输出
# 创建数据 data = { '姓名': ['张三', '李四', '王五', '赵六', '孙七'], '年龄': [20, 22, 21, 23, 20], '成绩': [85.5, 90.0, 78.5, 88.0, 92.5] } # 创建 DataFrame df_result = pd.DataFrame(data) import plotly.graph_objects as go # 创建图形 fig = go.Figure() # 添加销售额柱状图 fig.add_trace(go.Bar( x=df_result['姓名'], y=df_result['成绩'], name='成绩' )) # 设置图形布局 fig.update_layout( title='学生成绩', xaxis_title='姓名', yaxis_title='成绩', legend=dict( orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1 ) ) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "fig", "type": "plotly", "desc": "学生成绩表"},{"output_variable_name": "df_result", "type": "dataframe", "desc": "学生成绩表2"}]) json_result
3 python代码中支持的内置函数
3.1 detail_trend_data_query_assistant
函数名称:detail_trend_data_query_assistant
函数作用:执行mql查数(基于数据模型)
函数参数:mql
示例:
# 查询各年海尔及类似品牌的销售额和同比数据 sql_json = { "sel": ["销售_年月", "品牌", "销售额", "销售额同比增长率"], "from": "销售表", "conds": [${品牌}] } df_sales = detail_trend_data_query_assistant(sql_json) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "df_sales", "type": "dataframe", "desc": "各年海尔及类似品牌的销售额和同比数据"}]) json_result
3.2 detail_sql_data_query_assistant
函数名称:detail_sql_data_query_assistant
函数作用:执行sql查数(基于数据模型)
函数参数:sql , 输出列名(数组)
示例:
# 查询各年海尔的销售额 sql_query_haier_sales = """ SELECT "数据日期"."销售_年" AS "销售年", SUM("销售表"."销售额") AS "海尔销售额" FROM "销售表" JOIN "产品表" ON "销售表"."product_id" = "产品表"."product_id" JOIN "数据日期" ON "销售表"."time_id" = "数据日期"."time_id" WHERE "产品表"."品牌" = '海尔' GROUP BY "数据日期"."销售_年" ORDER BY "销售年" """ output_field = ["销售年", "海尔销售额"] df_haier_sales = detail_sql_data_query_assistant(sql_query_haier_sales, output_field) # 输出需要的结果,并将结果按照json格式输出 import json json_result = json.dumps([{"output_variable_name": "df_haier_sales", "type": "dataframe", "desc": "各年海尔的销售额"}]) json_result
4 查询结果的输出
4.1 表格输出
# 创建数据 data = { '姓名': ['张三', '李四', '王五', '赵六', '孙七'], '年龄': [20, 22, 21, 23, 20], '成绩': [85.5, 90.0, 78.5, 88.0, 92.5] } # 创建 DataFrame df_result = pd.DataFrame(data) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "df_result", "type": "dataframe", "desc": "学生成绩表"}]) json_result
Python组件的输出结果,需要输出一个json格式的描述。
import json json_result = json.dumps([{"output_variable_name": "df_result", "type": "dataframe", "desc": "学生成绩表"}]) json_result
输出描述是一个数组,可以输出多个结果。
[ { "output_variable_name" : "df_result", "type" : "dataframe", "desc" : "学生成绩表" } ]
key | key说明 | 描述 |
---|---|---|
output_variable_name | 输出参数变量名称 | 需要在代码中存在的变量名 |
type | 输出类型 | dataframe plotly text |
desc | 输出描述 |
4.2 图形输出
# 创建数据 data = { '姓名': ['张三', '李四', '王五', '赵六', '孙七'], '年龄': [20, 22, 21, 23, 20], '成绩': [85.5, 90.0, 78.5, 88.0, 92.5] } # 创建 DataFrame df_result = pd.DataFrame(data) import plotly.graph_objects as go # 创建图形 fig = go.Figure() # 添加销售额柱状图 fig.add_trace(go.Bar( x=df_result['姓名'], y=df_result['成绩'], name='成绩' )) # 设置图形布局 fig.update_layout( title='学生成绩', xaxis_title='姓名', yaxis_title='成绩', legend=dict( orientation="h", yanchor="bottom", y=1.02, xanchor="right", x=1 ) ) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "fig", "type": "plotly", "desc": "学生成绩表"}]) json_result
import json json_result = json.dumps([{"output_variable_name": "fig", "type": "plotly", "desc": "学生成绩表"}]) json_result
key | key说明 | 描述 |
---|---|---|
output_variable_name | 输出参数变量名称 | 需要在代码中存在的变量名 |
type | 输出类型 | dataframe plotly text |
desc | 输出描述 |
4.3 字符串输出
out_text = "你好,这是一个文本输出" # 输出结果 import json json_result = json.dumps([{"output_variable_name": "out_text", "type": "text", "desc": "学生成绩表"}]) json_result
# 输出结果 import json json_result = json.dumps([{"output_variable_name": "out_text", "type": "text", "desc": "学生成绩表"}]) json_result
key | key说明 | 描述 |
---|---|---|
output_variable_name | 输出参数变量名称 | 需要在代码中存在的变量名 |
type | 输出类型 | dataframe plotly text |
desc | 输出描述 |
5 参数的使用
仪表盘中如何设置筛选器应用于Python组件的操作说明,详见:绑定筛选器。
5.1 样例一
out_text = "你好,这是一个文本输出"+ str(${品牌}) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "out_text", "type": "text", "desc": "学生成绩表"}]) json_result
out_text = "你好,这是一个文本输出"+ str(${品牌})
5.2 样例二
sql_json = { "sel": ["销售_年月", "品牌", "销售额", "销售额同比增长率"], "from": "销售表", "conds": [${品牌}] } df_sales = detail_trend_data_query_assistant(sql_json) # 输出结果 import json json_result = json.dumps([{"output_variable_name": "df_sales", "type": "dataframe", "desc": "各年海尔及类似品牌的销售额和同比数据"}]) json_result
sql_json = { "sel": ["销售_年月", "品牌", "销售额", "销售额同比增长率"], "from": "销售表", "conds": [${品牌}] }