IF Spreadsheet Query IF (ISBLANK (), PARSE_ERROR: - PullRequest
1 голос
/ 18 февраля 2020

С помощью этого запроса я получаю этот результат. Идея в том, чтобы у меня была дата продажи продукта. При проверке, находится ли дата между date_start и date_end маркетинговой таблицы, если это так, укажите эту цену в marketingprice.

В некоторых случаях нет конца. Это означает, что он все еще работает и не имеет конечной даты. Мы все еще используем их. Потому что нет даты окончания, я хочу использовать дату сегодня. Поэтому, если E (date_end) пусто, используйте сегодняшнюю дату, если нет, тогда используйте E

=query(Marketing!$B$2:E,
"select C,D  where  B='" & D2 & "' and 
D<=date '"&TEXT(E2,"yyyy-MM-dd")&"' and 
date'"&TEXT(today(),"yyyy-MM-dd")&"'>=date '"&TEXT(E2,"yyyy-MM-dd")&"' ")

+------------+---------------+--------+-----------------+----------+----------------+
| product_no | product_price | amount | deliver_country |  datum   | marketingprice |
+------------+---------------+--------+-----------------+----------+----------------+
|       1001 |           2.8 |      2 | de              | 2-1-2020 |                |
+------------+---------------+--------+-----------------+----------+----------------+
+-----+------------+
| 3.2 | 01-01-2020 |
| 1.2 | 02-01-2020 |
+-----+------------+

Я хочу использовать IF (isblank (E), date '"& TEXT (TODAY ()," yyyy- MM-dd ") &" ', E)

Тогда код будет

=query(Marketing!$B$2:E,
"select C,D  where  B='" & D2 & "' and 
D<=date '"&TEXT(E2,"yyyy-MM-dd")&"' and 
IF(isblank(E),date'"&TEXT(today(),"yyyy-MM-dd")&"',E)>=date '"&TEXT(E2,"yyyy-MM-dd")&"' ")

Тогда я получу ошибку:

QUERY: PARSE_ERROR: Обнаружено "" ЕСЛИ "" в строке 1, столбец 58. Ожидалось одно из: "(" ... "(" ...

Маркетинговая таблица

+---------+---------+-------+-------------+------------+
| channel | country | price | date_start  |  date_end  |
+---------+---------+-------+-------------+------------+
| Google  | de      |   3.2 | 01-01-2020  | 01-01-2020 |
| Google  | de      |   1.2 | 02-01-2020  |            |
| Amazon  | en      |   5.4 | 01-01-2020  |            |
+---------+---------+-------+-------------+------------+

Выведите, как должно быть

+------------+---------------+--------+-----------------+----------+----------------+
| product_no | product_price | amount | deliver_country |  datum   | marketingprice |
+------------+---------------+--------+-----------------+----------+----------------+
|       1001 |           2.8 |      2 | de              | 2-1-2020 |            1.2 |
|       1002 |           3.8 |      4 | en              | 3-1-2020 |            5.4 |
|       1001 |           2.8 |      1 | de              | 1-1-2020 |            3.2 |
+------------+---------------+--------+-----------------+----------+----------------+

В mysql Я использую этот код:

b.start_date                <= date(i.system_created)                                           AND   
coalesce(b.end_date,now())  >= date(i.system_created)

Решение, которое я нашел:

=QUERY(Marketing!$B$2:$E;IF(Marketing!E$2:E="";
"select E where  B ='"&D2&"' and D <=date'"&TEXT(E2;"yyyy-MM-dd")&"' and date'"&TEXT(VANDAAG();"yyyy-MM-dd")&"' >=date'"&TEXT(E2;"yyyy-MM-dd")&"' limit 1";
"select E where  B ='"&D2&"' and D <=date'"&TEXT(E2;"yyyy-MM-dd")&"' and E >=date'"&TEXT(E2;"yyyy-MM-dd")&"'"
);0)

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

попробуй:

=ARRAYFORMULA(IFERROR(QUERY(
 {Marketing!B$2:D\ IF(Marketing!E$2:E=""; TODAY(); Marketing!E$2:E)}; 
 "select Col2 
  where Col1 = '"&D2&"' 
    and Col3 <= date '"&TEXT(E2;"yyyy-MM-dd")&"' 
    and Col4 <= "&TODAY()&"
  limit 1"; 0)))
0 голосов
/ 26 февраля 2020

Вы можете использовать Apps Script для решения этой проблемы.

Как это работает?

  1. Назначить Данные о продажах (* От 1010 * D2: E7 ) до sales, Маркетинговые данные ( B2: E7 ) до marketing, переменные.
  2. в for от oop до sales и если sale_date < date_start установить значение ячейки как marketing_cost - 1

Ниже вы можете найти скриншот, прикрепленный до и после.

function worker(){

  let ss = SpreadsheetApp.getActive();
  let sheetSales = ss.getSheetByName("Sales");
  let sheetMarketing = ss.getSheetByName("Marketing");

  // 1.
  let sales = sheetSales.getRange("D2:E7").getValues();
  /** sales
  [
    [de, 02-01-2020],
    [de, 03-01-2020],
    [de, 04-01-2020],
    [de, 06-01-2020],
    [de, 10-01-2020],
    [en, 10-01-2020]
  ]
  */
  let marketing = sheetMarketing.getRange("B2:E7").getValues();
  /** marketing
  [
    [de, 3.2, 01-01-2020, 02-01-2020],
    [de, 1.2, 03-01-2020, 04-01-2020],
    [de, 4.4, 05-01-2020, 06-01-2020],
    [de, 8.8, 07-01-2020, 08-01-2020],
    [de, 9.9, 09-01-2020, 25-02-2020],
    [en, 5.4, 01-01-2020, 25-02-2020]
  ]
  */

  let sale_date,
  date_start,
  date_end, 
  marketing_cost = [];

  for(let i = 0; i < sales.length; i++){

    sale_date = new Date(sales[i][1]);
    date_start = new Date(marketing[i][2]);
    date_end = new Date(marketing[i][3]);
    marketing_cost.push(marketing[i][1]);

    // 2.
    if(sale_date < date_start){
      sheetSales.getRange(2+i, 6).setValue(marketing_cost[i-1]);
    }else{
      sheetSales.getRange(2+i, 6).setValue(marketing_cost[i]);
    }
  }

}

До :

enter image description here

После:

enter image description here

Ссылка:

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