在Power BI中使用“编辑查询”和“R”对多个表/数据集执行操作

时间:2017-07-04 05:45:23

标签: r powerbi

我在Power BI文件中有两个表tbl_A and tbl_B,我想使用Run R Script中的Edit Queries功能进行转换和分析。

enter image description here

这包括处理缺失值和连接表。但是,当启动R时,似乎我一次只能在一个表上进行操作。这是因为Run R Script功能仅导入单击Run R Script按钮时处于活动状态的表中的数据。然后将此数据存储在dataset变量中。

enter image description here

如果这是正确的,在我看来,在Power BI中R`的实际使用将非常有限。我知道我可以在之前加入表我释放R。对于像这样的简单情况,这将是一个可行的解决方案,但肯定不适用于更复杂的数据结构。有关如何在Power BI中对 R 的多个表进行操作的任何建议吗?

1 个答案:

答案 0 :(得分:3)

简短版:

编辑查询中,插入R脚本时,只需在公式栏中添加[dataset = "Renamed Columns", dataset2 = tbl_A]即可。在这种情况下,Renamed Columns引用表的状态(在 APPLIED STEPS 下),您在其中插入R脚本,tbl_A引用另一个表,即可以使用。并检查有关隐私的所有设置。

长版

跟进我的评论,这是一个基于business intelligence blog的建议和PowerBI forum中的贡献的解决方案:

首先,您必须编辑一些设置。转到选项和设置|选项。在隐私下,选择始终忽略隐私级别设置。你自己冒风险......

enter image description here

现在,转到选项和设置|数据源设置。选择源并单击编辑权限。将其设置为 Public

enter image description here

现在我们很高兴:

我要从头开始,因为我不知道PowerBI会触发任何其他数据加载方法的怪癖。我有两个单独的Excel文件,每个文件分别包含一个名为tbl_Atbl_B的工作表。 这两个表的数据如下所示:

tbl_A数据

Date        Price1  Price2
05.05.2016  23,615  24,775
04.05.2016  23,58   24,75
03.05.2016  0       24,35
02.05.2016  22,91   24,11
29.04.2016  22,93   24,24

tbl_A屏幕截图

enter image description here

tbl_B数据

Date        Price3  Price4
02.06.2016  19,35   22,8
01.06.2016  19      22,35
31.05.2016  19,35   22,71
30.05.2016  15,5    21,85
27.05.2016  19,43   22,52

tbl_B屏幕截图

enter image description here

在PowerBI的主窗口中,使用获取数据加载tbl_A

enter image description here

tbl_B执行相同操作,以便在 Fields 菜单下最终得到两个单独的表:

enter image description here

单击 Home 选项卡下的编辑查询,确保 Formula Bar 可见。如果没有,您可以在查看

下激活它

enter image description here

根据表的加载方式,PowerBI将在此过程中添加几个步骤。这些步骤在查询设置

下可见

enter image description here

除其他外,PowerBI将日期的数据类型更改为,您猜对了,Date。这可以trigger problems以后。为避免这种情况,我们可以将两个表中的日期数据类型更改为 Text

enter image description here

在为两个表完成此操作后,请确保tbl_B处于活动状态,并查看查询设置。您可以在数据加载过程中添加新步骤Changed Type

enter image description here

我们将添加另一个步骤,以使我们即将推出的R脚本尽可能简单。在该脚本中,我们将使用rbind()函数加入表格。除非不同表中的列名相同,否则这将触发错误。因此,请继续将B列中的名称分别从Price3Price4更改为Price1Price2

enter image description here

现在,查询设置下的已应用步骤应如下所示:

enter image description here

最后一步的名称至关重要,因为您在编写R时必须引用重命名的列(或其他任何您想要调用的列)脚本。最后我们可以做到这一点。

转换下,单击运行R脚本。如下图所示,变量dataset将包含脚本的原始数据。在这种情况下,当您单击运行R脚本时,如果tbl_B是活动表,则数据框将为tbl_B

enter image description here

现在,保持脚本不变,单击确定,然后查看公式栏:

enter image description here

上面的图片告诉我们两件重要的事情。首先,我们可以看到到目前为止流程已经顺利进行,我们有一个空表。其次,我们可以看到dataset我们在步骤 tbl_B之后留下的状态中引用了Renamed Columns。如果您在其他地方阅读过这些内容,那么这一部分可能会令人困惑。在公式栏中,您可以通过添加, dataset2=tbl_A来输入第二个数据集,以便公式现在如下所示:

enter image description here

点击输入

查询设置下,您将看到可以编辑R脚本的新步骤:

enter image description here

点击它返回R并添加这个小片段:

df_B <- dataset
df_A <- dataset2
df_temp <- rbind(df_A, df_B)

output <- df_temp

当您点击确定时,这就是您所看到的:

enter image description here

没关系,公式栏看起来像一团糟,只需点击 output 旁边的 Table

就是这样!!

enter image description here

转到主页并点击关闭&amp;应用退出查询编辑器。现在,您可以在 Fields 下的R脚本中检查输出,或者在 Data 选项卡中检查输出,如下图所示:

enter image description here

最终结果将是原始tbl_B的一个版本,其中添加了tbl_A的列。不太花哨,但既然你已经在你的R脚本中组合了两个数据集,你就能够将R的更大部分释放到你的工作流程中。