Ограничить результаты запросов 2 Google Sheets / Google Apps Script - PullRequest
0 голосов
/ 18 марта 2020

Вопрос обновлен для ясности

У меня приведенная ниже формула работает так, как задумано. Однако я хотел бы ограничить результаты, найденные в A2: C до 2 из каждого найденного SKU. В приведенной ниже таблице есть A11134, который имеет 4 результата, но я хочу видеть только первые 2. поэтому я хотел бы видеть (A11134 E01D1 48) & (A11134 F06C2 48)

function PreparePrepPivotTable() {
var spreadsheet = SpreadsheetApp.getActive();
var sheet = spreadsheet.getSheetByName('PrepSheet');
sheet.getRange('G2').activate().setFormula('=QUERY({\'LOCATIONS\'!$A$2:$C},"SELECT * WHERE Col1 
MATCHES \'" & JOIN("|",FILTER(O2:O, NOT(ISBLANK(O2:O)))) & "\' ")');
}

Queryresults

Заранее спасибо

1 Ответ

2 голосов
/ 18 марта 2020

NEW ANSWER

Хорошо, в этом случае я бы предложил использовать скрипт, чтобы получить столько SKU, сколько вы хотите. Сначала вы используете эту функцию для фильтрации O coulmn и получения вашего набора соответствия. Этот набор будет содержать счетчик, изначально установленный на 0.

function GetNSKUS() {
  var ss =SpreadsheetApp.getActive();
  var sheet = ss.getSheetByName('PrepSheet');
  //Building the matching set.
  var matchingValues = ss.getRange("O2:O").getValues().filter(value => value[0] != '').map(nonBlankValue => [nonBlankValue[0], 0]);
  //Filtering out the desired number of values
  var values = sheet.getRange("LOCATIONS!$A$2:$C").getValues().filter(value => advancedFilter(value[0], matchingValues));

  let cols = values[0].length;
  let rows = values.length;
  //Printing out the found rows starting from G2
  sheet.getRange(2, 7, rows, cols).setValues(values);

}

Затем вы отфильтруете диапазон вашего РАСПОЛОЖЕНИЯ с помощью этой функции. Когда совпадение будет выполнено, счетчик будет увеличиваться, позволяя вам фильтровать до нужных значений.

function advancedFilter(value, toMatch) {
  let matched = toMatch.filter(couple => couple[0] === value);
  if (matched.length > 0) {
    if (matched[0][1]<2) { //Here you can decide when to stop returning SKUs
      matched[0][1] += 1;
      return true;
    }
  }
  return false;
}

СТАРЫЙ ОТВЕТ

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

function PreparePrepPivotTable() {
  var spreadsheet = SpreadsheetApp.getActive();
  var sheet = spreadsheet.getSheetByName('PrepSheet');
  sheet.getRange('G2').activate().setFormula('=QUERY({\'LOCATIONS\'!$A$2:$C},"SELECT * WHERE Col1 MATCHES \'" & JOIN("|",FILTER(O2:O, NOT(ISBLANK(O2:O)))) & "\' LIMIT 2")');
}

Ссылки:

Limit

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