Skip to main content
Announcements
NEW: Seamless Public Data Sharing with Qlik's New Anonymous Access Capability: TELL ME MORE!
cancel
Showing results for 
Search instead for 
Did you mean: 
rafaelsigaapp
Contributor II
Contributor II

Somar valores do mês anterior respeitando filtros

Boa tarde.

Estou com um filtro aplicado no mês. A seleção atual esta MES = 11 e ANO = 2018.

Gostaria somar o valor de uma coluna respeitando todos os outros filtros aplicados com exceção ao MES e ANO que devem ser o anterior ao selecionado.

Vejam na imagem como fiz a expressão no qual esta retornando zero.

=Sum({<MES={'10'}, ANO={'2018'}>} VALOR_LIQUIDO)

 

5 Replies
Gabriel_Fernandes
Contributor III
Contributor III

Olá,

Experimente assim:

 

=Sum({1<MES={'10'}, ANO={'2018'}>} VALOR_LIQUIDO)

 

o 1 significa que o set analysis não vai respeitar os filtros selecionados

rafaelsigaapp
Contributor II
Contributor II
Author

Funcionou em parte. Desta maneira ele soma o total ignorando os demais filtros aplicados.

Preciso que some o mês anterior respeitando os demais filtros.

Gabriel_Fernandes
Contributor III
Contributor III

Entendi,

não sei se tem uma forma melhor, mas quando tive uma situação parecida (somar data diferente da selecionada) eu criei uma tabela para as datas, sem relacionamento com as demais. 

assim eu:

1 - Fiz uma RESIDENTdo campo da data e alterei o nome do campo para não relacionar com a tabela original:

       * nome do campo: Data_Filtro

1 - Coloquei essa tabela como opção para seleção pro usuário.

2 - Criei uma variável calculando a data que eu precisava com base na seleção do usuário:

        * Ex: vData = Num(Month( AddMonths(GetFieldSelections(Data_Filtro),-1)))

3 - Considerei a variavel vData no set analysis

        * Ex: =Sum({<MES={'$(vData)'}, ANO={'2018'}>} VALOR_LIQUIDO)

veja se atende dessa forma.

 

Abraço

 

 

rafaelsigaapp
Contributor II
Contributor II
Author

Tentei fazer isso mas não rolou.

Veja o script:

FATURAMENTO:
SQL
SELECT
UF_CLIENTE,
MUNICIPIO_CLIENTE,
NOME_VENDEDOR,
NOME_CLIENTE,
RAMO_CLIENTE,
DESCRICAO_PRODUTO,
DESCRICAO_GRUPO,
DESCRICAO_GRUPO_RES,
TIPO_VENDEDOR,
TES_ESTOQUE,
TES_FINANCEIRO,
TIPO_TES,
ANO,
MES,
SEMANA_ANO,
SEMANA_MES,
DIA,
VALOR_LIQUIDO,
QUANTIDADE,
PESO_FATURADO,
PERC_DESCONTO,
FRETE
FROM QV_FATURAMENTO;
NoConcatenate
LOAD *, Date(AddMonths('01/' & Num(MES,'00') & '/' & ANO,-1), 'MM') AS MES_ANT, Date(AddMonths('01/' & Num(MES,'00') & '/' & ANO,-1), 'YYYY') AS ANO_ANT Resident FATURAMENTO;

Veja que na imagem, mesmo considerando o MES_ANT como 10 o valor esta trazendo do mês 11.

thiago_mlg
Creator II
Creator II

Boa tarde!

Faça assim..

Carregue sua tabela normalmente, conforme abaixo, porem adicionando um campo.

FATURAMENTO:

LOAD *,

'ATUAL'  AS STATUS_DATA;
SQL
SELECT
UF_CLIENTE,
MUNICIPIO_CLIENTE,
NOME_VENDEDOR,
NOME_CLIENTE,
RAMO_CLIENTE,
DESCRICAO_PRODUTO,
DESCRICAO_GRUPO,
DESCRICAO_GRUPO_RES,
TIPO_VENDEDOR,
TES_ESTOQUE,
TES_FINANCEIRO,
TIPO_TES,
ANO,
MES,
SEMANA_ANO,
SEMANA_MES,
DIA,
VALOR_LIQUIDO,
QUANTIDADE,
PESO_FATURADO,
PERC_DESCONTO,
FRETE
FROM QV_FATURAMENTO;

//CARREGUE NOVAMENTE A TABELA ACIMA.. FAZENDO MODIFICAÇÕES NA DATA, CONFORME ABAIXO.

LOAD *,

'ANTERIOR'  AS STATUS_DATA;
SQL
SELECT
UF_CLIENTE,
MUNICIPIO_CLIENTE,
NOME_VENDEDOR,
NOME_CLIENTE,
RAMO_CLIENTE,
DESCRICAO_PRODUTO,
DESCRICAO_GRUPO,
DESCRICAO_GRUPO_RES,
TIPO_VENDEDOR,
TES_ESTOQUE,
TES_FINANCEIRO,
TIPO_TES,

YEAR(ADDMONTHS(MAKEDATE(ANO,MES,DIA),+1))   AS ANO,

MONTH(ADDMONTHS(MAKEDATE(ANO,MES,DIA),+1)) AS MES,

WEEK(ADDMONTHS(MAKEDATE(ANO,MES,DIA),+1)) AS SEMANA_MES,

//E FAÇA PARA SEMANA ANO E DIA.. 

//ANO,
//MES,
//SEMANA_ANO,
//SEMANA_MES,
//DIA,
VALOR_LIQUIDO,
QUANTIDADE,
PESO_FATURADO,
PERC_DESCONTO,
FRETE
FROM QV_FATURAMENTO;

 

As tabelas irão se concatenar automaticamente. Caso não, concatene-as.

Agora você possui uma massa de dados duplicada, que está dividida apenas pelo STATUS_DATA. Utilize em todas as expressões o campo STATUS_DATA = atual.. Apenas nos campos/colunas/expressões onde você quer o mês anterior utilize na expressão o campo STATUS_DATA = anterior.. desta forma você conseguirá fazer todos os filtros conforme desejado.