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

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

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

PadijVD


Цитата: admin от 23 июля  2015, 02:28:12  
Привет, если я правильно понял задачу то вот примерный код:

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 .
Добрый день!
Номер id всегда уникален. А вот номер реестровой записи повторяется при внесение каких либо изменений в контракт. Соответственно нужно из нескольких записей с одинаковым реестровым номером взять данные с последней датой публикации.
Сейчас попробую данный код применить. Предыдущий код от KVV так и не смог приладить.

admin

Обрати внимание на записи в снимке.
Все поля кроме ID и файла совпадают.

PadijVD

Цитата: admin от 23 июля  2015, 03:53:46  
Обрати внимание на записи в снимке.
Все поля кроме ID и файла совпадают.
Спасибо Всем за помощь!!! Вроде все заработало как надо!


PadijVD

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

admin

Цитата: PadijVD от 23 июля  2015, 04:05:36  
По поводу совпадения данных:
Изменения были в другой части файла, если необходим полный код для выборки всех данных, могу скинуть.
Было бы интересно посмотреть.

PadijVD

#20
Цитата: admin от 23 июля  2015, 06:24:30  
Цитата: PadijVD от 23 июля  2015, 04:05:36  
По поводу совпадения данных:
Изменения были в другой части файла, если необходим полный код для выборки всех данных, могу скинуть.
Было бы интересно посмотреть.

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

    if([contract/finances/budgetFunds/budgetLevel]='11', 'Федеральный бюджет',
    if([contract/finances/budgetFunds/budgetLevel]='12', 'Бюджет субъекта РФ',
    if([contract/finances/budgetFunds/budgetLevel]='13', 'Местный бюджет',
    [contract/finances/budgetFunds/budgetLevel])))  as [Источник бюджета],
   
//Заказчик
    Capitalize([contract/customer/fullName]) as [З-Полное наименование],
    [contract/customer/registrationDate] as [З-Дата регистрации],
    [contract/customer/inn] as [З-ИНН],
    [contract/customer/kpp] as [З-КПП],
    [contract/customer/legalForm/singularName] as [Тип заказчика],
       
//Поставщик
    lower (if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),
    'ИП',[contract/suppliers/supplier/legalEntityRF/legalForm/singularName])) as [Тип поставщика],
   
    if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),'ИП '&
    Capitalize( [contract/suppliers/supplier/individualPersonRF/lastName]&' '&
    [contract/suppliers/supplier/individualPersonRF/firstName]&' '&
    [contract/suppliers/supplier/individualPersonRF/middleName]),
    Capitalize([contract/suppliers/supplier/legalEntityRF/fullName])) as [П-Полное наименование],
       
    if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),
    [contract/suppliers/supplier/individualPersonRF/INN],
    [contract/suppliers/supplier/legalEntityRF/INN]) as [П-ИНН],
       
    if([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/legalForm/singularName]),
    [contract/suppliers/supplier/individualPersonRF/address],
    [contract/suppliers/supplier/legalEntityRF/address]) as [П-Адрес],
       
    if([contract/suppliers/supplier/legalEntityRF/contactEMail]='' or IsNull([contract/suppliers/supplier/legalEntityRF/contactEMail]),
    [contract/suppliers/supplier/individualPersonRF/contactEMail],
    [contract/suppliers/supplier/legalEntityRF/contactEMail]) as [П-EMail],
         
    if([contract/suppliers/supplier/legalEntityRF/contactPhone]='' or IsNull([contract/suppliers/supplier/legalEntityRF/contactPhone]),
    [contract/suppliers/supplier/individualPersonRF/contactPhone],
    [contract/suppliers/supplier/legalEntityRF/contactPhone]) as [П-Телефон],
 
    if([contract/suppliers/supplier/legalEntityRF/contactInfo/lastName]='' or IsNull([contract/suppliers/supplier/legalEntityRF/contactInfo/lastName]),
    [contract/suppliers/supplier/individualPersonRF/lastName]&' '&
    [contract/suppliers/supplier/individualPersonRF/firstName]&' '&
    [contract/suppliers/supplier/individualPersonRF/middleName],   
    [contract/suppliers/supplier/legalEntityRF/contactInfo/lastName]&' '&
    [contract/suppliers/supplier/legalEntityRF/contactInfo/firstName]&' '&
    [contract/suppliers/supplier/legalEntityRF/contactInfo/middleName]) as [П-ФИО],
     
    if([contract/suppliers/supplier/legalEntityRF/OKTMO/name]='' or IsNull([contract/suppliers/supplier/legalEntityRF/OKTMO/name]),
    [contract/suppliers/supplier/individualPersonRF/OKTMO/name],
    [contract/suppliers/supplier/legalEntityRF/OKTMO/name]) as [OKTMO]
   
FROM [D:\ftp\Obrabotca\UnZIP\contract_*.xml] (XmlSimple, Table is [export]);
STORE * from export into D:\Выгрузка\служебные файлы\Архив\export0.qvd (qvd);
DROP Table export;

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

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

PadijVD

Остался только вопрос как теперь сделать инкрементальную загрузку из всего этого, чтобы не перезагружать каждый раз все данные.

раньше это делалось с помощью вот такого кода:
////загружаем старые данные
//concatenate
//load
//*
//From D:\Выгрузка\служебные файлы\Архив\1.qvd (qvd);
//
////сохраняем новые + старые в один файл
//STORE export0 INTO D:\Выгрузка\служебные файлы\Архив\1.qvd (qvd);

admin

#22
Круто  :)
С hash160 я конечно погорячился  :), смысл в том, чтобы просто составной ключ создать.
Можно и hash128() либо просто склейку строк &.
А с инкрементальной загрузкой в чем проблема?
По сути ничего не изменилось.
Первоначальный файл как был так и остался, добавляется таблица с последними датами и все.

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