Skip to main content
Announcements
Join us at Qlik Connect for 3 magical days of learning, networking,and inspiration! REGISTER TODAY and save!
cancel
Showing results for 
Search instead for 
Did you mean: 
vladimir_f
Contributor II
Contributor II

Менеджер загрузок таблиц при частичной загрузке

Добрый день!

Столкнулся с тем, что в работе использую много таблиц.   источники часто обновляются, поэтому QVD использовать не могу, - надо обновлять таблицы с сервера. Запросы тяжёлые.. . Но не все таблицы разом надо обновлять, а избранные.

Решил сделать этакий "менеджер" частичной загрузки, чтобы обновлять только те таблицы, которые я захочу..  не меняя при этом каждый раз скрипт загрузки.

Я столкнулся с небольшой проблемкой по самому Replace (таблица не перезагружалась, а добавлялась с постфиксом "-1",  "-2"  итд..    пришлось использовать  Drop Table (с set errormode=0 и принудительно использовать NoConcatenate) - но то мелочи..

И большой неприятностью для меня было, что не получилось использовать переменную для впихивания Replace в нужные мне участки кода...

**************************************

Привет:
$(v1)

NoConcatenate   LOAD * INLINE [
Персонаж, Оружие
Зилибоба, Карандаши
Арканоид, Звезда
Тельнар, Луч
Алуриель, Сферы
]
;

*******************************************

При этом в переменную v1    что я только не пихал, чтобы как-то сделать вывод Replace по нужному мне условию..

Взял одну таблицу.. при выборе поля,  условная переменная должна возвращать Replace в скрипт.     но не возвращает

=if(GetFieldSelections("$Table")='Привет','Replace')

Пробовал баловаться со знаком "="  в переменной..   в скрипте..   вложенные $()  делал -  в скрипт не хочет выводиться результат формулы..   что я не так делаю?

Нужно, чтобы в скрипт прописывалось Replace при выборе нужного мне поля..

Я считал что это просто .. да и логично:  выбрал нужное поле, нажал  CTRL+SHIFT+R    и перезагрузилась нужная таблица..

Помогите, кто знает как это реализовать..

Логику я потом допилю, усовершенствую.. но без этого шага ничего не получится..

Заранее спасибо

1 Solution

Accepted Solutions
vladimir_f
Contributor II
Contributor II
Author

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

Фишка была в том, чтобы при изменении таблицы на сервере (Например, IT позвонил и сказал что исправил багнутую таблицу), я мог, не залезая в скрипт,  парой движений мышки   перезагрузить нужную мне таблицу. (Например, у меня их 20 и каждая из них отрабатывает от 5 до 50  минут)

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

Короче - сейчас подумал. . мозги сообразили как решить эту проблему..   немного другим путём. .так что если кто знает, как значение ВЫЧИСЛЯЕМОЙ переменной пропихнуть в скрипт - пишите, буду рад. .

А решение состоит в следующем:

Формулы в переменной скрипта не воспринимаются..  но воспринимаются Простые значения..

Поэтому, раз Магомед не идёт к горе, Гора пошла к Магомеду:

Я создал кнопку, которая устанавливает переменные по нужной мне формуле, записывая в них статическое значение Replace или '//' в зависимости от выбранного поля..

***************************************************************

$(v2)
Дюшман:
LOAD * INLINE
[
Аф, Оф
Зилибоба, Карандаши
Арканоид, Звезда
Тельнар, Луч
Алуриель, Сферы
]
;

Привет:


$(v1)

LOAD * INLINE
[
Персонаж, Оружие
Зилибоба, Карандаши
Арканоид, Звезда
Тельнар, Луч
Алуриель, Сферы
]
;

************************************************************************

Выражение для v1: 

=if(GetFieldSelections($Table)like '*Привет*','Replace','//')

Выражение для v2:  

=if(GetFieldSelections($Table)like '*Дюшман*','Replace','//')

И так далее - сколько у вас там таблиц

Таким образом,  Выбрав нужные поля-таблицы,  нажав кнопку установки переменных,   при нажатии CTRL+SHIFT+R    загрузится именно то, что Вам надо.

Ну. .в своём приложении, конечно, покрасивее сделаю, но Принцип ясен. Функцию в два движения мыши выполняет (можно выбрать как одно, так и несколько полей)

Я не знаю.. считать ли этот вопрос решённым?   всё-таки механизм передачи формульной переменной в скрипт мне ещё не ясен..

Ставьте лайки,  делитесь идеями 

View solution in original post

3 Replies
vkozlov
Partner - Creator
Partner - Creator

Привет

Интересно

Не пробовали использовать доступные методы инкрементной загрузки данных(при этом в базе должна фиксироваться дата/время изменения)?

Например:

Загрузка новых и обновленных записей с помощью инкрементальной загрузки ‒ Qlik Sense

Anna_Klimkova
Employee
Employee

Владимир,

Вы можете хранить оператор Replace или любой кусок кода в текстовых файлах и вызывать с помощью include или Must_Include.

if  v1='Replace' then

     $(include = 'путь к файлу 1')

else

     $(include = 'путь к файлу 2')

end if;

Не самый изящный вариант, но вдруг пригодится.

vladimir_f
Contributor II
Contributor II
Author

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

Фишка была в том, чтобы при изменении таблицы на сервере (Например, IT позвонил и сказал что исправил багнутую таблицу), я мог, не залезая в скрипт,  парой движений мышки   перезагрузить нужную мне таблицу. (Например, у меня их 20 и каждая из них отрабатывает от 5 до 50  минут)

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

Короче - сейчас подумал. . мозги сообразили как решить эту проблему..   немного другим путём. .так что если кто знает, как значение ВЫЧИСЛЯЕМОЙ переменной пропихнуть в скрипт - пишите, буду рад. .

А решение состоит в следующем:

Формулы в переменной скрипта не воспринимаются..  но воспринимаются Простые значения..

Поэтому, раз Магомед не идёт к горе, Гора пошла к Магомеду:

Я создал кнопку, которая устанавливает переменные по нужной мне формуле, записывая в них статическое значение Replace или '//' в зависимости от выбранного поля..

***************************************************************

$(v2)
Дюшман:
LOAD * INLINE
[
Аф, Оф
Зилибоба, Карандаши
Арканоид, Звезда
Тельнар, Луч
Алуриель, Сферы
]
;

Привет:


$(v1)

LOAD * INLINE
[
Персонаж, Оружие
Зилибоба, Карандаши
Арканоид, Звезда
Тельнар, Луч
Алуриель, Сферы
]
;

************************************************************************

Выражение для v1: 

=if(GetFieldSelections($Table)like '*Привет*','Replace','//')

Выражение для v2:  

=if(GetFieldSelections($Table)like '*Дюшман*','Replace','//')

И так далее - сколько у вас там таблиц

Таким образом,  Выбрав нужные поля-таблицы,  нажав кнопку установки переменных,   при нажатии CTRL+SHIFT+R    загрузится именно то, что Вам надо.

Ну. .в своём приложении, конечно, покрасивее сделаю, но Принцип ясен. Функцию в два движения мыши выполняет (можно выбрать как одно, так и несколько полей)

Я не знаю.. считать ли этот вопрос решённым?   всё-таки механизм передачи формульной переменной в скрипт мне ещё не ясен..

Ставьте лайки,  делитесь идеями