从 R 脚本到 Power Bi - 如何使用 setdiff
From R script to Power Bi - how to use setdiff
我有两个数据框:zerowy_nazwa5
、zatwierdzony_nazwa5
、
和工作 2 行:
setdiff(zatwierdzony_nazwa5, zerowy_nazwa5)
setdiff(zerowy_nazwa5, zatwierdzony_nazwa5)
如何在 PowerBi 中实现它?
感谢帮助
阅读你的问题,我假设:
- 您的主要目标是在 PowerBI 内部执行此操作
- 您没有具体询问如何使用 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 A
和B
如下
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 脚本。
我有两个数据框:zerowy_nazwa5
、zatwierdzony_nazwa5
、
和工作 2 行:
setdiff(zatwierdzony_nazwa5, zerowy_nazwa5)
setdiff(zerowy_nazwa5, zatwierdzony_nazwa5)
如何在 PowerBi 中实现它?
感谢帮助
阅读你的问题,我假设:
- 您的主要目标是在 PowerBI 内部执行此操作
- 您没有具体询问如何使用 DAX
Power BI 中 R 的强大功能不仅限于 R Visuals。您可以加载 single 和多个表,并将它们用作 R 脚本的输入,并使用 Edit Queries > Transform > Run R Script
.
这是一个使用两个合成数据帧和 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 A
和B
如下
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 脚本。