Executando uma Consulta SQL para Todos os Pontos de um Tipo de Objeto

<< Clique para Mostrar o Sumário >>

 

Executando uma Consulta SQL para Todos os Pontos de um Tipo de Objeto

Um relatório que pode ser interessante para profissionais do setor de energia elétrica é a lista de Disjuntores ou Chaves, como por exemplo os Equipamentos do tipo PowerBreaker ou PowerSwitch, que estão há mais dias sem manobra. Este tipo de relatório pode ajudar equipes de manutenção para eventuais trabalhos.

Com o Elipse Data Model, a tarefa de construir este relatório é facilitada pelo fato de ser possível buscar por todos os Equipamentos de um determinado tipo sem considerar quantos existam ou onde estejam localizados na modelagem. Além disto, caso novos Equipamentos do respectivo tipo sejam inseridos, automaticamente são considerados na busca, evitando que o usuário precise editar o relatório.

A solução a seguir é composta primeiramente pela execução da Stored Procedure EpmRefreshModel, que garante que o modelo esteja atualizado, seguido pela consulta que busca todas as Medidas Discretas, do tipo PowerDiscreteMeasurement, e que terminem com o caminho do Elipse Data Model pelas expressões "BreakerPosition" e "SwitchPosition". Nesta consulta, os caminhos são concatenados e separados por vírgula.

Na sequência, a consulta EpmLastChangeRecordedFunction busca pelas últimas mudanças de valor, subtraindo estas estampas de tempo da data atual, o que resulta no número de dias desde a última manobra. A lista de caminhos dos Equipamentos da consulta anterior é usada como parâmetro nesta consulta.

USE [EPM_Database]
GO
EXEC [dbo].[EpmRefreshModel]
DECLARE @taglist AS nvarchar(max)
SELECT @taglist = COALESCE(@taglist + '/Value,', '') + InstancePath
FROM [dbo].[EpmBrowseTypeInstancesFunction] ('PowerDiscreteMeasurement')
WHERE InstancePath LIKE 'ElipseDataModel/%' AND
(InstancePath LIKE '%BreakerPosition' OR InstancePath LIKE '%SwitchPosition')
SELECT TOP 10 Name AS EquipmentPath, Timestamp, DATEDIFF(DAY, Timestamp, GETDATE())
AS DiffInDays, Quality, Value
FROM [dbo].[EpmLastChangeRecordedFunction] (-3, GETDATE(), 1, 0, 0, 0, @taglist + '/Value')
WHERE Quality = 0
ORDER BY DiffInDays DESC

 

A figura a seguir mostra o resultado desta consulta.

Resultado da consulta por Equipamentos sem manobras

Resultado da consulta por Equipamentos sem manobras

Outro exemplo prático que segue a mesma lógica anterior é buscar todos os valores de uma Simple Property de um determinado tipo de objeto. Na modelagem de exemplo, tem-se um XFolder do tipo xfArea, que representa cada unidade da planta em duas cidades diferentes. Estes objetos do tipo xfArea foram configurados para que o Elipse Data Model adicione uma Simple Property chamada Geolocation.

O objetivo aqui é buscar a geolocalização de todas as unidades da planta, independente de quantas existam ou se novas unidades venham a ser adicionadas no futuro. O resultado desta consulta poderia ser cruzado com dados de desempenho da planta para serem mostrados em um mapa, por exemplo. O código SQL é mostrado a seguir.

USE [EPM_Database]
GO
EXEC [dbo].[EpmRefreshModel]
DECLARE @taglist AS nvarchar(max)
SELECT @taglist = COALESCE(@taglist + ',', '') + InstancePath
FROM [dbo].[EpmBrowseTypeInstancesFunction] ('xfArea')
WHERE InstancePath LIKE 'ElipseDataModel/%'
SELECT * FROM [dbo].[EpmReadRetentivePropertyFunction] (@taglist, 'Geolocation')

 

A figura a seguir mostra o resultado da consulta.

Resultado da consulta por geolocalização

Resultado da consulta por geolocalização

 

NOTA

É muito importante sempre executar a Stored Procedure EpmRefreshModel antes das consultas. Esta Stored Procedure garante que as funções utilizadas em seguida consigam identificar os objetos da estrutura do modelo de forma atualizada. Para mais detalhes, consulte o Manual de Consultas ao EPM via SQL Server.

Esta página foi útil?