Вложенный фильтр с предложением Где, используя If, Like, или и AND в Excel Power Query - PullRequest
0 голосов
/ 29 октября 2018

Я работаю над изготовлением устройств с большим количеством отслеживаемых компонентов, и у меня есть теоретическая партия данных, которая выглядит следующим образом:

Theoretical Data

У меня в Excel есть несколько взаимозаменяемых параметров, таких как:

SerialNumberP = GetParameter("SerialNumber"),
ProductCodeP = GetParameter("ProductCode"),
WorkOrderNumberP = GetParameter("WorkOrderNumber"),
PartCodeP = GetParameter("PartCode"),
BuildDateP = GetParameter("BuildDate"),

Используя это, я успешно выполнил предложение where для поиска моих данных один за другим, используя такие параметры, как

  Where
   a.SerialNumber in ("& SerialNumberP &") 

Однако, поскольку полей так много, иногда доступная нам информация отличается. Поэтому в разных клетках с заголовками:

  • Серийные номера
  • Код товара
  • Заказ на работу
  • Код детали
  • Партия деталей

Я хотел бы использовать предложения AND и OR в разных случаях, когда доступна разная информация.

Например:

  • Если я хочу иметь конкретный серийный номер и партию детали или
  • Если я хочу получить полный рабочий заказ с определенной партией детали
  • Если я хочу увидеть все один код продукта, который использует этот пакет деталей

То, что у меня есть, выглядит примерно так:

Where
          (a.SerialNumber in ("& SerialNumberP &")) 
    Or    (a.WorkOrderNumber in ("& WorkOrderNumberP &"))
    Or    (b.WorkOrderNumber in ("& WorkOrderNumberP &") _
                AND a.ComponentPartCode = '"& PartNumberP &"')
    Or    (a.ComponentPartCode = '"& PartNumberP &"' _
                AND a.SerialNumber in ("& SerialNumberP &"))
    Or    a.BatchNumber in ("& BatchNumberP &")

Однако, как мы все знаем, это включительно OR и использование только поля Part Batch удовлетворит 2 различных условия OR и выведет оба из них.

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

Спасибо.

1 Ответ

0 голосов
/ 29 октября 2018

Похоже, вы настраиваете динамический SQL-запрос в Power Query, используя параметры, загруженные из книги Excel? Поскольку вы настраиваете строку запроса в М-коде, можно условно создавать элементы строки. Я сделал подобные вещи, где я хочу иметь несколько полей, которые я хочу запросить, но, возможно, захочу использовать любую комбинацию полей для просмотра. Моим решением было использовать включение AND для каждого поля и просто не создавать строку, если для этого поля не было указано значение. Я думаю, это то, что вы пытаетесь сделать, хотя я не уверен на 100%.

"SELECT * FROM yourtable " &

"WHERE a.SerialNumber <> NULL " & 

if SerialNumberP <> null then "AND a.SerialNumber IN ("& SerialNumberP &") " else "" &
if WorkOrderNumberP <> null then "AND a.WorkOrderNumber IN ("& WorkOrderNumberP &") " else "" &
if PartNumberP <> null then "AND a.ComponentPartCode IN ("& PartNumberP &") " else "" &
if BatchNumberP  <> null then "AND a.BatchNumber IN ("& BatchNumberP &") " else "" &

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