Есть несколько дат для поля, нужно загружать самую последнюю. Но почему-то это не получается.
Скрипт:
Основной_отчетПодготовка:
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"))
ничего не помогло
НУ первое что я понял что нужно делать агреггирование.
После таблицы "Основной_отчетПодготовка" добавь следующее:
Max_date:
load
Max(Дата) as Max_Date
Resident Основной_отчетПодготовка;
Let vMaxDate = Date(FieldValue('Max_Date',1),'DD.MM.YYYY');
Drop Table Max_date;
А во второй таблице,
Дата=max(Дата)
нужно заменить на это
Дата='$(vMaxDate)'
Сделал. Получилось так как на скринах. Вообще не грузит.
Я так понял что правильнее сделать через
FirstSortedValue(Aggr(..........
Мы же так найдем одну дату. А нам там есть что для разных позиций разные даты последние. Такая методика не подходит поидее
Цитата: 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)'
Нашел эту ветку http://qlikview-forum.ru/qvf/index.php?topic=880.0 Ее надо по Вашей технологии применить похоже
Цитата: 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) А уже загружая вторую таблице, мы может по этому флагу загружать только нужные нам строки.
Но это так, мимолётные мысли.
Цитировать2) Используя FirstSortedValue и Group By получаете таблицу, в которой будет макс дата для каждого Group By.
да можно просто, max(дата) с группировкой до необходимого уровня измерения.
получим таблицу с ключами по измерениям с максимальной датой.
Цитата: Uunit от 03 октября 2019, 01:27:12 Я не подозревал, что вам для каждой позиции свою максимальную дату.
Но Я сделал как Вы написали. Отчет перестал грузиться. Вы же видели?
Цитата: HuDiK от 03 октября 2019, 02:45:20 Но Я сделал как Вы написали. Отчет перестал грузиться. Вы же видели?
Видел)
Скорее всего это связанно с тем, что какой то Campaign_ID имеет дату 01.10.2019, а все остальные меньше даты.
Цитата: 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;
Супер. Спасибо