Manuais
PHC GO Como configurar uma análise anual
 
As análises de tipo Anual permitem observar o comportamento anual de uma entidade, como por exemplo, a rentabilidade anual da empresa.
Informação

Contrariamente às análises de tipo Normal, que permitem total liberdade de configuração através de expressões SQL ou em VB.NET, as análises de tipo Anual irão basear-se nos valores introduzidos em determinados campos da configuração, para construir internamente a instrução SQL que será usada na execução da análise.



Para o auxiliar na construção de análises deste tipo, este tópico é constituído por passos numerados que seguem uma sequência lógica de construção da análise. No entanto, o nº de passos a efetuar pode variar em função das características que pretenda na construção da análise, pelo que poderão existir alguns passos que não serão necessários efetuar (por serem opcionais), podendo prosseguir para outros posteriores.

Para configurar uma Análise de tipo Anual deve dirigir-se ao ( Menu > Definições > Reporting > Configuração de Análises) e efetuar os seguintes passos:

1. Clique em Introduza configuração de análise e comece por preencher uma Descrição da análise (título).

2. Associe ou crie um Grupo para a análise. O grupo selecionado representa o separador onde vai ficar disponibilizada a análise.

3. No campo Tipo de análise selecione a opção Anual
Informação

  • O campo Interna quando ativo significa que se trata de uma análise que vem fornecida de base pela PHC, não podendo ser alterada ou apagada. No entanto, pode ser duplicada para que possa aproveitar as configurações da mesma e aplicá-las numa nova análise.

  • O campo Inativa quando ativo determina que a análise não será visível na lista de análises globais contidas no menu "Análises e Listagens" ou nas análises ligadas a ecrãs.

  • O campo Mostra esta análise no menu quando ativo determina que a análise estará acessível diretamente no nó de Análises e Listagens do menu de opções da aplicação. Este campo só permite edição em configurações de análises globais.



  • DADOS GERAIS


    O tabulador de Dados gerais é composto por vários separadores, os quais iremos detalhar individualmente.

    Para obter mais informações sobre os campos de um separador, carregue em Mostrar/Ocultar referente ao separador específico (ou em alternativa, pode carregar em Abrir todos).
     

    Detalhes


    4. Preencha uma Descrição completa para a análise. Por exemplo, pode preencher um resumo sucinto do que é possível de extrair na análise e dar informação adicional sobre a análise. Na prática, esta descrição virá refletida quando executar a análise e passar com o cursor do rato sobre o icone localizado à direita do nome da análise.
    Informação

    O campo Número é apenas de consulta e identifica o número interno da análise. As análises internas (construídas pela PHC) apresentam uma numeração simples, com início no n.º 1. As análises construídas por parceiros PHC GO apresentam uma numeração um pouco diferente, para sua distinção: têm como prefixo o número interno da instalação de kitparceiro seguido de numeração sequencial, começando no n.º 1. Por exemplo XXXX1 (onde "XXXX" é o n.º interno da instalação de kitparceiro).


    5. Caso pretenda que a análise esteja agregada a qualquer registo contido num ecrã (por exemplo: Clientes), deve ativar o campo É uma análise de registo e mais à direita selecionar o Ecrã respetivo (a análise ficará disponível ao consultar um registo no ecrã que indicou, dentro do tabulador de "Análises").
    Se o campo É uma análises de registo estiver desmarcado, a análise uma vez finalizada na sua configuração será considerada uma análise global e ficará localizada no Menu > Análises e Listagens onde se exibem as análises deste tipo.

    Se estivermos perante uma análise de registo (a respetiva check_boxcheckbox estiver ativa), o utilizador pode configurar condições de visibilidade nas suas análises. Para isso, existe o campo Código de disponibilidade da análise.

    O objetivo deste campo é permitir que o utilizador indique uma condição para a análise de registo ficar disponível ou não (este campo apenas fica disponível se a análise estiver marcada check_boxcomo É uma análise de registo.

    Deve ser criada uma função que executa o código indicado pelo utilizador. Se o retorno for "false", a análise não pode ser apresentada no respetivo registo.
    A função deve receber o currentRecord (genericVO) ou o currentSerie (genericVO) caso seja uma análise de um registo que utiliza série.

    Exemplo:
    1
    return currentRecord.no=2

    Com este código de disponibidade, a respetiva análise ou snapshot, apenas fica disponível quando estivermos posicionados sobre um registo do cliente nº2.
    Caso se trate de um snapshot, deve marcar a checkbox check_box É um snapshot exclusivo de registo que se apresenta no separador horizontal Snapshots para que o código executado funcione.

    6. Se tencionar que a análise esteja disponível a partir de um ecrã específico, deverá ativar o campo É uma análise de ecrã e indicar no campo Ecrã onde a mesma será disponibilizada. Optando por esta configuração, a análise ficará disponível no ecrã que indicou, dentro do tabulador de "Análises e Listagens").
    Nota

    Não é permitida a análise estar configurada para ser de registo e de ecrã em simultâneo.

    7. Preencha o Plano Mínimo que irá disponibilizar a análise. Ao preencher um determinado plano na análise está a definir que ela estará disponível apenas a partir desse plano e em planos superiores.

    8. Pode alterar o tamanho da fonte para impressão em PDF (o valor mínimo admitido para o campo é 6).


    Dados Iniciais


    Esta seção do ecrã deve ser usada exclusivamente em situações que pretenda que a análise peça ao utilizador dados iniciais para filtrar a saída de dados antes de ser executada. Se não for esse o caso, prossiga a configuração da análise na seção Anual.

    9. Para incluir dados iniciais clique no botão Adicione variáveis e configure tantos dados iniciais consoante as suas necessidades. A grelha é composta pelos seguintes campos (colunas):

      Número: Trata-se do nº interno atribuído ao dado inicial e que representa a ordem pela qual vem exibido ao aceder à análise.
      O valor deste campo é incrementado automaticamente em uma unidade com base no valor do último registo de dado inicial criado na grelha, muito embora, possa posteriormente alterar a ordem dos dados iniciais conforme pretenda.

      Nome: Campo para preencher o nome que terá o dado inicial.

      Tipo: Campo para determinar o tipo de dado inicial.
      Tem disponível para seleção um dos seguintes tipos: Caracter, Mês, Numérico, Lógico, Data, Ano e Tabela.

      Opções: Se tipo "Tabela": lista de opções, separada por vírgulas. Se tipo "Ano": ano inicial com 4 dígitos: Este campo pode albergar dados de diversas formas, em função do tipo de dado selecionado no campo anterior.
      Dicas

      a) Para dados de tipo Tabela pode preencher neste campo entre outras coisas:

      » Um dado inicial que permita selecionar um item a partir de uma lista de itens fixos (separados por vírgula). Por exemplo, um campo dropdown para selecionar o estado para visualizar encomendas: Todas,Abertas,Fechadas

      » Um dado inicial que permita selecionar um item a partir de uma lista que pode variar em função de uma query SQL (implica ativar a coluna Lista é uma query)

      Exemplo 1 - query que retorna o nome de cada um dos clientes presentes na tabela de Clientes (CL) sendo que o 1º item representa "Todos os Clientes"
      select uval from (select 'Todos os Clientes' as uval from cl (nolock) 
      union select distinct nome as uval from cl (nolock)) a
      ORDER BY CASE uval WHEN 'Todos os Clientes' THEN 1 ELSE 2 END, uval

      Exemplo 2 - query que retorna o nome das séries de documentos de faturação (tabela TD), que sejam do tipo ´FT´, ´FR´, ´FS´ ou ´NC´, e que o 1º item representa "Todos os Tipos de Documentos"
      select uval from (select 'Todos os Tipos de Documentos' as uval from td (nolock) union 
      select distinct nmdoc as uval from td (nolock) where
      td.tiposaft='FT' or
      td.tiposaft='NC' or
      td.tiposaft='FR' or
      td.tiposaft='FS') a
      ORDER BY CASE uval WHEN 'Todos os Tipos de Documentos' THEN 1 ELSE 2 END, uval


      b) Para dados de tipo Ano poderá criar um dado de 4 dígitos que servirá de base para o cálculo da análise. Exemplo: 2021

      c) Para dados de tipo Mês poderá criar um dado que sirva para o cálculo da análise. Exemplo: 12.

      Lista é uma query: A lista deve ser uma expressão de SQL que retorna uma lista com um campo designado por "uval" (ver exemplos anteriores).

      Obrigatório: Indica que este dado inicial é de preenchimento obrigatório.

      Nº de carateres: Número máximo de carateres que este dado inicial pode receber. Se deixar o campo a zero não terá limite de nº de caracteres. O preenchimento desta coluna da grelha apenas se aplica a dados iniciais do tipo numérico e caracter.

      Decimais: Número de decimais caso o campo seja "numérico".

      v.d texto: Valor por defeito para este dado inicial caso seja do tipo "caracter".

      v.d. número: Valor por defeito para este dado inicial caso seja do tipo "numérico".

      v.d. lógico: Valor por defeito para este dado inicial caso seja do tipo "lógico".

      v.d. data: Valor por defeito para este dado inicial caso seja do tipo "data". Neste caso, este campo representa o nº de dias de diferença para a data atual. Por exemplo, -365 neste campo, colocará no dado inicial a data de há 365 dias atrás.

      Rejeita cache: Caso ative este campo, o valor preenchido pelo utilizador da análise para a variável do dado inicial não será guardada na base de dados com o último valor introduzido (ou seja, sempre que a análise for inicializada, o valor da variável de dado inicial será automaticamente preenchido pela aplicação, tendo por base o valor preenchido nos campos v.d. texto, v.d. número, v.d. lógico ou v.d. data (conforme o tipo de dado definido, se texto, numérico, lógico, data,..).
      tips_and_updatesDicas

      Por exemplo, para os campos de tipo Ano, a framework vai olhar primeiramente se guarda cache (rejeita cache desativado) e em caso afirmativo recorre ao último valor guardado em tabela.
      Caso não guarde cache (rejeita cache ativado), então a framework irá olhar para o valor definido no campo v.d.data, e caso não esteja preenchido, olha para o valor do campo v.d.texto. Se os campos anteriores não contemplarem qualquer valor, então o campo virá vazio de conteúdo.

        Exemplos:

        (I) se rejeita a cache e tem vd.data = -2 <-- toma sempre como base o ano corrente (ex: 2023) e diminui 2 anos
        Então, na prática o campo "Ano" = 2021
        ----------------------------------------------------------
        (II) se rejeita a cache e tem vd.data = vazio e v.d.texto= 2017
        Então, na prática o campo "Ano" = 2017
        ----------------------------------------------------------
        (III) se rejeita a cache e tem vd.data = vazio e v.d.texto= vazio
        Então, na prática o campo "Ano" = vazio
        ----------------------------------------------------------
        (IV) se rejeita a cache e tem vd.data = 2
        Então, na prática o campo "Ano" = vazio (porque estamos no ano corrente + 2 anos) seria um ano superior ao ano corrente, logo nesses casos o valor vem vazio.

        Premissa: Os dados iniciais de tipo Ano só suportam anos até ao ano corrente.

      Tooltip: Informação a explicar o âmbito do dado inicial.

    10. O campo Texto para o botão de execução é aplicável para o caso de querer personalizar o nome do botão de execução da análise, com o nome que pretender. Também pode criar a respetiva tooltip, para isso, preencha o campo Texto para a tooltip do botão de execução com a descrição para o botão.

    11. Se ativar o campo Pede sempre dados iniciais antes de executar determina que a análise ao ser acedida não será executada automaticamente pela aplicação. Assim, quando aceder à análise pela segunda vez, a execução não irá ser realizada automaticamente com os filtros, que foram colocados da primeira vez que se correu a análise.



    12. Na seção Anual deve definir a forma como a análise será construída, sendo que, a configuração deste tipo de análises implica necessariamente ter por base uma tabela principal, como por exemplo a tabela de Documentos de Faturação (ft) ou de outra tabela principal proveniente de add-ons.

    Admitindo que se pretende extrair dados de vendas em valor e % distribuídos pelos vários meses do ano, com comparação do ano atual e anterior até ao mês corrente, então no campo Tabela deve ser preenchido com o nome interno da tabela dos documentos, no caso seria ft.

    13. No campo Ano é necessário indicar em que campo da tabela se vai buscar o ano da observação para a análise, por exemplo: year(ft.fdata)

    14. No campo Mês indicar em que campo da tabela se vai buscar o mês da observação, por exemplo: month(ft.fdata).

    15. No campo Valor indicar a expressão para calcular os valores, por exemplo: ft.ettiliq - ft.efinv.
    Se pretendesse analisar nº de ocorrências, bastaria preencher o campo com o valor 1.

    16. O campo Filtro pode ser usado para estabelecer um filtro extra sobre os dados que deseja que a análise retorne, para além daqueles que possa vir a definir no separador dos Dados iniciais.
    Pode utilizadar expressões, como exemplo determinar que não pretende que sejam considerados dados na tabela ft de documentos anulados e em modo rascunho (com numeração negativa): ft.anulada=´0´ and ft.fno>0.
    Pode igualmente utilizar valores definidos nos dados iniciais. Por exemplo para invocar neste campo o 1º dado inicial seria #1#.

    17. No campo Dado inicial de ano atual se deixado vazio, será o ano atual de calendário usado para os cálculos da análise. Caso seja preenchido, será este o valor que será assumido como ano atual. O valor que deve preencher neste campo, varia em função do número definido na grelha dos Dados Iniciais na coluna Número (ver ponto 9), ou seja, o número deve ser coincidente com o valor do Dado Inicial definido para o ano atual.

    18. No campo Dado inicial de ano anterior se deixado vazio, será considerado para os cálculos da análise o ano anterior ao ano corrente. Caso seja preenchido, será este o valor que será assumido como ano anterior. O valor a preencher neste campo, varia em função do número definido na grelha dos Dados Iniciais na coluna Número (ver ponto 9), ou seja, o número deve ser coincidente com o valor do Dado Inicial definido para o ano anterior.

    19. Para o preenchimento do campo Filtro feito anteriormente no ponto 16), poderá usar campos de tabelas relacionadas com a tabela principal definida no ponto 12. Desta forma, será necessário indicar as Tabelas Relacionadas que farão conexão com a Tabela Principal, bem como os campos de ligação, para que seja feito INNER JOIN com as mesmas.

    Tem a possibilidade de relacionar até 3 tabelas, sendo que por cada tabela relacionada devem ser configurados os seguintes campos:

  • O nome interno da tabela através do campo Tabela Relacionada
    Exemplo: TD

  • Os campos de ligação Origem e Destino.
    Exemplo: Origem 1: td.ndoc e Destino 1: ft.ndoc


  • Snapshots


    20. Esta seção permite configurar e incluir na análise um snaphot, isto é, um valor calculado sob a forma de um indicador.

    É um snapshot: Ative este campo caso pretenda incluir na análise um snapshot.

    É um snapshot exclusivo de registo: Ative este campo caso pretenda que o snapshot apenas seja executado (visível) no contexto da consulta de um registo sobre o ecrã para o qual está configurado (definido mais acima na seção Detalhes no campo Ecrã).

    É apenas um snapshot e não contém análise: Se ativo irá determinar que esta configuração apenas irá contemplar um snapshot e não irá contém qualquer análise.

    Mostra snapshot e seu gráfico no ecrã de análise total: Ativando este campo será exibido o snapshot e o eventual gráfico ligado a este no ecrã das Análises Globais ( Menu > Análises e Listagens > Análises e Listagens) .

    Tipo de snapshot: Este campo permite definir se pretende construir apenas um snapshot e nesse caso deverá selecionar o item Normal. Caso pretenda construir um 2º snapshot que retorne outros valores deverá optar pelo item 2 valores independentes.
    sticky_note_2Nota

    No campo Tipo de snapshot se optar pelo item 2 valores independentes passam a ser exibidos no ecrã diversos campos para poder configurar o 2º snapshot, designadamente: Tooltip 2, Tipo de dados 2, Unidade 2, Número de casas decimais 2, É um programa VB.NET 2 e Expressão SQL do snapshot 2. O âmbito de cada um destes campos é idêntico ao explicado abaixo para os campos homólogos de configuração do 1º snapshot.


    Título do snapshot: Defina um título resumo que identifique o snapshot (este título é aplicável tanto para o 1º snapshot, como para o 2º snapshot que possa vir a configurar).

    Tooltip: Preencha um texto que detalhe claramente o que é obtido no snapshot e o que é tido em conta nos cálculos do mesmo.

    Tipo de dados: Selecione na lista o tipo de dados que será retornado pelo snapshot. Tem disponíveis um dos seguintes tipos: Texto, Inteiro, Decimal, Moeda base, Data e Percentagem.

    Unidade: À direita do valor retornado pelo snapshot, pode incluir um texto (unidade) a que se refere esse valor.

    Número de casas decimais: Para este campo defina o número de casas decimais que serão refletidas no valor obtido no snaphot.

    É um programa VB.NET: Este campo uma vez selecionado permite que a expressão do snapshot se traduza num programa em VB.NET.

    Expressão SQL do snapshot: Neste campo permite escrever a expressão do snapshot, podendo tirar partido do intelisense para o auxiliar na construção dessa mesma expressão. Por exemplo, se pretender saber qual o número de encomendas de clientes introduzidas ao dia corrente, poderia utilizar a seguinte expressão:
    select count(*) from bo (nolock) 
    where bo.dataobra = cast(getdate() as date) and bo.ndos=1

    Em função do tipo de dado retornado pelo Snapshot, pode estabelecer limites para o valor obtido e associar-lhe uma determinada cor.

    Limite vermelho: o resultado que o snapshot retornar irá apresentar uma cor vermelha, caso seja "0" e até ao valor preenchido neste campo.

    Limite amarelo: o resultado que o snapshot retornar irá apresentar uma cor amarela, caso seja superior ao valor indicado no limite vermelho e até ao valor preenchido neste campo.

    Limite verde: o resultado que o snapshot retornar irá apresentar uma cor verde, caso seja superior ao valor indicado no limite amarelo e até ao valor preenchido neste campo.

    Caso pretenda que os valores dos snapshots não tenham cor, basta deixar os 3 campos anteriores com valor zero.

    Tem gráfico: Caso pretenda associar ao snapshot um gráfico deve ativar este campo.

    Tipo de gráfico: Selecione na lista o tipo de gráfico a associar ao snapshot.
    Tem disponíveis os seguintes tipos: Linhas, Barras, Tarte, Área, Tree map, Cartões e Tabela.

    Expressão do gráfico: Área reservada para construir a expressão associada ao gráfico do snapshot. Poderá tirar partido do intelisense para o auxiliar na construção dessa mesma expressão.

    É um programa: Se a expressão feita no campo anterior constituir num código em VB.NET deverá atiivar esta opção. Caso contrário, a expressão assumirá que se trata de uma instrução em Transact-SQL.

    Colunas: Neste campo deve indicar o nome das colunas que a expressão SQL do Snapshot retorna, separados por ponto e vírgula. É sensível a Maiúsculas e minúsculas.
    Exemplo: no;nome;esaldo.

    Tipos para as colunas: Em função das colunas indicadas anteriormente, deve indicar aqui o tipo das colunas que a expressão SQL retorna, isto é:
      n para valores numéricos,
      qtt para quantidades,
      pct para percentagens,
      c para carateres,
      l para lógicos,
      d para datas,
      mb para moeda base,
      me para moeda estrangeira,
      Os diversos tipos que indicar neste campo, devem vir separador por ponto e vírgula. Exemplo: n;c;mb
    Para os tipos n, mb, me e pct pode configurar o nº de casas decimais devendo para tal à frente de cada tipo indicar o nº de casas decimais pretendido (Exemplo: n1, mb2, me2, pct1). Caso não especifique o nº de casas decimais, a aplicação irá ter em consideração as casas decimais estabelecidas no ecrã de Parâmetros.

    Para o tipo qtt a aplicação irá ter em consideração as casas decimais nas quantidades estabelecidas no ecrã de Parâmetros.

    Ainda para os tipos n, mb, me e pct pode-se optar pela exibição do valor zero quando o mesmo retorna 0, devendo para isso colocar à frente de cada tipo o símbolo # (Exemplo: n1#, mb2#, pct2#).

    Títulos para as colunas: Este campo destina-se ao preenchimento dos títulos das colunas que a expressão de SQL do gráfico do snapshot retorna, separados por ponto e vírgula.
    Exemplo: Nº Cliente;Nome;Saldo em Aberto. Tratam-se dos títulos que virão exibidos nas colunas da análise quando esta for executada na prática.

    Coluna para série 1: Neste campo é necessário colocar o nº da coluna da qual pretende obter os dados para o resultado do gráfico para um barra.

    Coluna para série 2: Neste campo é necessário colocar o nº da coluna da qual pretende obter os dados para o resultado do gráfico de uma segunda barra. Caso este campo seja deixado a zero ("0"), só irá aparecer a progressão da linha colocada no campo "Coluna para série 1".

    Coluna para dados: Indique neste campo o número da coluna do resultado que tem os dados para o gráfico.

    Coluna para legenda: Neste campo é necessário colocar o nº da coluna da análise da qual se pretende obter os dados para a legenda do gráfico.


    Acessos


    21. Por último, há que estabelecer os acessos que a análise terá, podendo ser disponibilizada em função de um acesso por perfil ou acesso por área. Os acessos estão diretamente relacionadas com os Perfis associados aos Utilizadores da aplicação.
    Nota

    Se não for definido um acesso por perfil ou se não for indicada uma área de acesso, presume-se que todos os utilizadores podem consultar a análise. Ao definir um dos acessos, determina-se que apenas os utilizadores com acesso a essa área ou a esse perfil poderão consultá-la.

    22. Ao gravar a Análise, esta estará acessível ao consultar um registo no ecrã ligado à análise, dentro do tabulador Análises (caso se trate de uma análise ligada a um ecrã) ou na opção de Análises e Listagens no menu Análises e Listagens (caso se trate de uma análise global). A análise também pode ser incluída num ecrã ligado a um Add-on, caso associe a mesma ao Add-on que estiver a desenvolver.
    Dicas

    Para efeitos de consulta de exemplos práticos, o PHC GO no ecrã de Configuração de Análises contempla um conjunto de análises internas de tipo Anual, entre as quais destacamos as seguintes:

    » Análises Globais
    • Evolução mensal de vendas (análise com 2 tabelas relacionadas + 1 Snapshot)
    • Evolução mensal da rentabilidade (análise com 2 tabelas relacionadas)

      ( as 2 análises anteriores estão igualmente configuradas para surgir no tabulador de Análises e Listagens nos documentos contidos no Menu > Vendas > Faturação )

    • Evolução mensal de compras (análise com 2 tabelas relacionadas)

      ( a análise anterior está igualmente configurada para surgir no tabulador de Análises e Listagens nos documentos contidos no Menu > Compras > Compras )


    Para as Análises Globais poderá pré-visualizar as mesmas, bastando consultar o registo da análise pretendida e através do botão de Ações (localizado na parte lateral esquerda do ecrã), aceder à opção Preveja análise. As Análises de Registo não permitem pré-visualização a partir do ecrã de configuração de análises, uma vez que que a sua execução estará sempre dependente da consulta de um registo a partir de um ecrã.

    Para mais informações sobre os nomes das tabelas e respetivos campos da aplicação, sugerimos a consulta do Dicionário de Dados disponível no Menu > Definições > Gestão de Dados).