Guia Avançado · Parte 3 de 3

Estado Alternativo
no Qlik Sense

O recurso mais subutilizado do Qlik Sense: compare dois contextos de seleção simultaneamente no mesmo grafico, sem filtros, sem duplicar objetos.

~18 min de leitura Qlik Sense / QlikView Nivel Expert
Scroll
Secao 01 - Conceito Fundamental

O que é Estado Alternativo?

Normalmente, um aplicativo Qlik tem um único estado de seleção: o usuario clica em "Sudeste" e todos os objetos refletem essa seleção. Estado Alternativo quebra essa limitacao, permitindo que diferentes objetos operem em contextos de seleção independentes e simultâneos.

O Problema que ele resolve

Imagine o seguinte cenário: o analista quer comparar o desempenho de dois produtos diferentes aplicando filtros distintos para cada um, sem criar um segundo app, sem abrir duas abas, sem usar sets hardcoded. Estado Alternativo é a resposta nativa do Qlik para esse problema.

Estado Padrao
{$}
Regiao: Sul
Ano: 2024
VS
Estado Alternativo
{Cenario_B}
Regiao: Norte
Ano: 2023

Ambos os estados coexistem no mesmo app, no mesmo momento. Um grafico pode exibir os dois valores lado a lado. O usuario pode fazer seleções em cada estado de forma completamente independente.

Como o Set Analysis entra na jogada

O Set Analysis permite referenciar qualquer estado pelo nome diretamente na expressão de medicao:

// Estado padrao - equivalente a {$}
Sum({$} Receita)

// Estado alternativo pelo nome
Sum({Cenario_B} Receita)

// Estado alternativo + modificador adicional
Sum({Cenario_B<Status={'Ativo'}>} Receita)

// Diferenca entre os dois estados
Sum({$} Receita) - Sum({Cenario_B} Receita)
💡
Sintaxe completa: {NomeDoEstado<Campo={'Valor'}>}. O nome do estado substitui o identificador padrao ($ ou 1). O modificador <> e opcional - sem ele, a expressão usa exatamente as seleções que estao ativas naquele estado no momento da execucao.

Diferenca entre Estado e Set Analysis com {1}

Set com {1} - estatico
// Sempre ignora TODAS as seleções
// Não e interativo - não muda
Sum({1<Regiao={'Sul'}>} Receita)

// O valor e fixo independente
// do que o usuario selecionar
Estado Alternativo - dinâmico
// Usa as seleções do estado Cenario_B
// O usuario pode mudar essas seleções!
Sum({Cenario_B} Receita)

// O valor muda conforme o usuario
// interage com os objetos daquele estado
Secao 02 - Casos de Uso

Por que usar Estado Alternativo?

Estado Alternativo não é um recurso para casos simples. Ele existe para resolver problemas de análise comparativa que, sem ele, exigiriam soluções paliativas complexas e frágeis.

📊

Comparacao de Periodos

O usuario seleciona Janeiro no Estado A e Fevereiro no Estado B. Um único grafico de barras exibe os dois meses lado a lado com as mesmas dimensoes, sem filtros hardcoded.

🗺️

Comparacao de Regioes

Benchmark entre duas regioes escolhidas pelo próprio usuario em tempo real. Sul vs Norte, Filial A vs Filial B - a escolha e do analista, não do desenvolvedor.

🔬

Analise What-If

Cenario atual vs cenário simulado. O estado padrao reflete a realidade; o estado alternativo reflete uma hipotese com filtros diferentes, budget diferente, mix de produto diferente.

🛒

Analise de Cesta (Basket)

Clientes que compraram o Produto A (Estado A) vs clientes que compraram o Produto B (Estado B). Qual cesta tem maior ticket medio? Qual tem mais recompra?

💹

Moeda / Cenario Economico

Mesmos dados com duas taxas de cambio diferentes. O CFO quer ver o resultado em USD e em BRL simultaneamente, com os mesmos filtros de produto e regiao.

🎯

Benchmark vs Meta

Realizado (estado padrao) vs meta ajustada (estado alternativo com modificadores). O desvio e calculado diretamente pela expressão.

Quando NÃO usar Estado Alternativo

Secao 03 - Configuracao

Como criar e configurar Estados

Estados sao criados na interface do Qlik Sense e depois referenciados em qualquer expressão de Set Analysis pelo nome exato que voce definiu.

Passo 1 - Criar o Estado na Interface

1

Editar Planilha

Clique em "Editar planilha" no canto superior direito. No painel de propriedades da planilha (não do objeto), localize a secao Estados Alternos.

2

Adicionar Estado

Clique em "Adicionar estado". Defina um nome sem espacos e sem acentos - esse e o nome que voce usara no Set Analysis. Ex: Cenario_B, Periodo_2.

3

Atribuir ao Objeto

Selecione o objeto (filtro, grafico, KPI). No painel de propriedades do objeto, localize Estado e selecione o estado criado. Esse objeto agora opera no novo estado.

⚠️
Convencao de nomenclatura: Use nomes descritivos e consistentes. Cenario_A e Cenario_B sao genericos mas funcionais. Periodo_Selecionado e Benchmark_Regiao sao melhores para dashboards de producao. Nunca use espacos ou caracteres especiais - o nome deve ser valido como identificador de expressão.

Passo 2 - Criar Filtros para cada Estado

O padrao mais comum e ter uma caixa de filtro (filter pane) para cada estado. O usuario faz seleções em cada caixa de forma independente:

Filtro A

Caixa de Filtro - Estado Padrao ($)

Exibe dimensoes (Regiao, Produto, Ano). O objeto esta atribuido ao estado padrao. As seleções aqui afetam todos os objetos que usam {$}.

Filtro B

Caixa de Filtro - Cenario_B

Exibe as mesmas dimensoes. O objeto esta atribuido ao estado Cenario_B. As seleções aqui so afetam objetos que referenciaram esse estado nas expressões.

Passo 3 - Referenciar no Set Analysis

// O objeto grafico usa estado padrao (nenhuma configuração especial)
// Basta ter as duas medicoes:

// Medicao 1 - usa as seleções do estado padrao
Sum({$} Receita)
// Label: "Receita - Selecao A"

// Medicao 2 - usa as seleções do estado Cenario_B
Sum({Cenario_B} Receita)
// Label: "Receita - Selecao B"

// Medicao 3 - diferenca absoluta entre os dois estados
Sum({$} Receita) - Sum({Cenario_B} Receita)
// Label: "Variacao A vs B"

// Medicao 4 - variacao percentual
Num(
    (Sum({$} Receita) / Sum({Cenario_B} Receita)) - 1,
    '+#,##0.0%;-#,##0.0%;0.0%'
)

Estado no Script de Carga

Voce também pode trabalhar com estados diretamente no script usando o modificador DISTINCT e inspecionar qual estado esta ativo. Mas a configuração de estados e sempre feita via interface - o script não cria estados:

// Voce pode LER o estado ativo de um campo via função GetCurrentField()
// mas a criacao de estados e exclusiva da interface do Sense

// O que voce PODE fazer no script e preparar campos
// que serao usados como seleções por estado:

Dim_Regiao:
LOAD DISTINCT
    Regiao,
    'Regiao: ' & Regiao AS Regiao_Label
RESIDENT Fatos;

// Esse campo sera exibido nos filtros de ambos os estados
Secao 04 - Padrões Avançados

Padrões de Produção com Estado Alternativo

Os padroes abaixo combinam Estado Alternativo com as técnicas de Set Analysis das partes anteriores - modificadores, P(), dollar-sign expansion e períodos dinâmicos.

Padrao 1 - Comparativo Regional Dinamico

// Configuracao: Dois filtros de Regiao (Estado $ e Estado Regiao_B)
// O usuario escolhe qualquer regiao em cada filtro

// KPI: Receita da Regiao A (seleção do usuario no estado padrao)
Sum({$} Receita)

// KPI: Receita da Regiao B (seleção do usuario no estado Regiao_B)
Sum({Regiao_B} Receita)

// Label dinâmico mostrando qual regiao esta em cada estado
'Regiao Selecionada: ' & GetCurrentField(Regiao)

// Para o estado alternativo, use a função dentro de um objeto
// atribuido ao estado Regiao_B:
'Comparativo: ' & Concat({Regiao_B} DISTINCT Regiao, ', ')

// Porcentagem de diferenca
Num(
    Sum({$} Receita) / Sum({Regiao_B} Receita) - 1,
    '+#,##0.0%;-#,##0.0%;0.0%'
)

Padrao 2 - Analise de Cohort com Estado + P()

// Estado padrao: clientes que compraram Produto A
// Estado Cohort_B: clientes que compraram Produto B
// Pergunta: qual a receita cruzada entre os dois grupos?

// Clientes exclusivos do Estado padrao (compraram A mas não B)
Count(
    {$<ClienteID =
        P({$} ClienteID)
        -
        P({Cohort_B} ClienteID)
    >}
    DISTINCT ClienteID
)

// Clientes em AMBOS os estados (compraram A e B)
Count(
    {$<ClienteID =
        P({$} ClienteID)
        *
        P({Cohort_B} ClienteID)
    >}
    DISTINCT ClienteID
)

// Receita dos clientes em comum
Sum(
    {$<ClienteID =
        P({$} ClienteID) * P({Cohort_B} ClienteID)
    >}
    Receita
)

Padrao 3 - What-If com Estado e Modificador

// Estado padrao: performance real (todas as seleções do usuario)
// Estado WhatIf: simulacao com canais ou categorias diferentes

// Realizado atual
Sum({$} Receita)

// Cenario simulado: estado WhatIf + desconto adicional de 10%
Sum({WhatIf} Receita) * 0.9

// Cenario simulado: estado WhatIf + apenas clientes Premium
Sum({WhatIf<Segmento={'Premium'}>} Receita)

// Impacto do cenário (diferenca absoluta)
Sum({$} Receita) - Sum({WhatIf} Receita)

// Porcentagem de impacto com formatacao de sinal
Num(
    (Sum({$} Receita) - Sum({WhatIf} Receita)) /
    Abs(Sum({WhatIf} Receita)),
    '+#,##0.0%;-#,##0.0%;0.0%'
)

Padrao 4 - Estado + Periodo Dinamico

Combinando Estado Alternativo com as expressões de período da Parte 2:

// Estado padrao: Regiao Sul, período padrao do usuario
// Estado Periodo_2: Regiao Norte, período diferente

// YTD da seleção padrao
Sum({$<Ano={$(=Max({1}Ano))},
     Mes={"<=$(=Month(Today()))"}>} Receita)

// YTD do estado alternativo - mesmo período, seleções diferentes
Sum({Periodo_2<Ano={$(=Max({1}Ano))},
                Mes={"<=$(=Month(Today()))"}>} Receita)

// Nota: os modificadores de período sao iguais nos dois -
// o que muda sao as seleções de Regiao/Produto feitas pelo usuario
// em cada caixa de filtro independente

Padrao 5 - TOTAL + Estado

// % de participacao do estado padrao no total do estado alternativo
// Util para ver quanto a Regiao A representa do universo Regiao B

Sum({$} Receita) /
Sum(TOTAL {Cenario_B} Receita)

// % de participacao com guarda contra divisao por zero
If(
    Sum({Cenario_B} Receita) > 0,
    Num(
        Sum({$} Receita) / Sum(TOTAL {Cenario_B} Receita),
        '#,##0.0%'
    ),
    'Sem dados'
)
Secao 05 - Boas Praticas

Referencia Rapida e Erros Comuns

Tabela de sintaxe completa, erros frequentes e checklist de boas praticas para uso em producao.

Tabela de Sintaxe Completa

ExpressaoSignificadoQuando usar
Sum({$} Receita)Estado padrao (seleções atuais)Medicao base de referencia
Sum({1} Receita)Todos os registros, ignora seleçõesTotal absoluto fixo
Sum({Cenario_B} Receita)Selecoes do estado Cenario_BComparativo A vs B
Sum({Cenario_B<Status={'Ativo'}>} Receita)Estado B + modificador adicionalEstado B filtrado por condicao extra
Count({$} DISTINCT ClienteID) - Count({Cenario_B} DISTINCT ClienteID)Diferenca de contagem entre estadosCrescimento ou queda de base
Sum({$} Receita) / Sum({Cenario_B} Receita) - 1Variacao percentual entre estadosKPI de comparativo
P({$} ClienteID) * P({Cenario_B} ClienteID)Intersecao de clientes entre estadosAnalise de cesta / cohort
Sum(TOTAL {Cenario_B} Receita)Total do estado B, ignora dimensoes do grafico% de participacao cruzada

Erros Mais Comuns

✗

Nome do estado errado

O nome no Set Analysis deve ser identico ao nome criado na interface, incluindo maiusculas, minusculas e underscores. {cenario_b} e diferente de {Cenario_B}.

✗

Objeto não atribuido ao estado

Criar o estado não basta. Cada objeto (filtro, botao) precisa ser explicitamente atribuido ao estado correto via painel de propriedades. Um filtro no estado padrao não alimenta o estado alternativo.

✗

Grafico respondendo ao estado errado

O grafico de comparação deve estar no estado padrao ($) para mostrar ambas as medicoes. Se o grafico estiver atribuido a um estado especifico, ele so reflete as seleções daquele estado.

✗

Confundir estado com modificador

{Cenario_B<Campo={'Valor'}>} usa as seleções do estado B E adiciona o modificador. {$<Campo={'Valor'}>} usa o estado padrao com modificador. Sao contextos diferentes.

Checklist de Boas Praticas