从 R 脚本到 Power Bi - 如何使用 setdiff

From R script to Power Bi - how to use setdiff

我有两个数据框:zerowy_nazwa5zatwierdzony_nazwa5

和工作 2 行:

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

如何在 PowerBi 中实现它?

感谢帮助

阅读你的问题,我假设:

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

Power BI 中 R 的强大功能仅限于 R Visuals。您可以加载 single 和多个表,并将它们用作 R 脚本的输入,并使用 Edit Queries > Transform > Run R Script.

any 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) > Enter Data 并单击 OK。然后使用 Transform > Run R script 插入 R 脚本并插入上面的代码段。

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

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


假设我们有tables 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 语言

您只需要过滤 table A 以排除 table 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 脚本。