Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Не получили письмо с кодом активации?
Ноябрь 21, 2017, 03:36:13 am

Автор Тема: Загрузка данных в Qlikivew  (Прочитано 4130 раз)

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Загрузка данных в Qlikivew
« : Июль 20, 2015, 12:24:16 pm »
Добрый день!
Подскажите как можно исключить из загрузки файл по дате?
Имеются файлы для анализа со следующими столбцами (Excel файлы)
Дата публикации, id, номер и тд.
Нужно при загрузки проверить Дату публикации и загрузить файл с последней датой.
https://yadi.sk/i/E5yopoOqhxrLx

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #1 : Июль 20, 2015, 12:43:46 pm »
Добрый день.
Нужно применить вот такую выборку:
SELECT field_01, date FROM table a WHERE date=(SELECT max(date) FROM table b WHERE a.field_01 = b.field_01);

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #2 : Июль 20, 2015, 12:53:29 pm »
Спасибо за ответ!
Если можно помогите внедрить в мой код

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]);

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Загрузка данных
« Ответ #2 : Июль 20, 2015, 12:53:29 pm »

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #3 : Июль 20, 2015, 05:28:57 pm »
Есть возможность выложить "кусок" (20 строк) xml-файла, чтобы написал требуемую загрузку?


Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #4 : Июль 20, 2015, 07:23:15 pm »

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #5 : Июль 21, 2015, 09:53:13 am »
Добрый день.
Поскольку все названия 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

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #6 : Июль 21, 2015, 11:58:29 am »
и еще вопрос насколько я понимаю к загрузке берется только один файл (с максимальной датой публикации). А мне необходимо сделать проверку по столбцу 'Номер реестровой записи контракта' и в случае когда находятся два и более одинаковых номера,  загрузить файл с последней датой публикации + загрузить все остальные файлы.

Неофициальный форум пользователей QlikView & Qlik Sense

Re: Загрузка данных
« Ответ #6 : Июль 21, 2015, 11:58:29 am »

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #7 : Июль 21, 2015, 11:58:50 am »
Исправил, предыдущий скрипт.

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #8 : Июль 21, 2015, 12:33:55 pm »
и еще вопрос насколько я понимаю к загрузке берется только один файл (с максимальной датой публикации). А мне необходимо сделать проверку по столбцу 'Номер реестровой записи контракта' и в случае когда находятся два и более одинаковых номера,  загрузить файл с последней датой публикации + загрузить все остальные файлы.

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

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

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #9 : Июль 21, 2015, 12:36:17 pm »
Спасибо, буду тогда сам пытаться решить данный момент.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #10 : Июль 21, 2015, 12:40:06 pm »
Держите в курсе решения, освобожусь - посмотрю.

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Загрузка данных
« Ответ #11 : Июль 21, 2015, 12:42:01 pm »
Держите в курсе решения, освобожусь - посмотрю.
Хорошо! за любую помощь буду благодарен!

Оффлайн kvv

  • Гуру
  • ***
  • Сообщений: 135
  • Страна: 00
  • Рейтинг: +36/-0
    • Просмотр профиля
Re: Загрузка данных в Qlikivew
« Ответ #12 : Июль 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];

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Загрузка данных в Qlikivew
« Ответ #13 : Июль 22, 2015, 07:09:14 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

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Загрузка данных в Qlikivew
« Ответ #14 : Июль 23, 2015, 02:28:12 pm »
Привет, если я правильно понял задачу то вот примерный код:
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 .