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: 
antoniodneto
Creator II
Creator II

Ajuda com Filtro de Data

Boa tarde Amigos,

Tenho um campo de DATA que está numérico no formato YYYYMM.

Utilizei a expressão para dimensão =date(date#(Max(DATA_BASE_FINAL),'YYYYMM'),'MMM/YY') e me retornou corretamente a data Out/18.

Porém estou querendo colocar ela dentro de um set analysis dessa maneira =SUM({<DATA_BASE_FINAL={"$(=date(date#(Max(DATA_BASE_FINAL),'YYYYMM'),'MMM/YY'))"}>}SDB_ATUAL)/1000000 e está me retornando zerado.

Existe algum erro na expressão?

Obrigado a todos!

Labels (3)
18 Replies
fernando_tonial
Employee
Employee

Se o campo está com o valor YYYYMM você deve comparar com o mesmo formato YYYYMM e não MMM/YY.
Don't Worry, be Qlik.
Nilton
Contributor II
Contributor II

Se o Formato é YYYYMM você não pode comparar com MMM/YY com YYYYMM

Mude para

=SUM({<DATA_BASE_FINAL={"$(=date(Max(DATA_BASE_FINAL)'YYYYMM))"}>}SDB_ATUAL)/1000000

Thiago_Justen_

Antônio,

Não sou muito fã de usar formatação de campo em set analysis, salvo extrema necessidade. Desse modo te pergunto: Por que não tratas o campo DATA_BASE_FINAL em seu script? Você inclusive criar um campo numérico que represente a data de forma que  seu set fique mais facilitado ( NUM(CAMPO_DATA_FINAL) ).

 

 

Thiago Justen Teixeira Gonçalves
Farol BI
WhatsApp: 24 98152-1675
Skype: justen.thiago
antoniodneto
Creator II
Creator II
Author

Olá Thiago tudo bem?

Vou tentar explicar melhor o que estou tentando fazer.

Tenho uma tabela dinâmica com o campo DATA_BASE como minha dimensão, nela contem as datas de 201810 e 201809.

Como Medida estou utilizando a expressão.

if(DATA_BASE_FINAL = MAX(DATA_BASE_FINAL),sum({<MACRO={'MESMO ESTAGIO'},MOTIVO={'Continua Stage 1'},MOTIVO_2={'Amortiza Saldo'},DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'}>}SDB_ATUAL)/1000000
,
IF(DATA_BASE_FINAL = MAX(DATA_BASE_FINAL,2),sum({<MACRO={'MESMO ESTAGIO'},MOTIVO={'Continua Stage 1'},MOTIVO_2={'Amortiza Saldo'},DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'}>}SDB_ANT)/1000000
,
0))

 

Então nas datas da tabela onde for 201810 faça essa expressão utilizando o SUM(SDB_ATUAL) da DATA 201810.

Onde for 201809 faça a expressão utilizando o SUM(SDB_ANT) da DATA 201810.

O primeiro IF está trazendo corretamente porém existe algum erro no segundo que não está trazendo o valor.

Pode me ajudar?

Abraço!!

Nilton
Contributor II
Contributor II

Em tese, você só precisa de:

sum({<

MACRO={'MESMO ESTAGIO'},

MOTIVO={'Continua Stage 1'},

MOTIVO_2={'Amortiza Saldo'},

DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'} --> NÃO precisa

>}SDB_ATUAL)/1000000

Se você possui o campo DATA_BASE_FINAL na sua tabela, não precisa coloca-lá no Set Analysis, pois o sum(SDB_ATUAL) será do próprio mês.

antoniodneto
Creator II
Creator II
Author

Olá Nilton,

Então eu coloquei essa parte do DATA_BASE_FINAL={'$(=MAX(DATA_BASE_FINAL))'} porque para o mês 201810 ele deve fazer a SUM(SDB_ATUAL) porém na minha tabela também tem o mês 201809, e esse sim eu preciso que utiliza o campo SUM(SDB_ANT) do mês 201810.

 

 

Nilton
Contributor II
Contributor II

Entendi, o ideal para performance seria fazer isso no script.

Load max(DATA_BASE_FINAL) as MaxDate

Resident Tabela;

LET vMaxDate = Peek('MaxDate');

 

Pergunta: o campo SDB_ATUAL e SDB_ANT e DATA_BASE_FINAL estão na mesma tabela?

Se sim, agora você pode fazer assim no SCRIPT:

if(DATA_BASE_FINAL = $(MaxDate), SDB_ATUAL, SDB_ANT) as SDB_FINAL 

Se não estiverem na mesma tabela, aconselho verificar uma melhor modelagem e sempre tratar esse  tipo de coisa via script para sua aplicação ficar com melhor performance

antoniodneto
Creator II
Creator II
Author

Nilton,

Sim todos os campos estão na mesma tabela.

Ainda não estou explorando a parte do script, poderia me ajudar como incluir todas essas informações e trazer na minha expressão? Abraço!

Nilton
Contributor II
Contributor II

Vamos lá, se todos os campos estão na mesma tabela, isso facilita.

Vamos a 1ª pergunta:
Você está lendo esses dados de uma tabela no banco de dados? Arquivo (CSV, Excel, QVD, XML)?

Em tese o que você deverá fazer é SALVAR o MAX DATA ATUAL em uma VARIÁVEL, mas como fazer isso?

Assim:

Load max(DATA_BASE_FINAL) as MaxDate From Tabela; // Se forArquivo CSV, Excel, etc

Select max(DATA_BASE_FINAL) as MaxDate From Tabela; // Se for um Select no Banco de dados

LET vMaxDate = Peek('MaxDate'); // O LET pega um valor em algum campo, no caso, o campo MaxDate

 

Agora você irá carregar seus dados, mas adicione um CAMPO NOVO:

Load

Campo1,

Campo2,

...,

...,

if(DATA_BASE_FINAL = $(MaxDate), SDB_ATUAL, SDB_ANT) as SDB_FINAL 

From tabela;

 

Veja se dá certo. e se entendeu bem. qualquer coisa, posta o QVW ai.