Implementação de dependecia funcional para definir escopo de métricas
Pode-se ocorrer casos em que uma métrica não pode ser dividida no conjunto de métricas fornecido. Nesse caso ocorre a replicação do valor. Anteriormente acreditava-se que esse era o comportamento desejado, mas existem casos que a resposta é erronêa.
Um exemplo: Supondo que os dados de rede são coletados em nível de cidade, e uma outra métrica de inventário é coletado em nível de escola. O resultado da consulta dados de rede por escola, seria o seguinte: todas as escolas da mesma cidade apresentariam o mesmo valor, que é o total de tráfego da cidade.
Para evitar esse problema deve-se identificar quais dimensões podem ser utilizadas em conjunto com as métricas. Para isso basta utilizar a depêndencia funcional dos atributos.
A métrica deve possuir uma chave (conjunto de dimensões) e todas as dimensões são dependentes funcionais dessa chave (podem ser inferidas a partir da chave) são as dimensões que podem ser utilizadas em conjunto com a métrica.
Especificação
- Na definição das dimensões (arquivo de configuração), deve existir um novo campo: uma lista de dimensões que podem ser utilizadas para inferir a dimensão atual
- Se A -> C e B -> C, então em C existe uma lista com os valores [A, B]
- Métricas devem possuir uma chave
- A chave pode ser inferida da visão origem da métrica
- O conjunto de dimensões dessa visão pode ser utilizado como chave
- Deve-se adicionar a verficação de unicidade da métrica e da visão origem da métrica
- As métricas devem conter uma lista de dimensões permitidas, para serrem utilizadas em conjunto
- Essa lista pode ser calculada na leitura do arquivo de configuração
- Basta criar um grafo com as informações de dependencia funcional e calcular o fecho transitivo (realizar uma busca em largura)
- Uma vez com a lista basta verificar se a lista de dimensões é um sub-conjunto da lista de dimensões permitidas para cada uma das métricas da consulta
Implementação
-
Adicionar novo campo no arquivo de configuração para as dimensões, contendo a informação de dependencia -
Adicionar novo campo a classe das métricas, com a lista de dimensões permitidas -
Criar um grafo a partir das informações de dependência no momento da leitura do arquivo de configuração -
Calcular o conjunto de dimensões permitidas por métrica, utilizando o grafo, realizando uma busca (provavelmente em, largura) -
Modificar a API para verificar se o conjunto de dimensões é um sub-conjunto do conjunto de dimensões permitidas. Caso o conjunto seja inválido, informar o erro.