Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
Not applicable

Link Table

Boa tarde Pessoal.

Estou com dificuldade na seguinte situação..

Possuo dois Fatos: Fato Orçado e Fato Realizado.

O fato realizado possui mais dimensões que o fato orçado, e ao utilizar o LEFT JOIN e o CONCATENATE os valores se perdiam.. Porem ao utilizar o LINK TABLE, ficou muito bom além de rápido e leve, porem estou tendo problema com as datas.

No Fato Orçado, ficou perfeito, porém no realizado, ele trás antes do primeiro mês a maior parte dos valores como período 0.

Se alguém puder me ajudar, fico agradecido.

Segue o arquivo em anexo.

1 Solution

Accepted Solutions
fernando_tonial
Valued Contributor

Re: Link Table

Olá Rodrigo, você pode fazer a seguinte alteração em seu script.

Aonde vc tem:

Date(MakeDate(Right(DT_CONTABIL,4),Left(DT_CONTABIL,2),1),'DD/MM/YYYY') as DATA

Troque por:

DT_CONTABIL 
as DATA

Isso deve resolver.

Caso ainda o problema continue, faça assim, depois da criação da link table:

TMP_Calendario:

LOAD

    Max(DATA) AS MaxData,

    Min(DATA) AS MinData

Resident LINKTABLE;

LET vMaxData = Peek('MaxData');

LET vMinData = Peek('MinData');

DROP Table TMP_Calendario;

//_______________________________________________________________________________

Calendario:

LOAD

        DATA                                         as DATA,

        Day(DATA)                                    as DIA,

        Month(DATA)                                  as MES,

        Year(DATA)                                   as ANO,

        ceil(Month([DATA])/6)&'º'                    as SEMESTRE,

        ceil(Month([DATA])/3)&'º'                    as TRIMESTRE,

        ceil(Month([DATA])/2)&'º'                    as BIMESTRE,

        DayNumberOfQuarter(DATA)                     as DIA_TRIMESTRE,

        DayNumberOfYear(DATA)                        as DIA_ANO,

        MonthName(DATA)                              as PERIODO,

        QuarterName(DATA)                            as QUARTER,

        Week(DATA)                                   as SEMANA,

        WeekDay(DATA)                                as DIA_SEMANA,

        If(DATA<='$(vHoje)',1,0)                     as FlgRealizado,

        If(DATA>'$(vHoje)',1,0)                      as FlgOrçado;

Load

    Date('$(vMinData)' + Recno() - 1) as DATA

AutoGenerate (YearEnd(vMaxData) - vMinData + 1);

Abraços.

Tonial.

3 Replies
fosuzuki
Valued Contributor II

Re: Link Table

Rodrigo,

quando vc gera a chave da fato realizado vc usa a data real, mas no calendário vc só cria as datas do primeiro dia do mes. Então o realizado que acontece no dia 5/jan por exemplo fica sem amarração com o calendario, porque no calendário só existe o dia 1/jan.

duas alternativas:

1. vc precisa gerar a chave do realizado sempre usando como data o primeiro dia do mes. vc pode usar a função monthstart()

2. incluir no calendario as outras datas que não são o primeiro dia do mes.

fernando_tonial
Valued Contributor

Re: Link Table

Olá Rodrigo, você pode fazer a seguinte alteração em seu script.

Aonde vc tem:

Date(MakeDate(Right(DT_CONTABIL,4),Left(DT_CONTABIL,2),1),'DD/MM/YYYY') as DATA

Troque por:

DT_CONTABIL 
as DATA

Isso deve resolver.

Caso ainda o problema continue, faça assim, depois da criação da link table:

TMP_Calendario:

LOAD

    Max(DATA) AS MaxData,

    Min(DATA) AS MinData

Resident LINKTABLE;

LET vMaxData = Peek('MaxData');

LET vMinData = Peek('MinData');

DROP Table TMP_Calendario;

//_______________________________________________________________________________

Calendario:

LOAD

        DATA                                         as DATA,

        Day(DATA)                                    as DIA,

        Month(DATA)                                  as MES,

        Year(DATA)                                   as ANO,

        ceil(Month([DATA])/6)&'º'                    as SEMESTRE,

        ceil(Month([DATA])/3)&'º'                    as TRIMESTRE,

        ceil(Month([DATA])/2)&'º'                    as BIMESTRE,

        DayNumberOfQuarter(DATA)                     as DIA_TRIMESTRE,

        DayNumberOfYear(DATA)                        as DIA_ANO,

        MonthName(DATA)                              as PERIODO,

        QuarterName(DATA)                            as QUARTER,

        Week(DATA)                                   as SEMANA,

        WeekDay(DATA)                                as DIA_SEMANA,

        If(DATA<='$(vHoje)',1,0)                     as FlgRealizado,

        If(DATA>'$(vHoje)',1,0)                      as FlgOrçado;

Load

    Date('$(vMinData)' + Recno() - 1) as DATA

AutoGenerate (YearEnd(vMaxData) - vMinData + 1);

Abraços.

Tonial.

Not applicable

Re: Link Table

Muito Obrigado, ficou perfeito.. agora vou replicar para minhas outras aplicações, melhorou consideravelmente a carga e o desempenho utilizando o Link Table..

Valeu