【问题标题】:From R script to Power Bi - how to use setdiff从 R 脚本到 Power Bi - 如何使用 setdiff
【发布时间】:2018-08-29 09:34:56
【问题描述】:

我有两个数据框:zerowy_nazwa5zatwierdzony_nazwa5

和工作 2 行:

setdiff(zatwierdzony_nazwa5, zerowy_nazwa5)
setdiff(zerowy_nazwa5, zatwierdzony_nazwa5)

我如何在 PowerBi 中实现这一点?

感谢您的帮助

【问题讨论】:

  • 你能扩展你的问题吗?你有一个 R 会话,你想用数据在 PowerBI 中创建一个表吗?你想在不使用 R 的情况下在 PowerBI 上模拟 setdiff 吗? ...
  • 我想将我的 R 脚本转换为 PowerBi。从 R 中导入的数据在 PowerBi 中为我提供了两个表。我想使用 R 函数 setdiff 在这两个表上的 PowerBI 上运行 setdiff。
  • 在PowerBI中你不能执行R的函数,你可以使用R生成图形,在脚本中你可以做任何操作,但是你不能将操作返回为表格。您可以选择在生成 data.frame 的 R 脚本中运行 setdiff 并输入 PowerBI 3 对象而不是两个(其中第三个是带有两个 `sediff 的 data.frame)。
  • 好的。我在 R. A
  • 我正在考虑在 R 中创建函数并在 PowerBi 中创建该函数的参数 - 但你写的是不可能的。

标签: r powerbi set-difference


【解决方案1】:

您的问题还不清楚,所以我将不得不做出一些假设。 我会将您的问题解释为如何在 Power BI 中本地执行一组差异。


假设我们有如下表AB

Table A:   Table B:      
Column     Column
------     ------
 1          2
 2          4
 3
 4
 5

我们想要得到设置的差异A - B

 Column
 ------
  1
  3
  5

您可以在 DAX 或 Power Query M 语言中执行此操作:


M 语言

您可以使用左反连接来做到这一点。 M 代码如下所示:

 = Table.NestedJoin(A,{"Column"},B,{"Column"},"B",JoinKind.LeftAnti)

删除新的“B”列即可。

另一种方法是使用Table.SelectRows函数:

= Table.SelectRows(A, each not List.Contains(B[Column], _[Column]))

DAX 语言

您只需要过滤表A 以排除表B 中的值:

FILTER(A, NOT( A[Column] IN VALUES( B[Column] ) ) )

或者使用旧的CONTAINS 语法代替IN

FILTER(A, NOT( CONTAINS( VALUES( B[Column] ), B[Column], A[Column] ) ) )

注意:正如 vestland 所指出的,当然可以在 Power Query 环境中使用 R 脚本。 Juan 指出,目前无法在 DAX 表达式中使用 R 脚本。

【讨论】:

  • 对任何数字数据都非常有用,谢谢@alexisolson
【解决方案2】:

阅读您的问题,我假设:

  1. 您的主要目标是在 PowerBI 内部执行此操作
  2. 您并没有专门询问如何使用 DAX 进行操作

Power BI 中 R 的强大功能仅限于 R 视觉对象。您可以同时加载 single 和多个表,并将它们用作 R 脚本的输入以及使用 Edit Queries > Transform > Run R Script任何 R 功能。

这是一个使用两个合成数据帧和 setdiff() 的示例:

片段 1(来自 R 中的 dplyr::setdiff 示例)

library(dplyr)
a <- data.frame(column = c(1:10, 10))
b <- data.frame(column = c(1:5, 5))
c <- dplyr::setdiff(a, b)

# Output
# column
# 1      6
# 2      7
# 3      8
# 4      9
# 5     10

由于您没有描述您的预期输出,我假设这就是您所追求的。但请注意,如果您不使用 dplyr 库,base::setdiff() 将给出不同的输出:

片段 2

c <- base::setdiff(a, b)

# output

# column
# 1       1
# 2       2
# 3       3
# 4       4
# 5       5
# 6       6
# 7       7
# 8       8
# 9       9
# 10     10

如果您仔细按照this post 中的步骤操作,您能够在 Power BI 中完成此操作。但它的本质是:要重现该示例,请转到Edit Queries (Power Query Editor) &gt; Enter Data 并单击OK。然后使用Transform &gt; Run R script插入一个R脚本,并在上面插入sn-p。

如果有任何不清楚的地方,或者如果您无法重现结果,请告诉我。

【讨论】:

  • 也适用于文本数据: library(dplyr) a_text
猜你喜欢
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
  • 1970-01-01
相关资源
最近更新 更多