Qlik Community

Qlik Brasil

Group community for Brazil users. discussion only in Portuguese.

Highlighted
leandro_piereza
New Contributor II

Filtro por dados da expressão considerando dimensão.

Tenho a minha relação de clientes, cada um possui um valor de limite de compra, estou gerando uma tabela com as dimensões cliente e mês, e as expressões "valor comprado", e "% representatividade do valor sobre o limite", está calculando corretamente cada um dos meses da dimensão, agora estou querendo aplicar filtros pela representatividade, por exemplo, listar somente os clientes em que o valor comprador está representando menos de 50% do limite, estou aplicando esta condicional na expressão, para gerar os dados somente se o cálculo for menor que os 50%, porém, ele lista para mim somente os meses que atendem a condição e eu gostaria que fossem listados todos os meses dos clientes em que pelo menos um dos meses ficou abaixo dos 50% (atendeu a condição), para que consiga avaliar todos os meses deste cliente que em algum momento ficou abaixo de 50%. Por exemplo:

Cliente Jan Fev Mar

A         45% 55% 58%

B         80% 85% 75%

C         51% 40% 35%

Ao aplicar o filtro dos menos de 50% de representatividade, retorna a seguinte informação:

Cliente |Jan |Fev |Mar

A          |45%|       |

C          |       |40%| 35%

E eu gostaria que o cliente se enquadrasse na condição em pelo menos um dos meses, tivesse os dados de todos os meses selecionados, ficando desta forma:

Cliente Jan Fev Mar

A       45% 55% 58%

C       51% 40% 35%

Isso para que eu consiga avaliar se aquele mês em específico foi anormal, ou se todos os meses ele fica próximo dos 50%.

Tags (1)
2 Replies
thiago_justen
Valued Contributor III

Re: Filtro por dados da expressão considerando dimensão.

Leandro,

Se for possível uma solução back-end isso resolveria:

TABELA:

LOAD

*,

    If(RangeMin(Jan,Fev,Mar)<50,'Menor','Maior') AS Flag_Menor_50;

LOAD * INLINE [

Cliente,Jan,Fev,Mar

A,45,55,58

B,80,85,75

C,51,40,35

];

Resultado:

Capturar.PNG

Se essa solução não for possível ou ainda, não for a que deseja, mande um app de exemplo para melhor te ajudar.

Abs e Sucesso!

Thiago Justen Teixeira Gonçalves
WhatsApp: 24 98152-1675
Skype: justen.thiago
leandro_piereza
New Contributor II

Re: Filtro por dados da expressão considerando dimensão.

Bom dia Thiago,

Não consegui aplicar no meu script este load, Abaixo segue um modelo do script que estou utilizando, e as expressões que estou utilizando na tabela.

Script:

Clientes:

LOAD * Inline[

Cliente, Cliente_Nome, Limite_Convenio, Limite_Crediario, Limite_Cheque

1001, Cliente 001, 1500, 800,

1005, Cliente 002, 1800, 700,

1006, Cliente 003, 1100, 800, 500

1107, Cliente 004, 1000, 800, 1000

1108, Cliente 005, ,   , 600, 700

1109, Cliente 006, ,   , 500, 700

1110, Cliente 007, ,   ,    , 1000];

Tipo_Documentos:

LOAD * Inline[

Tipo, Desc_Documento, Tipo_Limite

CV, Convênio, Convenio

CR, Crediário, Crediario

CH, Cheque, Cheque

CP, Cheque, Pré Cheque];

Documentos:

LOAD * Inline[

Numero, Serie, Tipo, Valor_Prestacao, Cliente, Data

10014, 1, CV, 300, 1001, 15/01/17

10015, 1, CV, 375, 1001, 15/01/17

10016, 1, CV, 1100, 1005, 16/01/17

10017, 1, CV, 660, 1006, 17/01/17

10018, 1, CV, 700, 1107, 18/01/17

10019, 1, CV, 800, 1001, 10/02/17

10020, 1, CV, 1100, 1005, 10/02/17

10021, 1, CV, 660, 1006, 10/02/17

10022, 1, CV, 450, 1107, 10/02/17

10023, 1, CV, 600, 1001, 30/03/17

10024, 1, CV, 1200, 1005, 31/03/17

10025, 1, CV, 520, 1006, 30/03/17

10026, 1, CV, 480, 1107, 31/03/17];

LET v_Data_Inicial = MakeDate(year(Today())-13);

LET v_Data_Final = MakeDate(year(Today()),12,31);

//-------------------- CALENDÁRIO - DATA DE CONTABILIZAÇÃO --------------------

Calendario_Contabilizacao:

LOAD Date(data)                       as Data

    ,Day(data)                        as dia

    ,Capitalize(Month(data))          as mes_abrev

    ,Num(Month(data))                 as mes

    ,Year(data)                       as ano

    ,DayNumberOfQuarter(data)         as dia_trimestre

    ,DayNumberOfYear(data)            as dia_ano

    ,Date(DayStart(data),'DD.MMM')    as dia_mes

    ,MonthName(data)                  as mes_ano

    ,WeekName(data)                   as ano_semana

    ,QuarterName(data)                as quarter

    ,Week(data)                       as semana

    ,Capitalize(WeekDay(data))        as dia_semana

    ,Num(WeekDay(data))               as dia_semana_num

    ,ceil(Month(data)/3)&'º Trim'     as trimestre

    ,If(WeekDay(data) = 'sáb', 0,

     If(WeekDay(data) = 'dom', 0, 1)) as dia_util;

LOAD

Date(MakeDate(year(Today()),12,31)- Recno()+1,'DD/MM/YYYY') as data

AUTOGENERATE(v_Data_Final-v_Data_Inicial+1);

Tabela:

Dimensões:

Cliente

Limite Convênio

Mês

Imagem 1: Listando todos os dados

001.PNG

Expressões:

Utilizado:

Sum(If(Tipo_Limite = 'Convenio', Valor_Prestacao))

% Limite:

(Sum(If(Tipo_Limite = 'Convenio', Valor_Prestacao))

/Sum(Limite_Convenio))

Imagem 2: Listando os dados com filtro por % de representatividade no total do limite

002.PNG

Expressões:

Utilizado:

If((Sum(If(Tipo_Limite = 'Convenio', Valor_Prestacao))

   /Sum(Limite_Convenio)) <= 0.5 ,

Sum(If(Tipo_Limite = 'Convenio', Valor_Prestacao)))

% Limite:

If((Sum(If(Tipo_Limite = 'Convenio', Valor_Prestacao))

   /Sum(Limite_Convenio)) <= 0.5 ,

Sum(If(Tipo_Limite = 'Convenio', Valor_Prestacao))

/Sum(Limite_Convenio))

Desta forma estou passando o parâmetro para ele calcular somente se o valor for maior que 50%, porém precisaria que fossem listados todos os dados dos clientes que em algum mês tivesse valor menor que 50%, nesta segunda tabela, está correto carregar somente estes três clientes, porém, queria que fossem listados todos os valores para estes clientes.

Abraços.