Tips & Truco Ordenar un campo Ref en orden alfabético

raresmc

Miembro Activo
Miembro del equipo
En las aplicaciones de AppSheet los usuarios siempre tienen que rellenar formularios y por esto tenemos que ofrecerle una mejor experiencia de usuario. Una de las tareas más comunes, es por ejemplo seleccionar un cliente desde una lista desplegable.
Pero los datos en las tablas no están ordenados y esto para el usuario sería una tarea tediosa encontrar el cliente deseado además cuando hay cientos de registros.
Estos datos vienen desde las tablas DIM (tablas de dimensiones o tablas catálogos) y siempre estos tipos de tablas están relacionadas a otras tablas de tipo FACT (tablas de hechos).
Tablas relacionadas.png

Cuando hay una relación entre dos tablas, en la tabla FACT (Pedidos) tenemos que especificar el tipo de columna referenciada como Ref y especificar la tabla dónde está relacionado, en este caso la tabla Clientes.

Tabla Pedidos FACT.jpg 1663005607898.png
En cambio, en la tabla DIM (Clientes), AppSheet crea automáticamente una columna virtual de tipo List que unen estas dos tablas entre ellas y nos proporciona un listado con todos los registros relacionados desde la tabla FACT (Pedidos).
Se que es un poco confuso, pero con la práctica lo vais a entender.
Tabla Clientes DIM.jpg
Para ordenar los valores de un campo de tipo Ref en el orden alfabético, tenemos que acceder a la tabla de tipo FACT (Pedidos), luego clicamos en la columna referenciada (en este caso es Cliente) que queramos ordenar y en el apartado Data ValidityValid If ponemos la siguiente expresión:
ORDERBY( SELECT(Clientes[ID],TRUE),[Nombre],FALSE )

1663005923207.png

Explicando la expresión, primero creamos una lista con todos los nombres de los clientes que tiene un ID válido y luego ordenamos esta lista en orden alfabético.
Para que se muestra los nombres de los cliente en la lista desplegable, tenemos que poner el campo Nombre como LABEL.
1663006254769.png

Así de simple, espero que os sea de utilidad.
 

Lupintam

Nuevo miembro
Gracias por el aporte. ¿Esto podría servir para ordenar los valores de un campo List o EnumList que se ingresan directamente? Este tipo de columnas admite que los usuarios ingresen nuevos valores que se almacenan en la celda separados por comas. Ej.- "ASMA , BLOQ. RAMA DCHA , DEMENCIA , DIABETES-II , DISLIPEMIA , EPOC , ICTUS ISQUÉMICO , ITU". Me sería de utilidad poder presentarlos ordenados alfabéticamente aunque se hayan añadido sin seguir ese orden. Por supuesto, siempre puedo entrar en la configuración de columna y reordenar los campos pero preferiría que se presentasen ordenados de forma atomática. Mil gracias por cualquier solución que se os pueda ocurrir al respecto.
 

Wilber

Moderator
Miembro del equipo
En las aplicaciones de AppSheet los usuarios siempre tienen que rellenar formularios y por esto tenemos que ofrecerle una mejor experiencia de usuario. Una de las tareas más comunes, es por ejemplo seleccionar un cliente desde una lista desplegable.
Pero los datos en las tablas no están ordenados y esto para el usuario sería una tarea tediosa encontrar el cliente deseado además cuando hay cientos de registros.
Estos datos vienen desde las tablas DIM (tablas de dimensiones o tablas catálogos) y siempre estos tipos de tablas están relacionadas a otras tablas de tipo FACT (tablas de hechos).
Ver archivo adjunto 27

Cuando hay una relación entre dos tablas, en la tabla FACT (Pedidos) tenemos que especificar el tipo de columna referenciada como Ref y especificar la tabla dónde está relacionado, en este caso la tabla Clientes.

Ver archivo adjunto 28 Ver archivo adjunto 29
En cambio, en la tabla DIM (Clientes), AppSheet crea automáticamente una columna virtual de tipo List que unen estas dos tablas entre ellas y nos proporciona un listado con todos los registros relacionados desde la tabla FACT (Pedidos).
Se que es un poco confuso, pero con la práctica lo vais a entender.
Ver archivo adjunto 30
Para ordenar los valores de un campo de tipo Ref en el orden alfabético, tenemos que acceder a la tabla de tipo FACT (Pedidos), luego clicamos en la columna referenciada (en este caso es Cliente) que queramos ordenar y en el apartado Data ValidityValid If ponemos la siguiente expresión:
ORDERBY( SELECT(Clientes[ID],TRUE),[Nombre],FALSE )

Ver archivo adjunto 31

Explicando la expresión, primero creamos una lista con todos los nombres de los clientes que tiene un ID válido y luego ordenamos esta lista en orden alfabético.
Para que se muestra los nombres de los cliente en la lista desplegable, tenemos que poner el campo Nombre como LABEL.
Ver archivo adjunto 32

Así de simple, espero que os sea de utilidad.
Gracias por tu aporte @raresmc lo máximo!
 
Arriba