Импорт данных по последней дате

Автор HuDiK, 01 октября 2019, 06:20:25

« назад - далее »

HuDiK

Есть несколько дат для поля, нужно загружать самую последнюю. Но почему-то это не получается.

Скрипт:

Основной_отчетПодготовка:
LOAD
   id as id,
    date as Дата,
    Record_Type as Record_Type,
    Record_ID as Record_ID,
    Campaign_ID as Campaign_ID,
    Ad_Group as Ad_Group,
    Match_Type as Match_Type,
    Campaign_Status as Campaign_Status,
    Ad_Group_Status as Ad_Group_Status,
    Status as Status,
    Impressions as Impressions,
    Clicks as Clicks,
    Spend as Spend,
    Orders as Orders,
    Total_Units as Total_Units,
    Sales as Sales,
    Campaign as Campaign,
    Max_Bid as Max_Bid,
    Keyword_or_Product_Targeting as Keyword_or_Product,
    SKU as SKU,
    ACoS as ACoS,
    IdAccount as IdAccount;
SQL SELECT *
FROM "AmazonFinance".stat.Advertising_Bulksheet;


NoConcatenate Основной_отчет:
  LOAD
     id,
     Дата,     
     Campaign,
     Campaign_ID,
     Ad_Group,
     Match_Type,
     Campaign_Status,
     Ad_Group_Status,
     Status,
     Impressions,
     Clicks,
     Spend,
     Orders,
     Total_Units,
     Sales,
     Max_Bid,
     Keyword_or_Product,
     SKU,
     Record_ID,
     Record_Type as Record_Type2,
     ACoS,
     IdAccount
 
Resident
   Основной_отчетПодготовка

 Where
Record_Type = 'Keyword' and (Max_Bid>>'0'and Max_Bid<<'1.49') and Campaign_Status = 'enabled' and Дата=max(Дата);
DROP Table Основной_отчетПодготовка;

Если написать с Дата=max(Дата) выдает ошибку. Формат Даты видно в таблице. Я пробовал переделывать дату с помощью функций
Num(Floor("date")) и Date(Floor("date"))
ничего не помогло


HuDiK

НУ первое что я понял что нужно делать агреггирование.

Uunit

После таблицы "Основной_отчетПодготовка" добавь следующее:
Max_date:
load
 Max(Дата) as Max_Date
Resident Основной_отчетПодготовка;

Let vMaxDate = Date(FieldValue('Max_Date',1),'DD.MM.YYYY');
Drop Table Max_date;

А во второй таблице,
Дата=max(Дата) нужно заменить на это
Дата='$(vMaxDate)'

HuDiK

Сделал. Получилось так как на скринах. Вообще не грузит.
 Я так понял что правильнее сделать через
FirstSortedValue(Aggr(..........

HuDiK

Мы же так найдем одну дату. А нам там есть что для разных позиций разные даты последние. Такая методика не подходит поидее
Цитата: Uunit от 02 октября  2019, 07:31:42  После таблицы "Основной_отчетПодготовка" добавь следующее:
Max_date:
load
 Max(Дата) as Max_Date
Resident Основной_отчетПодготовка;

Let vMaxDate = Date(FieldValue('Max_Date',1),'DD.MM.YYYY');
Drop Table Max_date;

А во второй таблице,
Дата=max(Дата) нужно заменить на это
Дата='$(vMaxDate)'

HuDiK

Нашел эту ветку http://qlikview-forum.ru/qvf/index.php?topic=880.0  Ее надо по Вашей технологии применить похоже

Uunit

Цитата: HuDiK от 02 октября  2019, 04:50:54  Мы же так найдем одну дату. А нам там есть что для разных позиций разные даты последние. Такая методика не подходит поидее
Я не подозревал, что вам для каждой позиции свою максимальную дату.

Цитата: HuDiK от 02 октября  2019, 03:52:52  Сделал. Получилось так как на скринах. Вообще не грузит.
 Я так понял что правильнее сделать через
FirstSortedValue(Aggr(..........
Aggr это функция диаграммы, она не работает в скрипте.
Аналог ей Group By.

Насколько я понял, вы хотите для каждого Campaign_ID найти макс дату и в отчёте оставить только их, так?
Возможно не самое рабастное решение, но первое что пришло на ум это:
1) Грузите исходную таблицу.
2) Используя FirstSortedValue и Group By получаете таблицу, в которой будет макс дата для каждого Group By.
3) Используя ключ Дата&Campaign_ID , флаг 'Да'и left join. Мы к исходной таблице в нужных строках добавим этот флаг.
4) А уже загружая вторую таблице, мы может по этому флагу загружать только нужные нам строки.

Но это так, мимолётные мысли.

admin

Цитировать2) Используя FirstSortedValue и Group By получаете таблицу, в которой будет макс дата для каждого Group By.
да можно просто, max(дата) с группировкой до необходимого уровня измерения.
получим таблицу с ключами по измерениям с максимальной датой.

HuDiK

Цитата: Uunit от 03 октября  2019, 01:27:12  Я не подозревал, что вам для каждой позиции свою максимальную дату.

Но Я сделал как Вы написали. Отчет перестал грузиться. Вы же видели?

Uunit

Цитата: HuDiK от 03 октября  2019, 02:45:20  Но Я сделал как Вы написали. Отчет перестал грузиться. Вы же видели?
Видел)
Скорее всего это связанно с тем, что какой то Campaign_ID  имеет дату 01.10.2019, а все остальные меньше даты.

Uunit

Цитата: Uunit от 03 октября  2019, 01:27:12  Насколько я понял, вы хотите для каждого Campaign_ID найти макс дату и в отчёте оставить только их, так?
Возможно не самое рабастное решение, но первое что пришло на ум это:
1) Грузите исходную таблицу.
2) Используя FirstSortedValue и Group By получаете таблицу, в которой будет макс дата для каждого Group By.
3) Используя ключ Дата&Campaign_ID , флаг 'Да'и left join. Мы к исходной таблице в нужных строках добавим этот флаг.
4) А уже загружая вторую таблице, мы может по этому флагу загружать только нужные нам строки.

Но это так, мимолётные мысли.
Я имел ввиду примерно такое.

Основной_отчетПодготовка:
LOAD
   id as id,
    date as Дата,
    Record_Type as Record_Type,
    Record_ID as Record_ID,
    Campaign_ID as Campaign_ID,
    Ad_Group as Ad_Group,
    Match_Type as Match_Type,
    Campaign_Status as Campaign_Status,
    Ad_Group_Status as Ad_Group_Status,
    Status as Status,
    Impressions as Impressions,
    Clicks as Clicks,
    Spend as Spend,
    Orders as Orders,
    Total_Units as Total_Units,
    Sales as Sales,
    Campaign as Campaign,
    Max_Bid as Max_Bid,
    Keyword_or_Product_Targeting as Keyword_or_Product,
    SKU as SKU,
    ACoS as ACoS,
    IdAccount as IdAccount;
SQL SELECT *
FROM "AmazonFinance".stat.Advertising_Bulksheet;

Left Join (Основной_отчетПодготовка)
Max_date:
load
    Campaign_ID,
    Max(Дата) as Max_Date
Resident Основной_отчетПодготовка Group By Campaign_ID;

Temp:
  LOAD
     id,
     Дата,     
     Campaign,
     Campaign_ID,
     Ad_Group,
     Match_Type,
     Campaign_Status,
     Ad_Group_Status,
     Status,
     Impressions,
     Clicks,
     Spend,
     Orders,
     Total_Units,
     Sales,
     Max_Bid,
     Keyword_or_Product,
     SKU,
     Record_ID,
     Record_Type,
     ACoS,
     IdAccount,
     IF(Дата=Max_Date,'Да','Нет') as Flag
 
Resident
   Основной_отчетПодготовка;
Drop Table Основной_отчетПодготовка;

NoConcatenate Основной_отчет:
  LOAD
     id,
     Дата,     
     Campaign,
     Campaign_ID,
     Ad_Group,
     Match_Type,
     Campaign_Status,
     Ad_Group_Status,
     Status,
     Impressions,
     Clicks,
     Spend,
     Orders,
     Total_Units,
     Sales,
     Max_Bid,
     Keyword_or_Product,
     SKU,
     Record_ID,
     Record_Type as Record_Type2,
     ACoS,
     IdAccount
 
Resident
   Temp

 Where
Record_Type = 'Keyword' and (Max_Bid>>'0'and Max_Bid<<'1.49') and Campaign_Status = 'enabled' and Flag ='Да';
DROP Table Temp;

HuDiK


Яндекс.Метрика