Qlik Sense jest oprogramowaniem, które z założenia pomaga nam zautomatyzować niektóre procesy związane z danymi w naszej firmie. Z pomocą QMC możemy ustalić harmonogram odświeżania danych w aplikacji, a dzięki możliwości łączenia zadań możemy je uruchamiać kaskadowo, co pozwala na przygotowywanie danych w odpowiedniej kolejności. QMC pomoże nam również zsynchronizować nowych użytkowników czy automatycznie nadać im uprawnienia.
W dużym środowisku niektóre czynności związane z codzienną obsługą aplikacji Qlik Sense mogą zajmować nam dużo czasu. Przykładem może być publikowanie aplikacji po developmencie, usuwanie nieużywanych apek czy chociażby zarządzanie regułami dostępu. Część z tych czynności jest niezmienna, a gdy dołącza do tego ich duża złożoność łatwiej jest popełnić błąd. Rodzi się pytanie, czy jeśli ta praca jest powtarzalna, to można ją zautomatyzować?
Tak! Możemy stworzyć narzędzie pomagające nam zautomatyzować specyficzny dla naszego przypadku proces. Jednym z podejść może być wykorzystanie modułu Qlik-Cli, który pozwala na wydawanie poleceń serwerowi Qlik Sense z poziomu PowerShella. Możemy z jego pomocą napisać skrypty automatyzujące wykonywane przez nas czynności. Moduł i jego opis dostępny jest poniżej:
https://github.com/ahaydon/Qlik-Cli-Windows
Kolejnym rozwiązaniem jest wykorzystanie dziesiątek API, które są dostępne w naszej instalacji Qlik Sense. API jest ciągle rozwijane i utrzymywane przez Qlik’a, dzięki czemu nasze rozwiązanie posiada wysoki poziom stabilności. Dzięki API możemy utworzyć programy/skrypty pomagające nam w codziennych czynnościach, które do tej pory wykonywaliśmy za pomocą interfejsu graficznego Qlik Sense. Dostępne API znajdują się poniżej:
https://help.qlik.com/en-US/sense-developer/June2020/Content/Sense_Helpsites/APIs-and-SDKs.htm
Opisywany poniżej prosty skrypt jest odpowiedzią na realny problem naszego klienta. Kilka aplikacji rozwijanych dla różnych działów powstaje z jednej głównej aplikacji, w której zarządza się modelem danych oraz rozwija się arkusze z wizualizacjami.
W Qlik Sense zarządzanie dostępem do poszczególnych arkuszy podyktowane jest przez domyślne Security Rules, które nadają dostęp do wszystkich arkuszy w aplikacji, do której dany użytkownik ma dostęp. Aby nie zmieniać tych reguł tworzone są kopie aplikacji głównej (służącej do developmentu) i usuwane są niepotrzebne arkusze. Następnie poszczególne aplikacje są publikowane do odpowiednich stream’ów zastępując istniejące (aby zachować ustawione zadania przeładowywania tych aplikacji). Ta czynność po każdorazowej zmianie aplikacji bazowej wymaga dużo pracy, przy której nie trudno o błąd.
Do zautomatyzowania tego procesu posłużyłem się Qlik Sense Repository API (QRS API). Jest to API działające po REST dzięki czemu znając dowolny język programowania jesteśmy w stanie napisać program realizujący dane czynności automatycznie.
Do tego konkretnego zadania wybrałem język JavaScript, a cały skrypt uruchamiany jest w środowisku node.js. Do tworzenia kodu polecam darmowy Visual Studio Code od Microsoft.
Konfiguracja połączenia z serwerem zapisana jest w prostym plik .js, w którym ustawiamy szczegóły połączenia oraz wskazujemy folder z certyfikatami potrzebnymi do uwierzytelnienia połączenia z serwerem Qlik Sense:
var config = { hostname: 'qs.example.com', portNumber: 4242, virtualProxyPrefix: "", localCertPath: 'C:/Certs', repoAccount: 'UserDirectory=test;UserId=example',
}
module.exports = config
Konfiguracja tworzonych aplikacji znajduje się w kolejnym pliku konfiguracyjnym, w którym dla każdej tworzonej aplikacji wskazujemy id aplikacji źródłowej, nazwę nowej aplikacji, id aplikacji, która zostanie zastąpiona oraz nazwy arkuszy, które mają w niej pozostać. Dzięki takiemu plikowi, możemy utworzyć dowolną ilość tworzonych aplikacji, a skrypt wykona za nas resztę pracy.
var newAppConfig = { newApps: [ { sourceAppId: '388a1695-e268-414a-a1cb-53bd7a72c4e8', name: 'App 01', replacedAppId: '9b61a1c3-9118-4dbb-9285-5f8453ffc222', sheetNames: [ 'Sheet 01', 'Sheet 02' ] }, { sourceAppId: '388a1695-e268-414a-a1cb-53bd7a72c4e8', name: 'App 02', replacedAppId: 'd08b85ff-c2e9-4722-8818-1aa59cba9480', sheetNames: [ 'Sheet 03', 'Sheet 04' ] } ] }
module.exports = newAppConfig
Dla każdej zdefiniowanej aplikacji program wysyła zapytania REST do serwera Qlik Sense zgodnie z poniższym schematem:
Ręczny, powtarzalny i podatny na błędy proces publikowania aplikacji:
Został zautomatyzowany przez prosty program:
Czas publikowania aplikacji w opisywanym przypadku naszego klienta spadł z 10 minut, do 15 sekund.
Cały kod tego rozwiązania jest dostępny tutaj za darmo: https://github.com/miguki/qs-publisher
Jeżeli chciałbyś, żebyśmy pomogli Ci w stworzeniu narzędzia automatyzującego czynności w Qlik Sense w Twojej firmie, zgłoś się do nas.