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

Operations on multiple tables / datasets with Edit Queries and R in Power BI

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

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

如果这是正确的,那么在我看来,R` 在 Power BI 中的实际使用将非常有限。我知道我可以加入 tables before I unleash R。对于像这样的简单案例,这将是一个可行的解决方案,但对于更复杂的数据结构肯定不是。关于如何在 Power BI 中使用 R 对 多个 table 进行操作有什么建议吗?

短版:

编辑查询中,插入R脚本时,只需在公式栏中添加[dataset = "Renamed Columns", dataset2 = tbl_A]。在这种情况下,Renamed Columns 指的是您要插入 R 脚本的 table(在 应用步骤 下)的状态,tbl_A 指的是到您可以使用的另一个 table。并检查所有关于隐私的设置。


长版

根据我的评论,这是一个基于 business intelligence blog and contributions in the PowerBI forum:

的建议的解决方案

首先,您必须编辑一些设置。转到 选项和设置 |选项。在 隐私、select 始终忽略隐私级别设置 下。当然,风险自负...

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


现在我们可以开始了:

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

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截图

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截图


在 PowerBI 的主 window 中,使用 Get Data:

加载 tbl_A

tbl_B 执行相同的操作,这样您最终会在 Fields 菜单下得到两个单独的 table:

单击主页 选项卡下的编辑查询 并确保公式栏 是可见的。如果没有,您可以在 View:

下激活它

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

下可见

除其他外,PowerBI 将日期的数据类型更改为,您猜对了,日期。这可以以后。为避免这种情况,我们可以将 both tables 中日期的数据类型更改为 Text:

为两个 table 完成此操作后,确保 tbl_B 处于活动状态,并查看 查询设置 。你会看到在数据加载过程中添加了一个新步骤Changed Type

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

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

最后一步的名称很重要,因为您在编写自己的代码时必须引用 Renamed Columns(或您喜欢的任何其他名称) R 脚本。最后我们可以做到这一点。

转换下,单击运行 R 脚本。如下图所示,变量 dataset 将包含脚本的原始数据。在这种情况下,如果 tbl_B 在您单击 运行 R Script[=205 时处于活动状态 table,则它将以数据帧的形式 tbl_B =]:

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

上图告诉我们两件重要的事情。首先,我们可以看到到目前为止该过程进行得很顺利,并且我们有一个空 table。其次,我们可以看到 dataset 指的是 我们在步骤 Renamed Columns 之后留下的状态中的 tbl_B。如果您在其他地方阅读过这些内容,那么这部分内容可能会造成混淆。在 公式栏 中,您可以通过添加 , dataset2=tbl_A 输入第二个数据集,这样公式现在看起来像这样:

点击回车

查询设置下,您现在会看到一个新的步骤,您可以在其中编辑 R 脚本:

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

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

output <- df_temp

单击 确定 后,您将看到以下内容:

别在意公式栏看起来一团糟,直接点击 Table 旁边的 output

就是这个!!

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

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