Загрузка данных в Qlikivew

Автор PadijVD, июля 20, 2015, 12:24:16 pm

« предыдущая - следующая »

PadijVD

июля 20, 2015, 12:24:16 pm Последнее редактирование: июля 22, 2015, 01:17:31 pm от admin
Добрый день!
Подскажите как можно исключить из загрузки файл по дате?
Имеются файлы для анализа со следующими столбцами (Excel файлы)
Дата публикации, id, номер и тд.
Нужно при загрузки проверить Дату публикации и загрузить файл с последней датой.
https://yadi.sk/i/E5yopoOqhxrLx

kvv

июля 20, 2015, 12:43:46 pm #1 Последнее редактирование: июля 22, 2015, 02:52:45 pm от kvv
Добрый день.
Нужно применить вот такую выборку:
SELECT field_01, date FROM table a WHERE date=(SELECT max(date) FROM table b WHERE a.field_01 = b.field_01);

PadijVD

Спасибо за ответ!
Если можно помогите внедрить в мой код

export:
LOAD
    //Основные данные
    FileName() as [Файл контракта],
    [contract/id] as id,
    [contract/number] as [№ контракта],
    [contract/regNum] as [Номер реестровой записи контракта],
    [contract/priceInfo/price] as [Цена контракта],
    [contract/href] as [Ссылка на источник],
    Date(Left([contract/publishDate],10),'DD MMMM YYYY') as [Дата публикации]

FROM [D:\ftp\Obrabotca\UnZIP\contract_*.xml] (XmlSimple, Table is [export]);

kvv

Есть возможность выложить "кусок" (20 строк) xml-файла, чтобы написал требуемую загрузку?


PadijVD


kvv

июля 21, 2015, 09:53:13 am #5 Последнее редактирование: июля 22, 2015, 02:53:39 pm от kvv
Добрый день.
Поскольку все названия xml-файлов разные, то это вообще упрощается:

export:
LOAD
    //Основные данные
    FileName() as [Файл контракта],
    [contract/id] as id,
    [contract/number] as [№ контракта],
    [contract/regNum] as [Номер реестровой записи контракта],
    [contract/priceInfo/price] as [Цена контракта],
    [contract/href] as [Ссылка на источник],
    Date(Left([contract/publishDate],10),'DD.MM.YYYY') as [Дата публикации]
FROM [\contract_*.xml] (XmlSimple, Table is [export]);

max_date:
LOAD max([Дата публикации]) as max_date
Resident export;

LET d1 = date(FieldValue('max_date', 1), 'DD.MM.YYYY');

export_max:
LOAD [Файл контракта] as ContractFile,
     id,
     [№ контракта],
     [Номер реестровой записи контракта],
     [Цена контракта],
     [Ссылка на источник],
     [Дата публикации]
Resident export
where [Дата публикации] = '$(d1)';

drop Table export;


Как-то так.

PadijVD

и еще вопрос насколько я понимаю к загрузке берется только один файл (с максимальной датой публикации). А мне необходимо сделать проверку по столбцу 'Номер реестровой записи контракта' и в случае когда находятся два и более одинаковых номера,  загрузить файл с последней датой публикации + загрузить все остальные файлы.

kvv

июля 21, 2015, 11:58:50 am #7 Последнее редактирование: июля 21, 2015, 12:13:05 pm от admin
Исправил, предыдущий скрипт.

kvv

июля 21, 2015, 12:33:55 pm #8 Последнее редактирование: июля 22, 2015, 02:53:07 pm от kvv
Цитата: PadijVD от июля 21, 2015, 11:58:29 am
и еще вопрос насколько я понимаю к загрузке берется только один файл (с максимальной датой публикации). А мне необходимо сделать проверку по столбцу 'Номер реестровой записи контракта' и в случае когда находятся два и более одинаковых номера,  загрузить файл с последней датой публикации + загрузить все остальные файлы.


Пока не нахожу решения, как это сделать в QlikView.

Можно загрузить все данные в БД и в БД уже можно написать нужный запрос:
SELECT field_01, date FROM table a WHERE date=(SELECT max(date) FROM table b WHERE a.field_01 = b.field_01);

PadijVD

Спасибо, буду тогда сам пытаться решить данный момент.

admin

Держите в курсе решения, освобожусь - посмотрю.

PadijVD

Цитата: admin от июля 21, 2015, 12:40:06 pm
Держите в курсе решения, освобожусь - посмотрю.

Хорошо! за любую помощь буду благодарен!

kvv

июля 22, 2015, 03:55:37 pm #12 Последнее редактирование: июля 22, 2015, 03:59:06 pm от kvv
Казалось бы - простая задача. А, как ее НОРМАЛЬНО решить с помощью QlikView - пока не понятно.

PadijVD, попробуйте частичное решение:
export_101:
LOAD
    //Основные данные
    FileName() as [Файл контракта_01],
    [contract/id] as id_01,
    [contract/number] as [№ контракта_01],
    [contract/regNum] as [Номер реестровой записи контракта_01],
    [contract/priceInfo/price] as [Цена контракта_01],
    [contract/href] as [Ссылка на источник_01],
    Date(Left([contract/publishDate],10),'DD.MM.YYYY') as [Дата публикации_01]
FROM [Temp\xml\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export_101 into export_101.qvd (qvd);
DROP Table export_101;

export_102:
Load distinct [Номер реестровой записи контракта_01] as [Номер реестровой записи контракта_02]
From [Temp\export_01.qvd] (qvd);
STORE * from export_102 into export_102.qvd (qvd);
DROP Table export_102;

export:
LOAD [Номер реестровой записи контракта_02] as [Номер реестровой записи контракта]
From [Temp\export_102.qvd] (qvd);

left join (export)
LOAD date(max([Дата публикации_01]), 'DD.MM.YYYY'),
[№ контракта_01] as [№ контракта],
[Номер реестровой записи контракта_01] as [Номер реестровой записи контракта],
[Цена контракта_01] as [Цена контракта],
[Ссылка на источник_01] as [Ссылка на источник]
From [Temp\export_101.qvd] (qvd)
Group By
[№ контракта_01],
[Номер реестровой записи контракта_01],
[Цена контракта_01],
[Ссылка на источник_01];


PadijVD

Цитата: kvv от июля 22, 2015, 03:55:37 pm
Казалось бы - простая задача. А, как ее НОРМАЛЬНО решить с помощью QlikView - пока не понятно.

PadijVD, попробуйте частичное решение:
export_101:
LOAD
    //Основные данные
    FileName() as [Файл контракта_01],
    [contract/id] as id_01,
    [contract/number] as [№ контракта_01],
    [contract/regNum] as [Номер реестровой записи контракта_01],
    [contract/priceInfo/price] as [Цена контракта_01],
    [contract/href] as [Ссылка на источник_01],
    Date(Left([contract/publishDate],10),'DD.MM.YYYY') as [Дата публикации_01]
FROM [Temp\xml\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export_101 into export_101.qvd (qvd);
DROP Table export_101;

export_102:
Load distinct [Номер реестровой записи контракта_01] as [Номер реестровой записи контракта_02]
From [Temp\export_01.qvd] (qvd);
STORE * from export_102 into export_102.qvd (qvd);
DROP Table export_102;

export:
LOAD [Номер реестровой записи контракта_02] as [Номер реестровой записи контракта]
From [Temp\export_102.qvd] (qvd);

left join (export)
LOAD date(max([Дата публикации_01]), 'DD.MM.YYYY'),
[№ контракта_01] as [№ контракта],
[Номер реестровой записи контракта_01] as [Номер реестровой записи контракта],
[Цена контракта_01] as [Цена контракта],
[Ссылка на источник_01] as [Ссылка на источник]
From [Temp\export_101.qvd] (qvd)
Group By
[№ контракта_01],
[Номер реестровой записи контракта_01],
[Цена контракта_01],
[Ссылка на источник_01];



Спасибо! Сегодня попробую загрузить данные с данным кодом.

admin

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

export:
LOAD
FileName() as [Файл контракта],
    [contract/id] as id,
    [contract/number] as [№ контракта],
    [contract/regNum] as [Номер реестровой записи контракта],
    [contract/priceInfo/price] as [Цена контракта],
    [contract/href] as [Ссылка на источник],
    Date(Left([contract/publishDate],10),'DD MMMM YYYY') as [Дата публикации]
FROM [Контракты\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export into export0.qvd (qvd);
DROP Table export;

tmp0:
Load *, Hash160([Номер реестровой записи контракта],[Дата публикации]) as IdRow from export0.qvd (qvd);
STORE * from tmp0 into export0.qvd (qvd);

tmp1:
load Hash160([Номер реестровой записи контракта],[МаксДата]) as IdRow;
LOAD max([Дата публикации]) as МаксДата,
[Номер реестровой записи контракта]
Resident tmp0
Group by [Номер реестровой записи контракта];
DROP Table tmp0;
Left join LOAD * from export0.qvd (qvd);
drop Field IdRow;


Но возникает вопрос, какую брать запись в том случае когда записи отличаются только по id? Как с
Номером реестровой записи контракта = 0151200007014000002 от 24/06/2015 .

Рейтинг@Mail.ru Яндекс.Метрика