Из скрипта R в Power Bi - как использовать setdiff - PullRequest
0 голосов
/ 29 августа 2018

У меня есть два фрейма данных: zerowy_nazwa5, zatwierdzony_nazwa5,

и рабочие 2 строки:

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

как мне реализовать это в PowerBi?

Спасибо за помощь

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Ваш вопрос довольно неясен, поэтому мне придется сделать некоторые предположения. Я интерпретирую ваш вопрос, как выполнить разность наборов в Power BI.


Предположим, у нас есть таблицы 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 язык

Вы можете сделать это, используя left anti join . Код М выглядит так:

 = 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] ) ) )

Примечание: безусловно, можно использовать R-сценарии в среде Power Query, как указывает Вестланд. Как указывает Хуан, в настоящее время невозможно использовать сценарии R в выражении DAX.

0 голосов
/ 30 августа 2018

Читая ваш вопрос, я предполагаю следующее:

  1. Ваша главная цель - сделать это внутри PowerBI
  2. Вы специально не спрашиваете, как это сделать с помощью DAX

Мощность R в Power BI составляет , а не , ограничивается визуальными элементами R. Вы можете загрузить как одну , так и несколько таблиц и использовать их в качестве входных данных для сценариев R, а также любую функциональность R, используя Edit Queries > Transform > Run R Script.

Вот пример использования двух синтетических фреймов данных и setdiff ():

Фрагмент 1 (из примеров dplyr :: setdiff в R)

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

И если вы внимательно выполните шаги, описанные в этой публикации , вы сможете получить возможность получить это в Power BI. Но вот суть этого: чтобы воспроизвести пример, перейдите на Edit Queries (Power Query Editor) > Enter Data и нажмите OK. Затем вставьте скрипт R, используя Transform > Run R script, и вставьте фрагмент выше.

enter image description here

Если что-то неясно или вы не можете воспроизвести результат, сообщите мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...