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

时间:2018-08-21 11:13:34

标签: python powerbi

如何使用使用两个现有表作为输入的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脚本:

enter image description here

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


样本数据

这里有两个表,可以存储为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

2 个答案:

答案 0 :(得分:5)

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

简短答案:

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']

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

enter image description here

详细信息:

要使工作正常,必须非常小心地遵循上面的列表。所以这是所有肮脏的小细节:

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

2。。点击Edit Queries

3。。在Table1中,单击Date column旁边的符号,选择Text,然后单击Replace Current

enter image description here

4。。对Table2

执行相同的操作

5。。在Home标签上,单击Enter Data

6。。在出现的框中,除了单击OK以外,什么也不做。

enter image description here

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

enter image description here

8。。转到Transform标签,然后单击Run Python Script

enter image description here

9。。这将打开Run Python Script编辑器。您可以 在此处开始编写脚本,但这会使后续步骤不必要地变得复杂。因此,除了单击OK,什么都不要做:

enter image description here

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

enter image description here

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脚本之前所做的最后一件事情是更改数据类型,而这又看起来不一样。然后使用dataset作为大熊猫数据框在您的python脚本中提供该表。考虑到这一点,我们可以对som进行非常有用的更改:

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

13。。单击Run Python scriptApplied Steps旁边的齿轮(或它是一朵花?)图标:

enter image description here

14。。插入以下代码段:

代码:

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

这将在df1上将df2Date column连接起来,并插入一个名为Value3的新计算列。不太花哨,但是通过此设置,您可以使用Power BI世界中的数据以及Python的功能执行任何操作

enter image description here

15。。点击OK,您将看到以下内容:

enter image description here

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

16。就是这样:

enter image description here

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

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

答案 1 :(得分:1)

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

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

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