3 Replies Latest reply: Mar 8, 2012 10:36 AM by Cesar Accardi RSS

    Ajuda cálculo

      Pessoal, boa tarde!
      Preciso de ajuda

       

      Olha só, eu tenho uma consulta de acidentes para a empresa e neste quadro em anexo tenho dois campos que preciso tratar.
      Acidente que deve me retornar a quantidade de acidentes que tive no mes e ano selecionado ( faço um count do funcionario), pois tenho uma tabela só de acidentes.

       

      Agora o campo Abertos, eu queria trazer da seguinte maneira, são todos os acidentes que aconteceram antes do ano e mes selecionado ou acidentes que o funcionário retornou (data de retorno)  deve ser igual ou maior que o  mês que tenho selecionado.

       

      Exemplo:

       

      Seleciono janeiro de 2012. No campo Acidentes eu listo a quantidade de acidentes ocorridos no mes e ano selecionado (01/12).
      agora no campo abertos eu preciso mostrar os acidentes que estão em aberto ainda, onde a data seja menor que a selecionada (01/12) ou que a data de retorno do funcionário seja >= ano mes selecionado. Isso são considerados acidentes em aberto.
      Porém não estou conseguindo fazer isto no meu script.

       

      Um print do script da tabela de acidentes:

       

      ACIDENTE:

      LOAD NUM(MONTH(DT_ACIDENTE)) &'-'&

                YEAR(DT_ACIDENTE)            AS ACID_CHAVE_ANOMES_ACIDENTE,

                CAD                                     AS ACID_CAD_FUNCIONARIO,

                NOME                                  AS ACID_NOME_FUNCIONARIO,

                SETOR                                AS ACID_SETOR,  

                TURNO                                AS ACID_TURNO,

                TIPO                                   AS ACID_TIPO_ACIDENTE,

                LOCAL_LESAO                   AS ACID_LOCAL_LESAO,

               DATE(DT_ACIDENTE)            AS ACID_DT_ACIDENTE,

               DAY(DT_ACIDENTE)             AS ACID_DT_DIA_ACIDENTE,

               MONTH(DT_ACIDENTE)            AS ACID_DT_MES_ACIDENTE,

               YEAR(DT_ACIDENTE)             AS ACID_DT_ANO_ACIDENTE,

               NUM(MONTH(DT_ACIDENTE))      AS ACID_NR_MES_ACIDENTE,

               MONTH(DT_ACIDENTE) & '/' &

               YEAR(DT_ACIDENTE)              AS ACID_DT_MESANO_ACIDENTE,

               DIAS_AFAST_MES                  AS ACID_DIAS_AFASTAMENTO_MES,

               DIAS_AFAST                           AS ACID_DIAS_AFAST,

               round(AFASTADO_MES,1)        AS ACID_DIAS_AFASTAMENTO,

               DIAS_UTEIS                            AS ACID_DIAS_UTEIS_MES,    

               DATE(AFASTAMENTO)            AS ACID_DT_AFASTAMENTO,

               DATE(RETORNO)                AS ACID_DT_RETORNO, 

              SIT                                      AS ACID_SITUACAO,

              DATA_CAT                          AS ACID_DT_CAT,

              DESCAU                            AS ACID_DESC_CAUSA_ACIDENTE,

              DESCRIÇÃO                      AS ACID_DESCRICAO_ACIDENTE

      FROM C:\Qlikview\Producao\QVD\ACIDENTE.qvd (qvd);

       

      Alguém tem alguma dica de como posso tratar isso ?

        • Ajuda cálculo

          No SQL eu fiz da seguinte maneira, criei uma function para retornar as quantidades, porém preciso listar agora quem são esses funcionarios, dias, informacoes de turno e tipo de acidente:

           

          select
          a.NOME qtde
          from
          INDICADOR_ACIDENTES_RH a
          where
          to_char(a.dt_acidente,'YYYYMM') < to_char(add_months(w_data_acidente,0),'YYYYMM') and
          a.RETORNO_MESANO >= w_mesano_acidente and
          a.DIAS_AFAST > 0
          union all
          select
          a.NOME qtde
          from
          INDICADOR_ACIDENTES_RH a
          where
          to_char(a.dt_acidente,'YYYYMM') < to_char(add_months(w_data_acidente,0),'YYYYMM') and
          a.dias_afast > 0 and
          a.SIT = 'Em Aberto'
          )

           

          Precisaria de uma expressão mais ou menos assim para tratar esta condição no Qlikview:

           

          Se ANO e mes ACIDENTE < que o Ano selecionado no filtro

          e a data_retorno >= ano e mes selecionado no filtro

          e os dias de afastamento sejam > zero

          unindo

          com

          ANO e mes ACIDENTE < que o Ano selecionado no filtro

          e os dias de afastamento sejam > zero

          e a situação do acidente = aberta.

           

           

          Poderia até criar uma tabela de acidentes anteriores, porém não consigo pensar como amarrar isto.

            • Ajuda cálculo

              Modificadores de Conjunto

              Um conjunto pode ser modificado por uma seleção adicional ou alterada.
              Essa modificação pode ser escrita na expressão do conjunto.
              O modificador consiste em um ou em vários nomes de campo, cada um seguido de uma seleção que deve ser feita no campo, tudo entre < e >,como em <Ano={2007, 2008}, Região={EUA}>
              Os nomes e os valores de campo podem estar entre aspas, por exemplo, <[Região das Vendas]={’Costa oeste’, ‘América do Sul’}>.
              Existem várias formas de definir a seleção:
              Um caso simples é uma seleção baseada nos valores selecionados de outro campo, por exemplo, <DataPedido = DataEntrega>. Esse modificador usará os valores selecionados de “DataEntrega” e os aplicará como uma seleção em “DataPedido”.
              Existem várias formas de definir a seleção:
              Um caso simples é uma seleção baseada nos valores selecionados de outro campo, por exemplo, <DataPedido = DataEntrega>. Esse modificador usará os valores selecionados de “DataEntrega” e os aplicará como uma seleção em “DataPedido”.
              Além disso, a seleção dentro de um campo pode ser definida usando operadores de conjunto e vários conjuntos de elementos, como com o modificador
              <Ano = {"20*", 1997} - {2000}>
              que selecionará todos os anos iniciados por “20”, além de “1997”, exceto “2000”.
              A notação acima define novas seleções, independentemente da seleção atual no campo. Contudo, se desejar basear a sua seleção na seleção atual no campo e incluir valores de campo, você pode, por exemplo, usar um
              Nota: se houver muitos valores diferentes – mais de duzentos – evite essa operação, pois ela exigirá muitos recursos da CPU.
              Nota: as pesquisas não diferenciam letras maiúsculas de minúsculas e também são feitas para valores excluídos.
              Dica: conjuntos de elementos vazios, explicitamente, como <Produto = {}>, ou
              implicitamente, como <Produto = {"Visão Imaginária"}> (uma pesquisa sem
              resultados), indicam que nenhum produto foi encontrado, ou seja, eles resultarão em
              um conjunto de registros que não está associado a nenhum produto.
              Modificador <Ano = Ano + {2007, 2008}>. Uma forma mais curta e equivalente de escrever isso é <Ano += {2007, 2008}>, ou seja, o operador de atribuição define implicitamente uma união.
              Além disso, interseções, exclusões e diferenças simétricas implícitas podem ser definidas com “*=”, “–=” e “/=”.
              Por fim, para os campos no modo AND, também há a possibilidade de uma exclusão forçada. Se desejar forçar a exclusão de valores de campo específicos, será necessário usar “~” antes do nome do campo.

            • Ajuda cálculo
              Cesar Accardi

              Olá Juliana, você pode criar este cálculo dos abertos no próprio objeto gráfico sem a necessidade de realizar no script, de modo que o cálculo fica dinâmico conforme as seleções. Para isto você necessita do recurso set analysis, dê uma olhada no manual de referência, tópico Análise de Conjunto (Set Analysis). Tem bem explicada a sintaxe inclusive com exemplos.

               

              Abraços