在 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_A
和 tbl_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 列中的名称从 Price3
和 Price4
分别更改为 Price1
和 Price2
:
现在,查询设置下的应用步骤应该如下所示:
最后一步的名称很重要,因为您在编写自己的代码时必须引用 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 释放到您的工作流程中。
我在 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_A
和 tbl_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 将日期的数据类型更改为,您猜对了,日期。这可以
为两个 table 完成此操作后,确保 tbl_B 处于活动状态,并查看 查询设置 。你会看到在数据加载过程中添加了一个新步骤Changed Type
:
我们将添加另一个步骤,以使即将推出的 R 脚本尽可能简单。在该脚本中,我们将使用 rbind()
函数加入 table。这将触发错误,除非不同 table 中的列名相同。因此,继续将 B 列中的名称从 Price3
和 Price4
分别更改为 Price1
和 Price2
:
现在,查询设置下的应用步骤应该如下所示:
最后一步的名称很重要,因为您在编写自己的代码时必须引用 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 释放到您的工作流程中。