Filtro para equação

Qual a melhor maneira de se fazer um filtro pra armazenar o valor de uma equação a partir de 3 condições. Ex condição A maior que 100, condição B >26 e <27 e condição C >95 ??

Olá @leorocha,

Pelo que entendi, precisa armazenar o valor True se essas condições forem verdadeiras e False se forem falsas, correto?
Se for isso, a sintaxe fica assim:

True if A.Value > 100 and B.Value >26 and B.Value <27 and C.Value > 95 else False

Eu estou precisando armazenar uma variável de eficiência se a temperatura estiver entre 26 e 27°C e a rotação maior que 95 e a pressão barométrica maior do que 100. Se todas as condições forem atendidas armazena o valor atual e se não for imagino que deveria não armazenar nada. E ir ligando os pontos.

Veja esse exemplo:

(2 *3.14 * e.Value ** 2) if( (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27)) else e.Value

Dessa forma será armazenado o valor da equação (2 *3.14 * e.Value ** 2) quando as condições forem verdadeiras, senão grava o valor “puro” da variável.
Outra opção seria:

(2 *3.14 * e.Value ** 2) if( (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27)) else 0

Gravando zero, quando as condições não estão ok.

É importante definir qual é o trigger ou evento que vai disparar esse cálculo e valores iniciais para as variáveis.

Os prints podem te ajudar a entender melhor:

image

Qualquer dúvida nos avise.

Outra opção é criar um método no arquivo:
C:\ProgramData\Elipse Software\EpmServer\Scripts\ExpressionInitialization.py

E chamar esse método no EPM Studio.
*É preciso reiniciar o EPM Server, para que o arquivo ExpressionInitialization.py seja carregado com alterações.

Exemplo:

def eficiencia(e, t, r, p):        
    if  (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27):
        return 2 * 3.14 * e.Value ** 2
    else
        return e.Value

image

Obrigado Lucas. Consegui implementar, estou precisando de mais uma orientação, se puder ajudar fico agradecido. No exemplo abaixo se as condições forem atendidas ele me retorna o valor “puro” da variável,

(2 *3.14 * e.Value ** 2) if( (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27)) else e.Value
Com a ideia de filtro que estou querendo aplicar para registra o valor somente se atender as condições se não atender será registra o valor anterior .
O nome dessa equação é fi, e estou colocando assim:
(2 *3.14 * e.Value ** 2) if( (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27)) else fi.Value

Resumindo: tenho uma expressão para calcular a eficiência, chamada ef, e estou fazendo uma expressão de filtro pois gostaria de calcular somente se as condições forem verdadeiras se não forem permanece o valor anterior. Depois do else coloquei a própria equação que estou calculando pra voltar o valor anterior. Será se funciona ??
Ex:
ef.Value if( (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27)) else fi.Value

Entendi que você deseja calcular uma expressão se as condições forem verdadeiras, senão, não realiza o cálculo e mantém o valor anterior.
Se o nome da sua ExpressionVariable é fi, insira ela na lista de InputVariables, dessa forma ela retorna o valor anterior ou o valor calculado, em uma expressão assim:

(2 *3.14 * fi.Value ** 2) if( (p.Value > 100) and (r.Value > 95) and (t.Value > 26) and (t.Value < 27)) else fi.Value