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

时间:2018-08-29 09:34:56

标签: r powerbi set-difference

我有两个数据帧:zerowy_nazwa5zatwierdzony_nazwa5

工作2行:

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

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

感谢帮助

2 个答案:

答案 0 :(得分: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] ) ) )

注意:正如《战地》指出的那样,在Power Query环境中当然可以使用R脚本。正如Juan指出的那样,当前不可能在DAX表达式中使用R脚本。

答案 1 :(得分:0)

阅读您的问题,我想是这样的:

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

Power BI中R的力量限于R Visuals。您可以同时加载single和多个表,并使用Edit Queries > Transform > Run R Script将它们用作R脚本和 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脚本并插入上面的代码段。

enter image description here

如果不清楚,或者您无法重现结果,请告诉我。