none
Iff Aninhado na Expressão RRS feed

  • Pergunta

  •  

    Olá a todos!

     

    Alguém sabe como é a sintaxe de uma condição que tem varios iifs aninhados?

     

    Por exemplo:

     

    iif (

       ( data > data_entrega ) and ( data >= 'dd/mm/yy'), "ghjdldfçfçfggfçg',

       iif (

    ( data > data_entrega ) and ( data >= 'dd/mm/yy'), "ghjdldfçfçfggfçg',

    iif (

    ( data > data_entrega ) and ( data >= 'dd/mm/yy'), "ghjdldfçfçfggfçg',

    iif(

    ( data > data_entrega ) and ( data >= 'dd/mm/yy'), "ghjdldfçfçfggfçg',

        

    Onde eu fecho cada iif ???

     

    Por favor!!!

     

    Obrigada.

    terça-feira, 15 de janeiro de 2008 19:18

Respostas

  •  

    A sintaxe do IIF é

    Code Block
    IIF( condição, objeto_verdadeiro, objeto_falso)

     

     

    A maneira que a condição é montada independe desta sintaxe, se a sua condição for um AND:

    (campo) <  DateValue("0000-00-00") and (campo) >=  CDate ("0000-00-00")

     

    Voce só precisa colocar-la no lugar da condição da sintaxe:

    Code Block
    IIF( (campo) <  DateValue("0000-00-00") and (campo) >=  CDate ("0000-00-00"), valor_verdadeiro, valor_falso)

     

     

    Isso é valido para qualquer condiçao, por ex:

    (a>3) ou ((b<10) and (c=5))

    fica

    Code Block

    IIF((a>3) ou ((b<10) and (c=5)), objeto_verdadeiro, objeto_falso)

     

     

    O que confunde alguns programadores é que o IIF é uma função e portanto ele separa a condição do "valor_verdadeiro"por uma virgula entao voce sempre terá após a sua condição uma virgula antes do objeto_verdadeiro. O funcionamento é parecido com o "IF" de fórmulas do excel.

     

    O expression dialog que me refiro é do Businnes intelligence development studio, quando você seleciona "<Expression>" ele abre uma janela onde você pode escolher a função que você precisa usar. Essa é a janela que estou falando:

    http://msdn2.microsoft.com/en-us/library/ms189719.aspx e

    http://msdn2.microsoft.com/en-us/library/ms157376.aspx

     

    E nesse link você tem vários exemplos de expressões (inclusive iif) que vale a pena dar uma olhada.

    http://msdn2.microsoft.com/en-us/library/ms157328.aspx

     

    Espero que ajude Smile

     

    Att

    Boreki

     

     

    • Marcado como Resposta jaqque sábado, 22 de agosto de 2009 15:05
    quarta-feira, 16 de janeiro de 2008 16:45

Todas as Respostas

  • Code Block

    iif("Condicao 1", "Valor 1",

    iif("Condição 2", "Valor 2",

    iif( "Condição 3", "Valor 3", "Valor 4")))

     

     

     

     

    E assim por diante. O valor 4 seria o ultimo else, quando nenhuma condiça'é satisfeita, depois disso voce fecha todos os outros iifs.

     

    Sempre que possível use o Expression Dialog do Reporting services que ele mostra a sintaxe das funções e fica mais fácil de visualizar.

     

    Abraço

     

    Boreki

    terça-feira, 15 de janeiro de 2008 19:24
  • Aproveitando, gostaria de tirar uma duvida parecida.

     

    Quando se usa 'or, and, etc...' A Sintaxe fica assim: ((campo) or (campo)) certo?

    E no caso
     IIf ((campo) <  DateValue("0000-00-00")) and ((campo) >=  CDate ("0000-00-00")) a sintaxe é assim msm ou:


     IIf ((campo) <  DateValue("0000-00-00") and (campo) >=  CDate ("0000-00-00")) - Apenas com dois parenteses fechando
    no final.

     


    Ahh aproveitando, onde posso está essa Expression Dialog no Reporting Services para que eu possa tirar duvidas desse tipo?

     

    Obrigada

    Vah

     

    quarta-feira, 16 de janeiro de 2008 15:12
  •  

    A sintaxe do IIF é

    Code Block
    IIF( condição, objeto_verdadeiro, objeto_falso)

     

     

    A maneira que a condição é montada independe desta sintaxe, se a sua condição for um AND:

    (campo) <  DateValue("0000-00-00") and (campo) >=  CDate ("0000-00-00")

     

    Voce só precisa colocar-la no lugar da condição da sintaxe:

    Code Block
    IIF( (campo) <  DateValue("0000-00-00") and (campo) >=  CDate ("0000-00-00"), valor_verdadeiro, valor_falso)

     

     

    Isso é valido para qualquer condiçao, por ex:

    (a>3) ou ((b<10) and (c=5))

    fica

    Code Block

    IIF((a>3) ou ((b<10) and (c=5)), objeto_verdadeiro, objeto_falso)

     

     

    O que confunde alguns programadores é que o IIF é uma função e portanto ele separa a condição do "valor_verdadeiro"por uma virgula entao voce sempre terá após a sua condição uma virgula antes do objeto_verdadeiro. O funcionamento é parecido com o "IF" de fórmulas do excel.

     

    O expression dialog que me refiro é do Businnes intelligence development studio, quando você seleciona "<Expression>" ele abre uma janela onde você pode escolher a função que você precisa usar. Essa é a janela que estou falando:

    http://msdn2.microsoft.com/en-us/library/ms189719.aspx e

    http://msdn2.microsoft.com/en-us/library/ms157376.aspx

     

    E nesse link você tem vários exemplos de expressões (inclusive iif) que vale a pena dar uma olhada.

    http://msdn2.microsoft.com/en-us/library/ms157328.aspx

     

    Espero que ajude Smile

     

    Att

    Boreki

     

     

    • Marcado como Resposta jaqque sábado, 22 de agosto de 2009 15:05
    quarta-feira, 16 de janeiro de 2008 16:45