摘要:Power BI 新推出的Translytical Tasks Flow功能,使用户能够直接从 Power BI 报告中自动化操作,从而简化操作流程,用户无需离开报告界面即可立即触发任务流。
Power BI 新推出的Translytical Tasks Flow功能,使用户能够直接从 Power BI 报告中自动化操作,从而简化操作流程,用户无需离开报告界面即可立即触发任务流。
Translytical task flow 由 Fabric 用户数据函数驱动,可实现多种自动化任务。用户现在可以根据报告中提供的筛选上下文和输入,以编程方式修改实现数据回写、动态通知等工作。
本文带你来体验一下Translytical任务流,详细介绍如何在 Power BI 中使用该功能实现数据回写并自动更新(基于官方示例数据集为产品添加新的描述)。
准备工作
在开始之前,你需要:
有一个PowerBI国际版账户,免费的也可以,并开启Fabric 试用。安装最新版的Power BI Desktop,并启用“Translytical Tasks Flow"和"文本切片器"预览功能。下面进入操作步骤:
创建 SQL 数据库
在Fabric中创建一个新的 SQL 数据库,并加载 AdventureWorksLT 样本数据集。
登录PowerBI服务(app.powerbi.com),进入一个工作区,点击左上角的"新建项"。
在弹出的窗口中,下拉在存储数据中选择SQL database。
输入一个数据库名称。
点击创建,稍等片刻数据库就建好了。
这个步骤可能会提醒你升级到免费的Fabric试用版,点击升级即可。
建好数据库后,点击"示例数据",将官方的 AdventureWorksLT 示例数据加载到新建的空数据库中。
加载完成后,就能看到数据库中的每个表。
创建用户数据函数
用户数据函数是实现自动任务流的核心组件,它允许 Power BI 调用 Python 代码执行任务。本步骤将创建一个数据回写 的函数,用于将用户输入的产品描述写入 AdventureWorksLT 数据库的表中。
返回到同一个工作区中,再次点击左上角的“新建项”,下拉在开发数据中点击“用户数据函数”。
输入一个函数名:
然后就能看到函数编辑窗口。
创建连接时,会自动为连接创建别名。 记下 别名 值(上图中的第一项demosql),以便在后续步骤中使用。
添加函数代码
在用户数据函数中添加代码,以便将数据写入 SQL 数据库的表中。
复制下面的代码:
import fabric.functions as fnimport uuidudf = fn.UserDatafunctions@udf.connection(argName="sqlDB",alias="") @udf.function # Take a product description and product model ID as input parameters and write them back to the SQL database# Users will provide these parameters in the PowerBI reportdef write_one_to_sql_db(sqlDB: fn.FabricSqlConnection, productDescription: str, productModelId:int) -> str: # Error handling to ensure product description doesn't go above 200 characters if(len(productDescription) > 200): raise fn.UserThrownError("Descriptions have a 200 character limit. Please shorten your description.", {"Description:": productDescription}) # Establish a connection to the SQL database connection = sqlDB.connect cursor = connection.cursor # Insert data into the ProductDescription table insert_description_query = "INSERT INTO [SalesLT].[ProductDescription] (Description) OUTPUT INSERTED.ProductDescriptionID VALUES (?)" cursor.execute(insert_description_query, productDescription) # Get the result from the previous query results = cursor.fetchall # In real-world cases, call an API to retrieve the cultureId # For this example, generate a random Id instead cultureId = str(uuid.uuid4) # Insert data into the ProductModelProductDescription table insert_model_description_query = "INSERT INTO [SalesLT].[ProductModelProductDescription] (ProductModelID, ProductDescriptionID, Culture) VALUES (?, ?, ?);" cursor.execute(insert_model_description_query, (productModelId, results[0][0], cultureId[:6])) # Commit the transaction connection.commit cursor.close connection.close return "Product description was added"粘贴替换代码编辑框中原有示例代码。
并将代码中的""替换为你创建的数据库别名,如上图。
运行测试函数
点击“publish”发布函数。
发布函数后,将鼠标悬停在函数资源管理器菜单上的write_one_to_sql_db函数上,然后选择“运行”图标。
在运行界面上,输入两个必需的参数,第一个框可以是任意文本(不超过200个字符),第二个框中填写1至127的任意整数。
点击运行按钮测试,没有报错,说明上面创建函数成功,关闭“运行”页,至此PowerBI服务端操作完成。
PowerBI desktop中连接数据库
以 DirectQuery 模式连接到 SQL 数据库。
打开最新版的PowerBI desktop,登录与前面相同的账户,然后选择 OneLake 目录SQL database。
在 OneLake 目录 窗口中,选择前面创建的SQL数据库。
成功连接到数据库后,将打开 导航器 窗口。 选择下表,然后选择“ 加载”:
SalesLT.ProductDescriptionSalesLT.ProductModelSalesLT.ProductModelProductDescription连接模式选择"DirectQuery"
这样,就把云端创建的SQL数据库中的这几张表加载到PowerBI模型中了:
PowerBI desktop中创建报表
创建一个交互式报告,包含产品选择表格、文本输入框和触发回写的按钮。
首先在PowerBI中利用加载的表,制作两个表格:
然后在画布上插入一个文本切片器,并设置文本切片器的标题:
在画布上再插入一个空白的按钮:
按钮的操作属性打开,类型选择“数据函数”。
注:如果你没有看到数据函数,可能你的版本不是最新版,或者预览功能中没有勾选“Translytical Tasks Flow” 。
然后按下图选择该按钮操作的各个属性,都是前面已经创建好的工作区名称、函数名称以及文本切片器名称。
其中最后一项fx条件格式的设置如下图,选择SalesLT.ProductModel表中的ProductModelID字段,摘要为最大值。
然后对按钮做一下美化,主要是设置"默认"状态和"正在加载"状态的文本:
至此,报表创建完成,整个制作流程结束。
下面可以在测试一下回写效果。
还可以将这个报告继续发布到PowerBI服务中,发布后工作区打开这个报告,如果无法显示内容,提示缺少凭据:
可以请找到这个报告的语义模型的数据源设置,点击编辑凭据:
然后选择适当的身份验证方法(Basic 采用用户名和密码, OAuth2 支持使用当前帐户进行单一登录,选OAuth2更简单)。
这样工作区的报告就可以正常显示了,数据回写的效果与上面看到的一样。
通过本教程,就实现了Power BI 报告利用 Translytical 任务流实现数据回写。你可以选择产品、输入一段文字描述并将其保存到 SQL 数据库,实时查看更新结果,这种方法非常适合需要交互式数据注释的场景。
这种方式要比之前分享的利用Power Apps实现数据回写更简单更丝滑。
Translytical task flows 弥合了分析洞察与运营执行之间的鸿沟,将 Power BI 从一个纯粹的报告单向查看工具转变为一个双向的分析和互动平台,以后我们也会分享它的更多用法。
来源:走心科技圈儿