Power BI:在查询编辑器中的多个表上使用Python

ves*_*and 2 python powerbi

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

一些细节:

使用Home > Edit queries你可以使用Python Transform > Run Python Script.这将打开一个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
Run Code Online (Sandbox Code Playgroud)

表2

Date,Value2
2108-10-12,10
2108-10-13,11
2108-10-14,12
2108-10-15,13
2108-10-16,14
Run Code Online (Sandbox Code Playgroud)

ves*_*and 8

这与此处针对R脚本描述的挑战相同.该设置也适用于Python.但是,我发现approcah有一个缺点:它将新的连接或计算表存储为以前表之一的编辑版本.下面的建议将演示如何制作一个完全新的计算表,而不改变输入表(除了更改日期列的数据类型从DateText因为这个.)

简短回答:

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

  1. Date columns两列中的数据类型更改为Text.

  2. 点击Enter Data.只需点击OK.

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

  4. 激活公式栏并替换其中的内容= Python.Execute("# Python:",[df1=Table1, df2=Table2]).点击Enter.

  5. 如果系统提示您这样做,请单击Edit PermissionRun执行下一步.

  6. Applied Steps命名的新步骤中Run Python Script,单击齿轮图标以打开Run Python Script编辑器.

  7. 插入下面的代码段并单击OK.

码:

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

df3单击旁边的Table,就是这样:

在此输入图像描述

细节:

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

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

2.单击 Edit Queries.

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

在此输入图像描述

4.用同样的方法Table2

5.Home选项卡上,单击Enter Data

6.在出现的框中,除了单击之外别无其他操作OK.

在此输入图像描述

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

在此输入图像描述

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"]).请注意,您在Applied Steps下面有一个新步骤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"]是指向Table3它所处状态的空指针Changed Type.因此,如果在插入Python脚本之前做的最后一件事是改变数据类型,那么这部分看起来会有所不同.然后,使用datasetpandas数据框在python脚本中提供该表.考虑到这一点,我们可以对公式做出非常有用的修改:

12.将公式栏更改为= Python.Execute("# Python:",[df1=Table1, df2=Table2])并点击Enter.这将使Table1Table2可供您Python脚本为一个名为两只大熊猫dataframes df1df2分别.

13.点击齿轮(或者是花?)旁边的图标Run Python scriptApplied Steps:

在此输入图像描述

14.插入以下代码段:

码:

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

这将加入df1df2Date column,并插入一个新的名为计算列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 脚本也会运行吗?如果是的话它从哪里跑?目前它从我的本地计算机运行(甚至不能使用虚拟环境..悲伤的表情) (2认同)
  • 我已按照此处列出的步骤进行操作,但当我到达步骤 12(更改公式栏以访问不同的数据集)时,出现以下错误:“Formula.Firewall:查询“Table1”(步骤“运行 Python 脚本”)引用其他查询或步骤,因此它可能无法直接访问数据源。请重建此数据组合。”。有解决方法吗? (2认同)

Vit*_*kis 6

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

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

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