Desarrollo de Sistemas ERP/CRM y Software Libre, Linux, Desarrollo de Proyectos, Programación OpenSource. Web

jueves, noviembre 10, 2005

Filtrado de Informacion Inteligente para Navegacion de Datos

Filtrado de Información para la Navegación Guiada de la misma.

Endeca, una empresa norteamericana de IT desarrolló hace algunos años un concepto innovador para la navegación de los datos en catálogos extensos a la que denominó Guided Navigation, mediante la cual la información catalogada en dimensiones de la misma es enmarcada en un contexto de navegación donde por cada dimensión de datos se efectúa un calculo de los posibles filtros a aplicar y donde cada calculo que muestre diversidad de criterios es presentado como opciones de filtrado según el tipo de datos en particular y el significado de estos datos, ejemplo de esto tendríamos en el caso de valores de cantidad o precio, donde en el primero se filtraría por rangos posibles, creándose varios filtros de acuerdo a la distribución de los datos en el conjunto y en el de precio se mostrarían filtros también por rangos pero con una semántica orientada de acuerdo al tipo de aplicación especifico (en el caso de una tienda virtual podría ser: menos de $10, $10 a $20, $20 a $50, mas de $50) dándole así posibilidad al usuario que navega el catalogo de centrarse en productos acorde a su interés de gasto, o en el caso de ser un campo de tipo de registro, pues pueden mostrarse los resultados mas interesantes primero o los que mas resultados encierren (Ej. Tipo de tela en un catalogo de ropa: Lino, Algodón, Mezclilla, Seda, Otros). En el caso de no existir diversidad para un campo específico este no se mostraría ahorrándonos la molestia de tener que visualizar filtros sin interés para la búsqueda o permitiéndonos hacer un refinamiento en campos dependientes de este (Ej. País, Ciudad, donde primeramente podríamos tener un conjunto de filtros para País de esta forma: Cuba, Jamaica, México, Brasil, Ecuador, Otros y cuando se seleccione el filtro Cuba el filtro por el campo país ya no sea de interés al ser todos los registros del mismo País, siendo entonces de interés el campo Ciudad pudiéndose crear un filtro para ciudades según el conjunto de datos filtrados para el país Cuba Ej. Ciudad Habana, Santiago de Cuba, Pinar del Río, Matanzas, Otras)

Un esquema de filtrado como este tiene como propósito que los usuarios que navegan los datos buscando “algo” en particular llegarán a los resultados mas cercanos a los que quieren pues cada nuevo criterio de filtrado generara un conjunto no vacío de elementos que son similares en cierta medida al que se busca originalmente, en contraposición a los esquemas donde se tienen que introducir criterios de búsqueda que implican un conocimiento previo (muchas veces a fondo) de la estructura de los datos y donde los conjuntos de resultados nulos pueden resultar comunes y contraproducentes en sitios web donde esto atenta contra la accesibilidad y el dinamismo necesario para atrapar clientes (las principales tiendas virtuales de libros y otros artículos utilizan la tecnología de Endeca o alguna similar, Ej. Barnes & Noble, Amazon, etc.), estimando un incremento de las ventas de entre un 5 y un 10 por ciento, según estimados realizados por la propia empresa Endeca.

La implementación de este esquema para navegación de registros es relativamente fácil y dependiendo del tipo de medio y el momento de exposición del citado contexto de navegación se pueden hacer algunas mejoras de rendimiento convenientes según la cantidad de elementos a navegar.

Básicamente, una aproximación efectiva al esquema completo se basa en meta-información insertada en la consulta y donde el diseñador de la misma puede incorporar todos los datos necesarios para los campos que este mostrará o gestionará los filtros (no necesariamente coinciden).

Ejemplo de esto es...

Supongamos un conjunto de datos donde se tienen los campos:

Nombre, Edad, Dirección, Sexo, Escolaridad (6to, 9no, 12vo, Universitario), Provincia, Municipio, Salario.

Para el cual podríamos tener un conjunto de datos como el que sigue:

Ahora, es evidente que para el diseño de los datos de esta tabla las columnas tendrían tipos de datos comunes entre cadenas de caracteres, números enteros, reales o de tipo índice o llaves foráneas (referidas como números enteros) pero los tipos de filtros se aplican según la semántica de los campos, ya sean descripción, cantidad, valor, edad, nomenclador, etc. infinito dado el numero infinito de posibilidades del mundo real que pueden ser recogidas por los datos de una tabla.

Atendiendo a los significados de los campos de la tabla escogeremos filtros que pueden ser aplicados a cada campo para tener una idea de cómo funciona este método de filtrado.

De esta forma tendremos que al campo de Nombre le aplicaremos un filtro de Nombre propio, que nos mostrara para cualquier conjunto de datos de tipo cadena de caracteres un número máximo predeterminado de rangos, formados a partir de las primeras letras que tengan diversidad en el campo. En el caso de la tabla seria para 5 rangos A..., E..., J..., O..., Y..., donde si el filtro J fuera seleccionado entonces quedaría JO..., JU... ya que estaríamos filtrando por los que empiezan por J y entonces para este campo la diversidad comienza a partir de la segunda letra y así sucesivamente.

En el campo Edad se pueden tomar dos alternativas, atendiendo a la naturaleza de valor entero del dato hacer rangos de valores calculados a partir de cualquier algoritmo particular, pudiéndose obtener algo como: 15 a 24 años, 25 a 45 años, 58 a 75 años o atendiendo a la definición semántica del dato: Adolescentes, Jóvenes, Adultos, Tercera Edad.

En el campo Dirección, es mas complicado implementar un filtro ya que la naturaleza de estos datos es propicia a que se utilice un campo de cadenas de carácter para almacenarlo, además de no contar con regularidades que puedan ser aprovechadas y cualquier análisis sobre la misma podría ser engorroso y no brindar resultados interesantes, por eso no implementaremos un filtro para este campo de la misma manera que pueden ser aplicados varios filtros sobre un mismo campo o sobre varios campos a la vez.

Para el campo Sexo de acuerdo a como se implemente el tipo de datos podríamos tener un filtro de Nomenclador en el caso de ser el dato una referencia a otra tabla con los sexos (a pesar de ser solo dos, tendríamos nuestra tabla normalizada). En todo caso la diversidad del campo se obtiene cuando la cantidad de opciones es mayor que una, para este caso: Masculino, Femenino, pudiéndose mostrar inclusive información de cuantos resultados encierra cada filtro, En el mismo caso están los campos de Escolaridad, Provincia y Municipio. En el caso de Provincia y Municipio estos podrían formar un filtro anidado o escalado, de manera que el filtro para Municipio solo se aplicaría en el caso que para el filtro de Provincia no exista diversidad, permitiéndole al usuario filtrar primero en esa dimensión y posteriormente en la siguiente y así sucesivamente. Ej. Para el primer filtro de Provincias tendríamos: Ciudad Habana, Santiago de Cuba, Pinar del Río, seleccionando Ciudad Habana el filtro de provincias no tendría diversidad lo que implicaría que se efectuara el filtrado por Municipios, obteniéndose un nuevo filtro que aunque anteriormente tenia diversidad al existir una dimensión superior a el en jerarquía no se mostraba resultando en: Boyeros, Cerro, Playa, además de resultar una característica interesante, los filtros anidados pueden tener muchos niveles y particularidades de acuerdo a la estructura de la información y la semántica de la misma.

El Salario presenta la particularidad que como es un valor real (o flotante, como se prefiera) es posible la creación de rangos de Salarios acorde a la particularidad del sistema y además de que el valor $0.00 representa a la persona que no percibe un Salario así que podríamos obtener un rango de la siguiente manera: Sin Salario, $101.00 - $120.00, $224.00 - $340.00, $424.00 - $543.00.

Así para el conjunto de datos mostrado en la tabla obtendríamos el siguiente contexto de navegación.

(Nótese la relación de preferencia del Contexto de Navegación sobre el Conjunto de datos)

En este contexto además de resaltar los filtros de interés para la navegación de los datos con solo leerlo le da una idea al usuario de cómo es el conjunto de datos que esta navegando, sobre todo si es un conjunto extenso que por su magnitud no puede ser visualizado completamente, permitiéndole con pocas interacciones llegar al conjunto de resultados que son de interés para su búsqueda.

Ej. El usuario busca una persona del municipio Boyeros, cuyo nombre empieza por J y que es Universitario.

Haciendo clic en el filtro J... la búsqueda se refinaría a un conjunto de 3 personas

Seleccionando el filtro Boyeros se refinaría aun más la búsqueda al siguiente conjunto:

Para finalmente filtrar por Universitario y llegar al único resultado:

Donde el contexto de navegación quedaría vacío al no existir diversidad en ninguno de los campos de la tabla, llegándose a un registro que cumple con todos los requisitos (o al menos se le acerca) en todas las dimensiones especificadas o de interés.

Elementos de la Navegación.

En el momento que el usuario navega la información es importante contar con varios elementos que le ayudarán a auxiliarse en la misma. Estos son el Panel de Resultados, que no es mas que donde los resultados aparecen listados, El Contexto de Navegación, donde son listados los filtros calculados acorde al conjunto de datos listados y la Barra de Navegación (además de cualquier otra parafernalia de paginado, etc.) que nos permitirá visualizar que filtros hemos aplicado ya y de acuerdo a su composición particular entonces seria posible eliminar algún filtro ya aplicado, o un conjunto de estos según se prefiera.

Es importante señalar que es conveniente cuando se va a aplicar un filtro chequear si ya no existe un filtro sobre el mismo campo o tipo antes para en ese caso reemplazarlo ya que seria incomodo mostrar varios filtros parecidos sucesivamente además de resultar poco eficiente. (Ej. ... > J... > JO... > JOS... por ... > JOS...)

Entre los eleOtro aspecto interesante de la Barra de Navegación es que podría ofrecernos un método de negar un filtro.

Filtro Negado.

Cuando queremos especificar que un filtro es inverso a su definición (Ej. Quiero mostrar las personas que no sean de Ciudad Habana) es conveniente contar con algún método de hacerlo ya sean en el Contexto de Navegación especificando que el filtro ha de aplicarse negado o ya sea en la Barra de Navegación donde los filtros que estén aplicados posteriormente a este deberán ser desechados por referirse al conjunto complemento al de búsqueda y ser los filtros posteriores inciertos.

Navegación Guiada en el SIG.

El SIG cuenta con soporte para todas las especificaciones hechas arriba por medio de la clase Filter la cual puede ser extendida para crear variedades de filtros propios aunque en el SIG se incluyen un conjunto bastante abarcador de los mismos, con soporte para Filtros Anidados, Negados y Reemplazo de filtros ya existentes. También el control QueryBrowserControl, posee métodos para adicionarle un conjunto de filtros a la consulta y para visualizar y gestionar la Barra de Navegación y el Contexto de Navegación, con formularios específicos para todas las operaciones.
Ejemplo:
Nótese la adición de filtros en el primer bloque del tipo CompleteStringFilter con los nombres: Responsable, Clientes, Importadores con los campos: dbo._sig_users_fullname, ClientesYProveedores.Nombre y ClientesYProveedores_1.Nombre respectivamente de acuerdo a la consulta en particular y nótense también las marcas en la consulta referentes a la parte de los campos (/c.../c), la zona de GROUP BY (/g GROUP BY .../g), la zona del ORDER BY (/o ORDER BY .../o) y el lugar donde se insertan los filtros aplicados (/f), todas sin excepción deben ser proporcionadas por el desarrollador para el correcto funcionamiento del sistema de filtrado guiado.

Tipos de Filtros Incorporados en el SIG.

El SIG cuenta con una cantidad abarcadora de filtros pre-programados con diferentes usos, desde rangos de Cantidades, Valores Monetarios, Cadenas de Caracteres, Nombres Propios, de tipo Verdadero o Falso, de Nomencladores, etc.

  • CompleteStringFilter, Este filtro puede aplicársele a los datos de tipo cadena de caracteres y el mismo proporcionara tantos filtros como cadenas distintas exista en el campo en cuestión, con la particularidad de poder decidir si mostrar las cadenas vacías como una opción mas y con que texto.

  • IdentifyerStringFilter, Es el filtro de Nombre propio, siguiendo la regla descrita para el campo Nombre analizado arriba.

  • CountFilter, Filtro de Cantidades, customizable para reflejar rangos de valores y sus unidades de medida, así como tratamiento especial para algunos valores.

  • MoneyValueFilter, Filtro de valores monetarios, igualmente customizable para reflejar rangos de acuerdo a comportamientos pre-definidos para ciertos tipos de aplicaciones (tiendas virtuales, aplicaciones económico-financieras, etc.)

  • ForeignKeyFilter, Filtro de nomenclador, generalmente en las consultas se referencia a las tablas de nomenclador para extraer información referente al significado de las llaves, lo cual es aprovechado por el filtro para establecer al igual que el CompleteStringFilter un listado de ocurrencias ordenado descendentemente propicio para mostrar los tipos de registro listados en el conjunto.

  • IntegerMeaningStringFilter, Es un filtro diseñado para ser usado en los campos donde se tienen valores enteros que tienen un significado especial no relacionado con alguna otra tabla de referencia y cuyo significado es codificado en las aplicaciones de forma fija sin que el conjunto de valores posible puede extenderse con esto. Generalmente usado para designar campos con conjuntos de valores pequeños (Ej. Sexo, 0 = Masculino, 1 = Femenino) que por cuestiones de ahorro de espacio se designan con números.

  • BitFilter, Filtro de valores Verdadero o Falso, con posibilidad de customizar los textos de los filtros de acuerdo al significado del campo.

  • DateFilter, Filtro de fechas, crea rangos a partir de la fecha actual, customizable y pre-diseñado también para mostrar rangos nombrados de acuerdo a la cantidad de días desde la fecha actual (Ej. Hoy, Ayer, Hace 1 Semana, etc.)

En el SIG es posible inclusive a través del sistema de librerías compartidas, escribir sus propias definiciones de filtros y compartirlos de un modulo a otro sin necesidad de reescribir código innecesariamente.

Mostrado como ejemplo tenemos el código fuente del filtro incluido en el sistema CompleteStringFilter para su análisis.

No hay comentarios:

Datos personales

Licenciado en Ciencias de la Computacion, Facultad de Matematicas y Computacion, Universidad de la Habana, 2004. Telefono: 45-3619, Cel: 282-8661