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

Автор Тема: Удаление строк из QVD файла  (Прочитано 1364 раз)

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Удаление строк из QVD файла
« : Март 26, 2016, 12:38:58 pm »
Добрый день уважаемые знатоки!
Опять нужен Ваш совет:
Есть таблица сохраненная в QVD файл, формируется с помощью инкрементальной загрузки, на каждый месяц, далее все это загружается в рабочую таблицу (данных очень много >1000000 обработанных файлов) необходимо удалять некорректные данные по  списку допустим по полю "№" без перезагрузке всех данных.
в идеале создать таблицу xls и из нее взять нужные номера и удалить эти данные.

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #1 : Март 28, 2016, 05:25:24 pm »
Привет.
Можно создать таблицу с требуемыми исключениями и при загрузке проверять на существование exists() в ней.

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #2 : Март 29, 2016, 12:24:25 am »
Привет, спасибо за совет попробую и отпишусь.

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

Re: Удаление строк из QVD файла
« Ответ #2 : Март 29, 2016, 12:24:25 am »

Оффлайн PadijVD

  • Наставник
  • **
  • Сообщений: 52
  • Рейтинг: +5/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #3 : Апрель 03, 2016, 04:28:07 pm »
Привет.
Можно создать таблицу с требуемыми исключениями и при загрузке проверять на существование exists() в ней.

Привет, спасибо за совет! Реализовал так как ты и посоветовал, все прекрасно работает!

Оффлайн LoryMax

  • Наставник
  • **
  • Сообщений: 59
  • Страна: ru
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #4 : Июнь 16, 2016, 09:22:14 am »
Не хочу создавать новую тему.

Хочу очистить таблицу остатков от избыточных данных (а это - данные по дате-объекту-артикулу с нулевыми остатками за тот период, когда товар еще не был заведен).  Хочу сделать без цикла, в рамках выборки из таблицы. Возможно ли такое?
Есть поле с дневным движением (DR). Вижу схему такую: если артикул текущей записи тот же самый, DR<>0 - запись загружаем. Но после первого движения будут и  DR=0, которые уже тоже нужно вносить. Как здесь быть?

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #5 : Июнь 16, 2016, 11:19:26 am »
Привет,
используйте межзаписные функции peek() , previous().
И помните, что сортировка в таблице работает только при резидентной загрузке.

Оффлайн LoryMax

  • Наставник
  • **
  • Сообщений: 59
  • Страна: ru
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #6 : Июнь 16, 2016, 12:12:24 pm »
про эти функции в курсе. только не пойму, возможно ли вообще применить, если можно - то как?. Дело в том, что мне нужно сохранить записи с DR=0 после того момента во времени, когда было первое движение товара. чтобы данные после 18.02.15 тоже загрузились.

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

Re: Удаление строк из QVD файла
« Ответ #6 : Июнь 16, 2016, 12:12:24 pm »

Оффлайн admin

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 981
  • Страна: ru
  • Рейтинг: +97/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #7 : Июнь 16, 2016, 12:41:21 pm »
Используйте временное флаговое поле.
Началось движение - ставим 1 и т.д. до конца. Останутся 0 там где движение еще не началось.

Оффлайн LoryMax

  • Наставник
  • **
  • Сообщений: 59
  • Страна: ru
  • Рейтинг: +6/-0
    • Просмотр профиля
Re: Удаление строк из QVD файла
« Ответ #8 : Июнь 16, 2016, 02:37:15 pm »
admin, спасибо!

Работает так:
T8:
load ARTICLE
    ,DATER
    ,OBJECT
    ,DR //дневное движение
    ,SumRest //остаток на текущий день
    from lib://QlikFolderU/QlikRest8.qvd (qvd);

T81:
load *
    ,if(peek(ARTICLE)= ARTICLE and DR<>0, 1, if(peek(ARTICLE)= ARTICLE and Peek(Flag) = 1,1,0)) as Flag
    resident T8;

drop table T8;
   
    T82:
    load ARTICLE
    ,DATER
    ,OBJECT
    ,DR
    ,SumRest
    Resident T81
    where Flag = 1;
    drop table T81;
В итоге получаем, что данные по товару начинаются со дня первого движения.

Почему в Т82 нельзя использовать звездочку в load? ошибок нет, но и данных нет. Укоротить этот путь из 3х таблиц как то можно?