Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
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.