Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?

Posted

技术标签:

【中文标题】Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?【英文标题】:Power BI: How to use Python with multiple tables in the Power Query Editor? 【发布时间】:2019-01-27 13:39:17 【问题描述】:

如何使用 Python 脚本创建一个新表,该脚本使用两个现有表作为输入?例如,通过使用pandas merge 执行left join

一些细节:

使用Home > Edit queries,您可以在Transform > Run Python Script 下使用Python。这将打开一个Run Python Script 对话框,告诉您'#dataset' holds the input data for this script。如果您只需单击OK 并查看公式栏,您会发现相同的短语:

= Python.Execute("# 'dataset' holds the input data for this script#(lf)",[dataset=#"Changed Type"])

这还在Applied Steps 下添加了一个名为Run Python script 的新步骤,您可以在其中通过单击右侧的齿轮符号来编辑 Python 脚本:

如何更改该设置以引用多个表?


样本数据

这里有两个可以存储为 CSV 文件并使用 Home > Get Data > Text/CSV 加载的表

表 1

Date,Value1
2108-10-12,1
2108-10-13,2
2108-10-14,3
2108-10-15,4
2108-10-16,5

表2

Date,Value2
2108-10-12,10
2108-10-13,11
2108-10-14,12
2108-10-15,13
2108-10-16,14

【问题讨论】:

【参考方案1】:

这与针对 R 脚本 here 描述的挑战相同。该设置也适用于 Python。但是,我发现这种方法有一个缺点:它将新连接或计算的表存储为先前表之一的编辑版本。以下建议将演示如何在不更改输入表的情况下生成全新的计算表(除了将日期列的数据类型从Date 更改为Text,因为this。)

简答:

Power Query editor,按照以下步骤操作:

    将两列中Date columns的数据类型改为Text

    单击Enter Data点击OK

    激活新的Table3 并使用Transform > Run Python Script点击OK

    激活编辑栏并将其中的内容替换为= Python.Execute("# Python:",[df1=Table1, df2=Table2])。点击Enter

    如果系统提示您这样做,请在下一步中单击 Edit PermissionRun

    Applied Steps 下,在名为Run Python Script 的新步骤中,单击齿轮图标以打开Run Python Script 编辑器。

    在下方插入sn-p,然后点击OK

代码:

import pandas as pd
df3 = pd.merge(df1, df2, how = 'left', on = ['Date'])
df3['Value3'] = df1['Value1']*df2['Value2']

df3旁边,点击Table,就是这样:

详情:

必须非常仔细地遵循上面的列表才能使事情正常进行。所以这里是所有肮脏的小细节:

1.使用Get Data将表格作为CSV文件加载到Power BI Desktop中。

2.点击Edit Queries

3.Table1中,点击Date column旁边的符号,选择Text并点击Replace Current

4.Table2做同样的事情

5.Home 标签上,点击Enter Data

6.在出现的框中,除了点击OK之外别无他法。

7.这将在Queries下插入一个名为Table3的空表,这正是我们想要的:

8. 转到Transform 标签并点击Run Python Script

9. 这将打开Run Python Script 编辑器。您可以从这里开始编写脚本,但这会使接下来的步骤变得不必要地复杂。所以什么都不做,点击OK

10. 在公式栏中,您将看到公式= Python.Execute("# 'dataset' holds the input data for this script#(lf)",[dataset=#"Changed Type"])。请注意,您在已应用的步骤下有一个名为 Run Python Script 的新步骤:

11.上面的截图中有几个有趣的细节,但首先我们要分解函数= Python.Execute("# 'dataset' holds the input data for this script#(lf)",[dataset=#"Changed Type"])的参数。

"# 'dataset'" holds the input data for this script#(lf)" 部分只是插入您可以在Python Script Editor 中看到的注释。所以这并不重要,但你也不能把它留空。我喜欢使用更短的东西,比如"# Python:"

[dataset=#"Changed Type"] 部分是指向处于Changed Type 下状态的空Table3 的指针。因此,如果您在插入 Python 脚本之前所做的最后一件事不是更改数据类型,那么这部分看起来会有所不同。然后使用dataset 作为pandas 数据框在您的python 脚本中提供该表。考虑到这一点,我们可以对公式进行一些非常有用的更改:

12. 将公式栏更改为= Python.Execute("# Python:",[df1=Table1, df2=Table2]),然后点击Enter。这将使Table1Table2 分别作为两个名为df1df2 的pandas 数据框可用于您的Python 脚本。

13.点击Applied StepsRun Python script旁边的齿轮(还是一朵花?)图标:

14. 插入以下 sn-p:

代码:

import pandas as pd
df3 = pd.merge(df1, df2, how = 'left', on = ['Date'])
df3['Value3'] = df1['Value1']*df2['Value2']

这将在Date column 上连接df1df2,并插入一个名为Value3 的新计算列。不太花哨,但通过此设置,您可以在 Power BI 世界中使用您的数据和 Python 的强大功能做任何您想做的事情。

15.点击OK,你会看到这个:

您会看到df3 列在蓝色方块中的输入数据框df1df2 下。如果您已在 Python 脚本中指定任何其他数据框作为计算步骤,它们也会在此处列出。要将其变成 Power BI 的可访问表,只需单击绿色箭头所示的Table

16. 就是这样:

请注意,Date column 的数据类型默认设置为 Date,但您可以如前所述将其更改为 Text

单击Home > Close&Apply 退出Power Query Editor 并返回到Power BI Desktop 中所有开始的位置。

【讨论】:

就像一个魅力,谢谢队友,唯一的问题是这如何在云中执行?还是可以在云端执行?说当我的数据刷新时python脚本也会运行吗?如果是这样,它从哪里运行?目前它从我的本地机器上运行(甚至不能使用虚拟环境......悲伤的脸) @Datanovice 你肯定问对了问题!!! Python 的灵活性在 PowerBI 中似乎仍然非常有限。当我开始在 PowerBI 中弄乱它时,您所要求的肯定是不可能的。老实说,我不确定现在的情况如何...... 我明白了,然后只能在桌面上使用 - 这是有道理的(并且使任何类型的 ETL 都无用),但在转移到数据块或其他东西之前适用于一次性点击或 POC。 @Datanovice 有时我就是喜欢犯错!! Python visualizations in Power BI Service 我已按照此处列出的步骤进行操作,但是当我到达第 12 步(更改公式栏以访问不同的数据集)时,我收到以下错误:“Formula.Firewall: Query 'Table1' (step '运行 Python 脚本') 引用其他查询或步骤,因此它可能无法直接访问数据源。请重建此数据组合。"。有解决办法吗?【参考方案2】:

您可以在高级编辑器中创建空白查询并替换其内容:

let
    Source = Python.Execute("# Python:#(lf)",[df1=Table1, df2=Table2])
in
    Source

在您可以单击 Source 旁边的齿轮后,将您的 python 代码添加到您可以使用 df1 和 df2 的位置。

【讨论】:

简单有效。

以上是关于Power BI:如何在 Power Query 编辑器中将 Python 与多个表一起使用?的主要内容,如果未能解决你的问题,请参考以下文章

如何将指数平滑模型预测值获取到 POWER BI/POWER Query 数据集?

Power-BI:在数据区添加列或在 Power-Query 中添加列

Power BI-Power Query实现九九乘法口诀

在 Power Query 中调用 Power BI API

power bi 如何获取数据做可视化

在 Power Bi 中使用 Power Query M 的上一周日期