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 Permission
和 Run
。
在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
。这将使Table1
和Table2
分别作为两个名为df1
和df2
的pandas 数据框可用于您的Python 脚本。
13.点击Applied Steps
下Run 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
上连接df1
和df2
,并插入一个名为Value3
的新计算列。不太花哨,但通过此设置,您可以在 Power BI 世界中使用您的数据和 Python 的强大功能做任何您想做的事情。
15.点击OK
,你会看到这个:
您会看到df3
列在蓝色方块中的输入数据框df1
和df2
下。如果您已在 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 中添加列