Três trilhas de migração. Armadilhas técnicas reais. O guia que o mercado não publicou: scripts, diferenças de sintaxe e o que quebra em cada etapa.
A Qlik anunciou o fim do suporte ao QlikView para 2025. O NPrinting já não tem roadmap de evolução significativo. E o Qlik Sense on-prem está em modo de manutenção enquanto o Qlik Cloud recebe todos os novos recursos.
O resultado: empresas que construíram seu BI nos últimos 15 anos sobre QlikView estão diante de uma migração em três etapas - e cada etapa tem suas próprias armadilhas técnicas.
"A maior armadilha das migrações Qlik não é técnica. É a suposição de que o load script vai funcionar igual. Não vai. E o NPrinting menos ainda."
O load script do Qlik Sense é compatível com a sintaxe QlikView na maior parte - mas existem diferenças críticas que quebram silenciosamente.
// QlikView trata NULL de forma
// mais permissiva em associações.
// Campos NULL participam de joins
// sem configuração explícita.
LOAD * FROM vendas.qvd (qvd);
// Declare NULL behavior explicitamente
SET NullInterpret = '';
SET NullDisplay = '-';
NullAsValue Field1, Field2;
LOAD * FROM vendas.qvd (qvd);
No QlikView, o Section Access usa campos NTNAME, OMIT e ACCESS com configuração via arquivo QMC. No Qlik Sense, o modelo é diferente: USER.EMAIL ou USER.USERID substituem NTNAME, e o campo OMIT foi descontinuado.
Section Access;
LOAD * INLINE [
ACCESS, NTNAME, REGION, OMIT
ADMIN, DOMAIN\admin, *,
USER, DOMAIN\ana, SP, CUSTO
USER, DOMAIN\joao, RJ, CUSTO
];
Section Application;
Section Access;
LOAD * INLINE [
ACCESS, USERID, REGION
ADMIN, ana@empresa.com, *
USER, joao@empresa.com,RJ
USER, pedro@empresa.com,SP
];
// OMIT descontinuado:
// use Row-Level Security via
// campo de filtro no modelo
Section Application;
O qualificador TOTAL sem especificação de campo ignora todas as dimensões do gráfico em ambas as plataformas. QlikView e Qlik Sense se comportam da mesma forma neste caso - a sintaxe básica migra sem alteração.
// TOTAL sem campo: ignora
// todas as dimensões do gráfico
// (comportamento igual nas duas plataformas)
Sum(Vendas) / Sum(TOTAL Vendas)
// Com campo: restringe quais
// dimensões o TOTAL ignora
// (sintaxe disponível em ambas)
Sum(Vendas) /
Sum(TOTAL <Regiao> Vendas)
// Edge cases reais de migração:
// 1. Set Analysis aninhado com TOTAL
// - ordem de avaliação pode diferir
Sum({<Ano={2024}>} TOTAL Vendas)
// 2. Master Visualizations no Qlik Cloud
// - contexto de seleção pode
// interagir de forma diferente
// com o qualificador TOTAL
O Qlik Cloud substitui o modelo de Streams por Spaces - e entender a diferença entre eles é o primeiro passo para uma migração sem retrabalho.
No Sense on-prem, integrações usam Virtual Proxies com certificados ou JWT. No Cloud, o padrão é OAuth 2.0 com escopos declarados.
Autenticação via OAuth 2.0 - Qlik Cloud API# Obter access token (Client Credentials)
curl -X POST https://SEU_TENANT.us.qlikcloud.com/oauth/token \
-H "Content-Type: application/json" \
-d '{
"grant_type": "client_credentials",
"client_id": "SEU_CLIENT_ID",
"client_secret": "SEU_CLIENT_SECRET"
}'
# Usar o token para recarregar um app
curl -X POST \
https://SEU_TENANT.us.qlikcloud.com/api/v1/apps/APP_ID/reloads \
-H "Authorization: Bearer ACCESS_TOKEN" \
-H "Content-Type: application/json"
No on-prem, QVDs ficam em file shares ou diretórios locais. No Cloud, precisam de um Data Connection apontando para S3, ADLS Gen2, GCS ou Qlik Data Gateway para fontes on-premises.
LOAD * FROM
[lib://QVD_Store/vendas_$(vAno).qvd]
(qvd);
// Data Connection: "S3_DataLake"
// configurada no Data Space
LOAD * FROM
[lib://S3_DataLake:vendas/$(vAno).qvd]
(qvd);
// Ou via Qlik Data Gateway
// para QVDs em rede corporativa
Esta é a trilha mais subestimada. Muitas equipes assumem que "o NPrinting vai continuar funcionando" após mover apps para o Cloud. Não vai - NPrinting conecta apenas ao Qlik Sense on-prem.
NPrinting não tem suporte ao Qlik Cloud. Se seus apps migrarem para o Cloud, sua distribuição de relatórios precisa migrar também.
Templates: Excel, Word,
PowerPoint, HTML, PDF
Distribuição: Email, Folder,
NewsStand
Bursting: por campo de usuário
na conexão (filtro por usuário)
Agendamento: cron-like no
NPrinting Scheduler
Pixel-perfect: sim, via
template Office detalhado
Templates: Qlik Sense app
(não importa templates Office)
Distribuição: Email via
Qlik Application Automation
Bursting: via loop no Automation
+ Section Access dinâmico
Agendamento: Automation
(triggers temporais ou eventos)
Pixel-perfect: via PDF export
configurado no app
No NPrinting, o bursting era declarativo: você apontava um campo e ele gerava um PDF por valor. No Cloud, o bursting é imperativo via Automation:
Lógica de bursting - Qlik Application Automation (pseudocódigo)// Bloco: Start (Trigger: Schedule - todo dia 6h)
// 1. Buscar lista de regiões via REST API
GET /api/v1/apps/{appId}/data
→ retorna lista de valores do campo "Regiao"
// 2. Loop por cada região
FOR EACH regiao IN lista_regioes:
// 3. Aplicar seleção via Engine API
POST /api/v1/apps/{appId}/reloads
body: { selections: [{ field: "Regiao", values: [regiao] }] }
// 4. Exportar PDF do sheet configurado
POST /api/v1/apps/{appId}/sheets/{sheetId}/export
body: { outputFormat: "pdf" }
→ retorna URL do PDF gerado
// 5. Enviar por email
Email: para = lookup_email(regiao)
assunto = "Relatório " + regiao
anexo = URL_PDF
Para relatórios pixel-perfect críticos (regulatório, financeiro), avalie Qlik Sense + Sense on-prem em modo híbrido ou uma solução de relatórios complementar enquanto o Cloud Reporting amadurece.
Toda migração começa com um inventário honesto. Execute isso antes de abrir qualquer ticket de projeto:
QlikView parado há anos esperando migrar? NPrinting que ninguém sabe como substituir? Sense on-prem com data de fim de suporte se aproximando?
Conta nos comentários em que ponto do caminho você está. Já passei pelas três trilhas em produção.
#Qlik #QlikSense #QlikCloud #QlikView #NPrinting #DataGovernance #BusinessIntelligence #BI #DataEngineering #CloudMigration