Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 
guilherme_rigon
Contributor III
Contributor III

Calêndário Cíclico

Boa tarde!

Estava observando o aplicativo nativo do Qlik Sense "Sales Discovery" e no gráfico que exibe as vendas diárias percebi que as data se dimensionam de acordo com o "zoom" da área selecionada.

Gostaria de fazer isso com meu calendário também.

Meu script de calendário está assim :

LET vDataFinal = num(today(1));

LET vDataInicial = num(MakeDate(2015,10,30)) -1;

//*** Calendário temp

Tabela_de_Datas:

LOAD

date($(vDataInicial) + IterNo()) as DTNEG,

    DATE(MONTHSTART(date($(vDataInicial) + IterNo())), 'MMM/YYYY') AS MêsAno,

    DATE(DAYSTART(date($(vDataInicial) + IterNo())), 'DD/MMM') AS DiaMês,

    DATE(date($(vDataInicial) + IterNo()), 'DD/MM/YYYY') AS Data,

    MONTH(date($(vDataInicial) + IterNo())) AS Mês,

    YEAR(date($(vDataInicial) + IterNo())) AS Ano,

    DAY(date($(vDataInicial) + IterNo())) AS Dia,

    ceil(Month(date($(vDataInicial) + IterNo()))/3)&'º Trim'&'/'& Year(date($(vDataInicial) + IterNo())) as Trimestre

   

AUTOGENERATE 1

WHILE $(vDataInicial) + IterNo() <= $(vDataFinal);

STORE Tabela_de_Datas into [lib://QVDSTAGE/DATAS.QVD];

DROP TABLE Tabela_de_Datas;

Labels (1)
1 Solution

Accepted Solutions
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Segue um modelo com script que funciona.

datas.gif

//=======================================================================================

//

// Criar calendario

//

LET vDateMin   = Num(MakeDate(year(Today())-1,1,1)); 

LET vDateMax   = Num(MakeDate(year(Today()),12,31));

TempCalendario: 

LOAD

   Date($(vDateMin) + RowNo() - 1)  AS TempDate

   AUTOGENERATE 1 

WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); 

Calendario: 

LOAD

  Date(TempDate,'DD/MM/YYYY')                 AS Data,

  year(TempDate)                              as Ano,

  month(TempDate)                             as Mes

Resident TempCalendario;

drop table TempCalendario;

//=======================================================================================

[Cal]:

  DECLARE FIELD DEFINITION Tagged ('$date')

FIELDS

  Dual(Year($1), YearStart($1))                                        AS [Ano] Tagged ('$axis', '$year'),

  Month($1)                                                            AS [Mes] Tagged ('$month', '$cyclic'),

  Dual(Year($1)&'-'&Month($1), monthstart($1))                         AS [Ano-Mes] Tagged ('$axis', '$yearmonth', '$qualified'),

  Dual(Month($1), monthstart($1))                                      AS [_Ano-Mes] Tagged ('$axis', '$yearmonth', '$simplified', '$hidden'),

  Date(Floor($1))                                                      AS [Data] Tagged ('$axis', '$date', '$qualified'),

  Date(Floor($1), 'D')                                                 AS [_Data] Tagged ('$axis', '$date', '$hidden', '$simplified');

DERIVE FIELDS FROM FIELDS [Data] USING [Cal] ;

furtado@farolbi.com.br

View solution in original post

6 Replies
afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Rigonato,

você tem que usar o   derive

http://help.qlik.com/en-US/sense/3.0/Subsystems/Hub/Content/Scripting/ScriptRegularStatements/Derive...

no teu caso deve ser assim:

DERIVE FIELDS FROM FIELDS Ano,Mês,Data USING Tabela_de_Datas;

furtado@farolbi.com.br
guilherme_rigon
Contributor III
Contributor III
Author

No meu script como ficaria?

Eu não entendi muito bem a lógica...

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Você tem que colocar esta linha no seu script para poder ter o efeito de zoom na data......

Talvez você tenha que fazer alguma alteração.....Mas copia a linha e da a carga para ver como fica.....

furtado@farolbi.com.br
guilherme_rigon
Contributor III
Contributor III
Author

Então, eu tentei e ele aparece o erro "unknown definition"

afurtado
Partner Ambassador/MVP
Partner Ambassador/MVP

Segue um modelo com script que funciona.

datas.gif

//=======================================================================================

//

// Criar calendario

//

LET vDateMin   = Num(MakeDate(year(Today())-1,1,1)); 

LET vDateMax   = Num(MakeDate(year(Today()),12,31));

TempCalendario: 

LOAD

   Date($(vDateMin) + RowNo() - 1)  AS TempDate

   AUTOGENERATE 1 

WHILE $(vDateMin)+IterNo()-1<= $(vDateMax); 

Calendario: 

LOAD

  Date(TempDate,'DD/MM/YYYY')                 AS Data,

  year(TempDate)                              as Ano,

  month(TempDate)                             as Mes

Resident TempCalendario;

drop table TempCalendario;

//=======================================================================================

[Cal]:

  DECLARE FIELD DEFINITION Tagged ('$date')

FIELDS

  Dual(Year($1), YearStart($1))                                        AS [Ano] Tagged ('$axis', '$year'),

  Month($1)                                                            AS [Mes] Tagged ('$month', '$cyclic'),

  Dual(Year($1)&'-'&Month($1), monthstart($1))                         AS [Ano-Mes] Tagged ('$axis', '$yearmonth', '$qualified'),

  Dual(Month($1), monthstart($1))                                      AS [_Ano-Mes] Tagged ('$axis', '$yearmonth', '$simplified', '$hidden'),

  Date(Floor($1))                                                      AS [Data] Tagged ('$axis', '$date', '$qualified'),

  Date(Floor($1), 'D')                                                 AS [_Data] Tagged ('$axis', '$date', '$hidden', '$simplified');

DERIVE FIELDS FROM FIELDS [Data] USING [Cal] ;

furtado@farolbi.com.br
guilherme_rigon
Contributor III
Contributor III
Author

Obrigado, Alessandro!

Fiz algumas adaptações mas funcionou perfeitamente!

Somente mais um dúvida, é possível adicionar os trimestres ainda?