12 Replies Latest reply: Dec 15, 2016 7:07 AM by daniel veloso RSS

    Set Analisys

    daniel veloso

      Boa tarde pessoal,

      Estou com a seguinte dúvida. Como eu trago o valor do mes (jan,fev,mar e etc) ao invés do numero do mês ? Creio que ficou claro.

       

      Sum({< Mes = {$(=Max(Mes))}>}TotalDue) / Sum({< Mes = {$(=Max(Mes) - 1)}>}TotalDue)

       

      att. Daniel Veloso

        • Re: Set Analisys
          Wellington Regis Silva

          Boa tarde Daniel,

           

          Deixe-me ver se entendi bem... Você deseja o valor total de um determinado mês para usar na expressão? Diga-nos que resultado deseja, o que você deseja contabilizar?.

          Se possível poste um qvw com parte dos dados para que possamos lhe ajudar melhor.

           

          Felicidades...

          • Re: Set Analisys
            Tiago Fernando Cardoso

            =Month('10/10/1995')

             

            Retorna 'out' -> Nome do mês

             

            Mas não faz sentido trabalhar com dados não-numéricos numa expressão SET.

             

            Abs

              • Re: Set Analisys
                Wellington Regis Silva

                Ah tá! Agora entendi!

                 

                A função Month faz isso mesmo. Faz o seguinte:

                Formata o resultado com a função Num, assim ó: Num(Month('10/10/1995'), '0') Assim você obterá o número do mês ao invés do nome abreviado.

                 

                Felicidades...

                  • Re: Set Analisys
                    daniel veloso

                    Foi aplicado o metodo month numa variavel data, e  ela me retorna o mes em string.

                    A expressao abaixo objetiva mostrar a evoluçao do mes atual referente ao mes anterior:

                     

                    Sum({< Mes = {$(=Max(Mes))}>}TotalDue) / Sum({< Mes = {$(=Max(Mes) - 1)}>}TotalDue)


                    Mas para comparação "< Mes = {$(=Max(Mes))}>".  é preciso transformar o Mes em numero(Pois ele está em string). E o Max(mes) me retorna um inteiro.

                    Ficou mais claro ?

                    Segue em anexo o qvd na publicação principal.

                      • Re: Set Analisys
                        Wellington Regis Silva

                            Oi Daniel,

                            Se o seu objetivo é exibir uma evolução em relação ao mês anterior você deve trabalhar com as datas inteiras, caso contrário você não obterá uma resposta correta quando iniciar um novo ano. Para isso use a Seguinte expressão:


                        (Sum(If(InMonth('$(=Max(Total OrderDate))',OrderDate,0),TotalDue))   //Soma dos valores do maior mês da seleção atual
                        /
                        Sum(If(InMonth(AddMonths('$(=Max(Total OrderDate))', -1),OrderDate,0),TotalDue))     //Soma dos valores do segundo maior mês da seleção atual
                        )-1  //Subtração de 1 para que o percentual de aumento ou queda seja correto

                         

                            Veja como fica uma tabela demonstrando os resultados:

                        Capturar.PNG

                            Também anexei seu qvw com essa alteração para que você possa analisar melhor.

                         

                            Torço para essa expressão possa atender suas necessidades.

                         

                        Felicidades...

                  • Re: Set Analisys
                    Clever Anjos

                    Se campo mês é uma string ou um dual?

                    • Re: Set Analisys
                      Clever Anjos

                      No seu caso, crie um campo numérico no seu script que vai dar tudo certo

                          Year(OrderDate) as Ano,

                          Month(OrderDate) as Mês,

                          Num(Month(OrderDate)) as MesNum,

                       

                      E depois

                      Sum({< MesNum = {$(=Max(Mes))}>}TotalDue) / Sum({< MesNum= {$(=Max(Mes) - 1)}>}TotalDue)

                      • Re: Set Analisys
                        Tiago Fernando Cardoso

                        Date('10/10/1995', 'MM') vai retornar 10, ou seja, o número do mês.

                         

                        Assumindo ' data ' como seu campo de data no geral, caso você tenha algum neste formato: '14/12/2016'.

                        Creio que tenha, pois extraiu o mês...Você pode tentar utilizar as seguintes expressões dentro do seu SET:


                        Mês máximo                    =Max(Date(data, 'MM'))


                        Mês máximo menos 1      =Date(AddMonths(Max(Date(data), 'MM'), -1), 'MM')


                        Testei apenas com valores, sem expressão SET. Tomara que funcione.


                        Talvez funcione sem mexer na carga. Caso seja rotineiro esse tipo de cálculo, é bom mexer na caraga e deixar no 'jeito' para futuras utilizações



                        Abs.

                        • Re: Set Analisys
                          Tiago Fernando Cardoso

                          Daniel, você realmente precisa de um campo numérico de mês para efetuar os cálculos, eles estão em string. Baixei seu qvw e tentei alterar ele, mas necessita realmente de um Num(Month(Date)) como já descrito acima...

                          • Re: Set Analisys
                            daniel veloso

                            [Resolvido]

                             

                            Obrigado pela disposição do seu tempo para respostas.

                            att. Daniel Veloso