Как сравнить два столбца для сопоставления и несоответствия значений и получить его в нужном формате?

Как найти совпадающие и не совпадающие значения между двумя столбцами и отформатировать их следующим образом?

Входные данные:

| expected | match | forward | backward | actual |
|----------|-------|---------|----------|--------|
| a        |       |         |          | b      |
| b        |       |         |          | c      |
| c        |       |         |          | r      |
| d        |       |         |          | s      |
| e        |       |         |          |        |

Выход:

| expected | match | forward | backward | actual |
|----------|-------|---------|----------|--------|
| a        | b     | a       | r        | b      |
| b        | c     | d       | s        | c      |
| c        |       | e       |          | r      |
| d        |       |         |          | s      |
| e        |       |         |          |        |

forward - присутствует в expected но не в actual (SQL left outer join)

backward - присутствует в actual но не в expected (SQL right outer join)

expected это то, что я получаю от SQL запрос. У меня есть много сценариев, когда у меня нет actual столбец в RDBMS, поэтому мне пришлось бы использовать Excel для сравнения. Я могу сравнить это, как правило, используя VLOOKUP но это отнимает много времени, а также не дает желаемый формат. Я хотел бы решение, которое может быть сделано важно с форматом, как указано выше.

Я открыт для предложений.

2 ответа

Предполагая, что ваша информация размещена, как указано выше, вы можете использовать следующие три формулы в C3, D3 и E3 соответственно:

C3
=IFERROR(INDEX(F:F,AGGREGATE(15,6,ROW($B$3:$B$7)/(COUNTIF($B$3:$B$7,$F$3:$F$7)>0),ROW(A1))),"")

D3
=IFERROR(INDEX(B:B,AGGREGATE(15,6,ROW($B$3:$B$7)/(COUNTIF($C$3:$C$7,$B$3:$B$7)=0),ROW(A1))),"")

E3
=IFERROR(INDEX(F:F,AGGREGATE(15,6,ROW($F$3:$F$7)/((COUNTIF($C$3:$C$7,$F$3:$F$7)=0)*($F$3:$F$7<>"")),ROW(A1))),"")

скопируйте формулы в строку 7, и вы получите следующее:

Замечания: AGGREGATE выполняет вычисления в виде массива для функции 15. В результате не используйте полную ссылку на столбец в AGGREGATE функция. Ограничьте это, чтобы быть близко к вашему набору данных. Если нет, вы можете перегружать свой компьютер огромным количеством вычислений для пустых ячеек.

Для Power Query вашим ключевым преобразованием будет Merge Queries. Это похоже на соединение SQL и использует аналогичную терминологию. Первым шагом будет создание отдельных запросов для ожидаемых и фактических столбцов. Для списка совпадений я бы построил запрос с использованием Join Type = Inner. Для списка пересылки я бы построил еще один запрос, используя Join Type = Left Anti, а затем еще один запрос в обратном направлении, используя Right Anti.

Собрать все вместе в точности так, как вы это представляли, было бы немного неудобно (если это действительно необходимо), но я полагаю, что вы можете добавить индекс в каждый запрос и использовать объединение объединений (Join Type = Left Outer) в столбцах индекса, чтобы получить один результат из каждого запроса в каждой строке.

Другие вопросы по тегам