2 Replies Latest reply: Feb 14, 2018 6:44 AM by Leandro Pierezan RSS

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

    Leandro Pierezan

      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%.

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

          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!

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

              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.