A utilização das regras em todo sistema é por meio da instrução # (hashtag).
Ou seja #10, por exemplo, representa a utilização da regra 10.
Planejamento e Organização
Faça o planejamento e a organização das regras para garantir que tudo esteja em seu perfeito lugar.
Quando estamos iniciando a criação de regras não temos a noção do grande problema que teremos no futuro quando houver centenas de regras sem definirmos um padrão.
Evite a construção de regras sem necessidade. A reutilização é a melhor saída.
Outro detalhe muito importante é entender o conceito de filtros nos indicadores, ou seja, podemos optar em desenvolver uma regra geral que irá nos trazer todos dados necessários e no indicador iremos utilizar os filtros de cada função para nos apresentar a informação que queremos. Isto reduz a ida ao banco de dados do cliente para aquisição da informação.
A organização da nomenclatura da regra é fundamental.
Por exemplo: para uma regra que trás todas as vendas do mês corrente não seria interessante nomeá-la de: vendas. Isto em uma grande quantidade de regras não terá muito sentido. Opte em detalhar a descrição. Como por exemplo: Itens vendidos no Mês Atual, ou Produtos vendidos no mês.
Uma funcionalidade interessante é a forma de construção da árvore de regras.
Um conceito interessante é fazer uso da estrutura do BSC (Balanced Score Card). Definindo pastas e subpastas para organizar melhor.
SQL
Domine a forma de relacionar os dados para obter a informação que precisa.
As Regras no KPI são as peças importantes para o melhor desempenho da ferramenta.
Saber desenvolvê-las é fundamental!
Alguns exemplos:
SELECT * FROM TABELA WHERE CAMPO = 'VALOR'
EXECUTE BLOCK
RETURNS (PesFat NUMERIC(15,2))
AS
DECLARE DatCur Date;
BEGIN
SELECT PesFat FROM FATURAMENTO
INTO PesFat;
SUSPEND;
END;
DECLARE @RESULT TABLE (CODCRE VARCHAR(3), DATPRG DATE,
PRGURG VARCHAR(1), CODAGR INTEGER,
NUMPED INTEGER, SEQIPD INTEGER,
CODPRO VARCHAR(10), CODDER VARCHAR(10),
PESPRG FLOAT)
DECLARE @CURENT CURSOR;
DECLARE @DATATU DATETIME;
DECLARE @PRGURG VARCHAR(1);
DECLARE @DATPRG DATE;
DECLARE @CODAGR INTEGER;
DECLARE @CODPRO VARCHAR(10);
DECLARE @CODDER VARCHAR(10);
DECLARE @NUMPED INTEGER;
DECLARE @SEQIPD INTEGER;
DECLARE @PESPRG FLOAT;
DECLARE @CODCRE VARCHAR(3);
SET @DATATU = GETDATE();
-- Programação de Produção
SET @CURENT = CURSOR FOR
SELECT PRI.USU_CODCRE,
PRI.USU_DATPRG,
PRI.USU_PRGURG, PRI.USU_CODAGR,
PRI.USU_NUMPED, PRI.USU_SEQIPD,
I.CODPRO, PRI.USU_CODDER,
PRI.USU_QTDPED
FROM USU_T900PRI PRI, E120IPD I
WHERE PRI.USU_CODEMP = I.CODEMP
AND PRI.USU_CODFIL = I.CODFIL
AND PRI.USU_NUMPED = I.NUMPED
AND PRI.USU_SEQIPD = I.SEQIPD
AND PRI.USU_DATPRG >= PRI.USU_DATPRG - 7
OPEN @CURENT;
FETCH NEXT FROM @CURENT
INTO @CODCRE, @DATPRG, @PRGURG, @CODAGR, @NUMPED, @SEQIPD, @CODPRO, @CODDER, @PESPRG
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @RESULT VALUES ( @CODCRE, @DATPRG, @PRGURG, @CODAGR, @NUMPED, @SEQIPD, @CODPRO, @CODDER, @PESPRG);
FETCH NEXT FROM @CURENT
INTO @CODCRE, @DATPRG, @PRGURG, @CODAGR, @NUMPED, @SEQIPD, @CODPRO, @CODDER, @PESPRG;
END
CLOSE @CURENT;
DEALLOCATE @CURENT;
SELECT * FROM @RESULT
GO
--DROP FUNCTION IF EXISTS Regra35();
CREATE OR REPLACE FUNCTION Regra35()
RETURNS TABLE(CODIND VARCHAR(2),
CODUSU VARCHAR(2),
NOMUSU VARCHAR(50),
VLRUSU FLOAT,
KPI_CHANGE_COLOR VARCHAR(10) )
AS
$$
DECLARE
CURSOR_Indicadores record;
CURSOR_UsuariosXIndicadores record;
BEGIN
-- Lista de Indicadores
FOR CURSOR_Indicadores IN
SELECT I."CODIND" CODIND
FROM "public"."e000ind" I
LOOP
-- Usuários que possuem os indicadores
FOR CURSOR_UsuariosXIndicadores IN
SELECT I."CODIND" CODIND,
I."CODUSU" CODUSU,
U."NOMUSU" NOMUSU
FROM "public"."E100IND" I,
"public"."E000USU" U
WHERE I."CODIND" = CURSOR_Indicadores.CODIND
AND I."CODUSU" = U."CODUSU"
LOOP
KPI_CHANGE_COLOR := '';
CODIND := CAST(CURSOR_UsuariosXIndicadores.CODIND AS VARCHAR(2));
CODUSU := CAST(CURSOR_UsuariosXIndicadores.CODUSU AS VARCHAR(2));
NOMUSU := CAST(CURSOR_UsuariosXIndicadores.NOMUSU AS VARCHAR(50));
VLRUSU := 100.58;
IF (CODIND = '1') THEN
KPI_CHANGE_COLOR := '00000';
END IF;
RETURN NEXT;
END LOOP;
END LOOP;
RETURN;
END
$$
LANGUAGE 'plpgsql';
SELECT * FROM Regra35();
[Regra1,Regra2]
SELECT A.COLUNA1, B.COLUNA1
FROM Regra1 A,
Regra2 B
WHERE A.CODIGO = B.CODIGO
Agilize a criação de regras por meio do conceito de parâmetros.
Utilizamos 2 parâmetros como função, são eles:
KPI.ENVIA.PARAMETRO
KPI.ENVIA.PARAMETRO({código da regra};{parâmetros})
Exemplo de regra:
KPI.ENVIA.PARAMETRO(#17;14;12;28.10.2018)
Parâmetro 0: código da regra a ser executada
Parâmetro 1: 14
Parâmetro 2: 12
Parâmetro 3: 28.10.2018
assim por diante...
KPI.RECEBE.PARAMETRO
Exemplo de regra utilizando no banco de dados Firebird como exemplo, mas é permitido utilizar em qualquer banco de dados:
KPI.RECEBE.PARAMETRO(PARAM_CODIND,PARAM_CODFOR,PARAM_DATINI)
EXECUTE BLOCK
RETURNS (CODIGO INTEGER, NOMCLI VARCHAR(80), DATINI DATE)
AS
BEGIN
CODIGO = PARAM_CODIND;
NOMCLI = 'Indústria Brasileira de Acolchoados';
DATINI = NULL;
SUSPEND;
CODIGO = PARAM_CODFOR;
NOMCLI = 'Associação Brasileira de Acolchoados';
DATINI = NULL;
SUSPEND;
CODIGO = 1391;
NOMCLI = 'Fábrica Brasileira de Climatização';
DATINI = 'PARAM_DATINI';
SUSPEND;
END
Blocos de Execução
Execute o bloco de regra que precisa sem remover ou comentar o restante da regra.
Os Blocos de Execução são muito importantes para quando você precisa validar um novo código. Neste caso, você não precisaria descartar o código antigo ou deixá-lo comentado.
Basta utilizar o bloco [$I1]..[$F1]
Exemplo em SQL Simples utilizando Blocos de Execução
SELECT * FROM TABELA WHERE CAMPO = 'VALOR'
[$I1]
SELECT * FROM TABELA_1 WHERE CAMPO = 'VALOR1'
[$F1]
SELECT * FROM TABELA_2 WHERE CAMPO = 'VALOR2'