Dos expresiones

Buenas tardes.

 

tengo un problema que no se como soluyciones.

tengo dos expresion que se crearon por separado y funcionan bien. ahora necesito unirlas que funcionen al mismo tiempo, no encuentro la forma. 

Expresion 1= SELECT(Usuarios[ID USUARIO],[EVENTO]=[ID EVENTO])

expresión para verificar que el usuario esta registrado

 

Expresion 2= COUNT(SELECT(Asistencia[ID ASISTENCIA],[ID USUARIO]=[_THISROW].[ID USUARIO]))=0

expresión para verificar que el usuario no este repetido.

 

Agradezco su ayuda

Solved Solved
0 13 261
1 ACCEPTED SOLUTION

Gracias. No está claro lo que intentas hacer, pero suponiendo que quieres verificar si un usuario está registrado en un evento:

Primero tu tabla de usuarios debe tener únicamente las columnas que serán fijas siempre para un usuario. Por ejemplo, las columnas azules Evento y Asistencia ¿por qué razón las tienes en la tabla de usuarios? ¿un usuario podrá únicamente asistir a solo un evento en particular nada más? (también es el caso de Pedido).

Tú ya tienes una tabla de Eventos, y tienes la tabla Asistencia que une un usuario con un evento. En la tabla Asistencia puedes repetir eventos y usuarios como necesario, y como tienes esta tabla, no necesitas incluir información de eventos en la tabla de Usuarios, ni información de usuarios en la tabla de Eventos. 

Esto tiene en cuenta que las dos columnas Usuario y Evento en la tabla Asistencias son de typo Ref y que cada una apunta a la tabla correspondiente. 

Ahora, creando una Asistencia, ¿cómo asegurarnos que el usuario no está ya registrado en un evento? La respuesta general es: ver si hay un registro en Asistencia que une el usuario con el evento, así:

ISBLANK( SELECT(Asistencia [ID Asistencia],
  AND(
    [Usuario] = [_ThisRow].[Usuario],
    [Evento] = [_ThisRow].[Evento]
  )
))

Si utilizas un Form para llenar la tabla Asistencia, puedes primero seleccionar un Evento luego un Usuario. La columna Usuario debe tener la configuración siguiente:

  • Mostrar la columna solo si un Evento ha sido seleccionado: el campo "Show?" debe tener la expresión siguiente:

    ISNOTBLANK([Evento])

  • Mostrar únicamente los Usuarios que no están ya registrados en este mismo Evento: los campos "Suggested Values", y "Valid If" deben tener la expresión siguiente: 

    Usuarios[ID Usuario] - SELECT( Asistencia[ID Usuario], 
      [Evento] = [_ThisRow].[Evento]
    )

List Subtraction | AppSheet Help Center 
ISBLANK() | AppSheet Help Center 
SELECT() | AppSheet Help Center 

 

View solution in original post

13 REPLIES 13

Hola, ¿Nos puedes mostrar tus tablas pf? Gracias. 

Hola,

si mira
asistencia.pngusuarios.png

Gracias. No está claro lo que intentas hacer, pero suponiendo que quieres verificar si un usuario está registrado en un evento:

Primero tu tabla de usuarios debe tener únicamente las columnas que serán fijas siempre para un usuario. Por ejemplo, las columnas azules Evento y Asistencia ¿por qué razón las tienes en la tabla de usuarios? ¿un usuario podrá únicamente asistir a solo un evento en particular nada más? (también es el caso de Pedido).

Tú ya tienes una tabla de Eventos, y tienes la tabla Asistencia que une un usuario con un evento. En la tabla Asistencia puedes repetir eventos y usuarios como necesario, y como tienes esta tabla, no necesitas incluir información de eventos en la tabla de Usuarios, ni información de usuarios en la tabla de Eventos. 

Esto tiene en cuenta que las dos columnas Usuario y Evento en la tabla Asistencias son de typo Ref y que cada una apunta a la tabla correspondiente. 

Ahora, creando una Asistencia, ¿cómo asegurarnos que el usuario no está ya registrado en un evento? La respuesta general es: ver si hay un registro en Asistencia que une el usuario con el evento, así:

ISBLANK( SELECT(Asistencia [ID Asistencia],
  AND(
    [Usuario] = [_ThisRow].[Usuario],
    [Evento] = [_ThisRow].[Evento]
  )
))

Si utilizas un Form para llenar la tabla Asistencia, puedes primero seleccionar un Evento luego un Usuario. La columna Usuario debe tener la configuración siguiente:

  • Mostrar la columna solo si un Evento ha sido seleccionado: el campo "Show?" debe tener la expresión siguiente:

    ISNOTBLANK([Evento])

  • Mostrar únicamente los Usuarios que no están ya registrados en este mismo Evento: los campos "Suggested Values", y "Valid If" deben tener la expresión siguiente: 

    Usuarios[ID Usuario] - SELECT( Asistencia[ID Usuario], 
      [Evento] = [_ThisRow].[Evento]
    )

List Subtraction | AppSheet Help Center 
ISBLANK() | AppSheet Help Center 
SELECT() | AppSheet Help Center 

 

Hola


si la columna asistencia en usuarios no debería estar solo la puse por una prueba que estaba realizando pero no va a quedar. disculpa por este error.

"¿un usuario podrá únicamente asistir a solo un evento en particular nada más? (también es el caso de Pedido)."

R: si cada usuario solo  compra entrada para un evento, es la primero que estamos creando, de pronto a futuro el mismo usuario comprara entrada para otro evento, creo que tendría que hacer doble validación en ese caso.

 

por eso se necesita las dos comprobacion en la tabla de asistencia.
1= que el usuario este registrado en el evento especifico. "ISNOTBLANK([Evento])"

2= que el usuario no se pueda entrar dos veces al mismo evento no pueda tener doble asistencia.

 

Hola, disculpa no era una pregunta en sí; era sólo para demostrar que dichas columnas no son necesarias. De todas formas, ya con tu tabla Asistencia no necesitas esas columnas y la solución de arriba valdrá en cualquier caso.

Hola.

disculpa por preguntar tanto soy novato en appsheet.

esta expresión funciona solo muestra los que no tienen aun asistencia,

LordCortes_0-1645544588561.png

pero donde pongo la otra para verificar que el usuario esta registrado en este evento realmente y no en otro?
muchas gracias por tu ayuda nuevamente!

No te preocupes. Esta expresión ya muestra si el usuario está registrado en este evento en particular, no cualquier evento en general. Recuerda que en la consulta SELECT hemos incluido la condición: 
[Evento] = [_ThisRow].[Evento]

 

Tienes que leer esto:

SELECT() | AppSheet Help Center 

si entiendo esta parte del selec pero por alguna razón no realiza el filtro, de los datos de prueba tengo a dos usuarios en diferente evento igual de prueba y me aparecen en el listado. ya leí todo pero no entiendo por que salen

Sin título.jpg

Eso porque la expresión se basa en lo que está en la tabla Asistencia. La columna Evento en Usuarios que hemos comentado como no necesario no se debe tener en cuenta, ni ningún otra columna en la tabla Usuarios. 
La relación entre Usuarios y Eventos está en la tabla Asistencia. 

cual seria la forma optima para hacerlo:
Que se verifique si el usuario esta registrado en el evento  que estoy seleccionando y que no pueda duplicar la asistencia?

Aquí sólo tienes que actualizar la tabla Asistencia. Nada más.

Actualmente la tabla Asistencia tiene tres registros. Si las asistencias de David y Erika están en la tabla Asistencia, ninguno de los dos se mostrará en la lista de clientes a elegir. 

 

ID AsistenciaID Evento ID Usuario
abcd12342b076251a5
abcd12352b076251a8

Aurelien
Google Developer Expert
Google Developer Expert

Hi @LordCortes 

 

Probably something like this:

AND(
  IN(USEREMAIL(),[Related Usuarios]),
  COUNT([Related Asistencias])=0
)

 

Steve
Platinum 4
Platinum 4
Top Labels in this Space