Skip to main content
Announcements
Live today at 11 AM ET. Get your questions about Qlik Connect answered, or just listen in. SIGN UP NOW
cancel
Showing results for 
Search instead for 
Did you mean: 
ricardoregis
Contributor III
Contributor III

Separar mês de fechamento por ano

Pessoal, bom dia, 

Usei o primeiro IF abaixo para identificar se um mês é ou não fechamento de trimestre e deu certo!

No entanto, ele estava me trazendo todos os meses de março, por exemplo, quando eu selecionava o 1º TRI. Preciso ter um campo que me dê essa opção por ano. Tentei a segunda fórmula para complementar e não deu certo. Apareceu que o campo "ClassificTri" não foi encontrado sendo que quando eu uso somente a primeira fórmula, funciona normalmente na visualização do painel. Poderiam me ajudar?

 

IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri,


IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (tempDate))) AS trimestreOficial

 

Atenciosamente.

1 Solution

Accepted Solutions
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, você alterou o nome do campo no LOAD anterior.

TempDate AS DATA_ITR

Correto seria assim.

CALENDÁRIO:
LOAD *, 
IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (DATA_ITR))) AS trimestreOficial;
LOAD
IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri,
TempDate AS DATA_ITR,
week(TempDate) As Semana_ITR,
Year(TempDate) As Ano_ITR,
Month(TempDate) As Mês_ITR,
Num(Month(TempDate)) as Mês.num_ITR,
Day(TempDate) As Dia_ITR,
YeartoDate(TempDate)*-1 as CurYTDFlag,
YeartoDate(TempDate,-1)*-1 as LastYTDFlag,
date(monthstart(TempDate), 'MMM-YYYY') as MesAno_ITR,
ApplyMap('QuartersMap', month(TempDate), Null()) as Trimestre_ITR,
Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as SemanaAno_ITR,
WeekDay(TempDate) as DiaSemana_ITR
Resident TempCalendar
Order By TempDate ASC;

Don't worry, be Qlik.

Tonial

Don't Worry, be Qlik.

View solution in original post

6 Replies
fernando_tonial
Partner - Specialist
Partner - Specialist

Olá,

Você deve fazer um load sobre o load para utilizar o novo campo

 

Dados:
LOAD
IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (tempDate))) AS trimestreOficial;
LOAD
IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri
From Tabela;


Don't worry, be Qlik.

Tonial

Don't Worry, be Qlik.
IvanOsatchuk
Contributor III
Contributor III

Acredito que pode usar o Preceding LOAD (link)

 

Nome_Tabela:
LOAD *,
IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (tempDate))) AS trimestreOficial;
LOAD
IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri,
.
.
.
From Fonte_Dados;
ricardoregis
Contributor III
Contributor III
Author

Seguem anexas evidências de como eu estou montando o script e vou colar como está até agora:

Está certo usar a tabela CALENDÁRIO como referência pra fazer os loads do campos?

Trimestre_Ano:
LOAD
           IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (tempDate))) AS trimestreOficial;
LOAD
            IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri
From CALENDÁRIO;

Atenciosamente.

 

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá Ricardo,

A forma com que você está pensando em fazer teria apenas um campo na tabela e sem associação com as demais tabelas do modelo de dados.
Nesse seu caso é mais prudente você colocar na própria tabela de calendário.

Algo assim:

Calendario:
LOAD *,
           IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (tempDate))) AS trimestreOficial;
LOAD
            IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri,
Demais campos da tabela calendário
Resident TempCalendar
Order By TempDate;


Novamente, sempre bom colocar o seu script no post e não como imagem, assim todos da comunidade pode ajudar melhor.

o campo ClassificTri pode ser eliminado apos o comando anterior

Drop Fiels ClassificTri;

Don't worry, be Qlik.

Tonial.

Don't Worry, be Qlik.
ricardoregis
Contributor III
Contributor III
Author

Deu um erro diferente:  "O campo TempDate" não foi encontrado.

Achei estranho, pois não fizemos alteração nenhuma neste campo.

SCRIPT :

QuartersMap:
MAPPING LOAD
rowno() as Month,
Ceil (rowno()/3) & 'º Trimestre' as Quarter
AUTOGENERATE (12);

Temp:
Load
min(DATA_ITR) as minDate,
max(DATA_ITR) as maxDate
Resident BASE_VALORES;

Let varMinDate = Num(Peek('minDate', 0, 'Temp'));
Let varMaxDate = Num(Peek('maxDate', 0, 'Temp'));
DROP Table Temp;

TempCalendar:
LOAD
$(varMinDate) + Iterno()-1 As Num,
Date($(varMinDate) + IterNo() - 1) as TempDate
AutoGenerate 1 While $(varMinDate) + IterNo() -1 <= $(varMaxDate);



CALENDÁRIO:
LOAD *,
IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (tempDate))) AS trimestreOficial;
LOAD
IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri,
TempDate AS DATA_ITR,
week(TempDate) As Semana_ITR,
Year(TempDate) As Ano_ITR,
Month(TempDate) As Mês_ITR,
Num(Month(TempDate)) as Mês.num_ITR,
Day(TempDate) As Dia_ITR,
YeartoDate(TempDate)*-1 as CurYTDFlag,
YeartoDate(TempDate,-1)*-1 as LastYTDFlag,
date(monthstart(TempDate), 'MMM-YYYY') as MesAno_ITR,
ApplyMap('QuartersMap', month(TempDate), Null()) as Trimestre_ITR,
Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as SemanaAno_ITR,
WeekDay(TempDate) as DiaSemana_ITR

Resident TempCalendar
Order By TempDate ASC;
Drop Table TempCalendar;

fernando_tonial
Partner - Specialist
Partner - Specialist

Olá, você alterou o nome do campo no LOAD anterior.

TempDate AS DATA_ITR

Correto seria assim.

CALENDÁRIO:
LOAD *, 
IF (ClassificTri = 'NÃO É TRI' , '' , CONCAT (ClassificTri , ' - ' , year (DATA_ITR))) AS trimestreOficial;
LOAD
IF(Num(Month(TempDate))/12 = 1/4 , '1º TRI' , IF(Num(Month(TempDate))/12 = 1/2 ,'2 ºTRI' , IF(Num(Month(TempDate))/12 = 3/4 , '3º TRI' , IF(Num(Month(TempDate))/12 = 1 , '4º TRI' , 'NÃO É TRI')))) AS ClassificTri,
TempDate AS DATA_ITR,
week(TempDate) As Semana_ITR,
Year(TempDate) As Ano_ITR,
Month(TempDate) As Mês_ITR,
Num(Month(TempDate)) as Mês.num_ITR,
Day(TempDate) As Dia_ITR,
YeartoDate(TempDate)*-1 as CurYTDFlag,
YeartoDate(TempDate,-1)*-1 as LastYTDFlag,
date(monthstart(TempDate), 'MMM-YYYY') as MesAno_ITR,
ApplyMap('QuartersMap', month(TempDate), Null()) as Trimestre_ITR,
Week(weekstart(TempDate)) & '-' & WeekYear(TempDate) as SemanaAno_ITR,
WeekDay(TempDate) as DiaSemana_ITR
Resident TempCalendar
Order By TempDate ASC;

Don't worry, be Qlik.

Tonial

Don't Worry, be Qlik.