none
Itemstyle - Contar elementos repetidos RRS feed

  • Pregunta

  • Hola, tengo un problemilla y no doy con la solución, tengo una lista que tiene un campo Comunidad Autónoma y un campo Ciudad y necesito hacer un conteo de cuántas veces aparece cada uno en toda la lista, algo así:

    Madrid (345)
      Madrid (300)
      Móstoles (40)
      Torrejón (5)
    Andalucía (600)
      Málaga (300)
      Jaén (120)
      Granada (80)
      Almería (100)

    ...

    ¿Hay algún sitio donde pueda ver funciones a utilizar u operaciones que pueda realizar con los datos? en SQL me sale directo con count y distinct y demás, pero para la XSLT le doy muchas vueltas y no consigo hacer lo que necesito.

    Gracias

    viernes, 19 de octubre de 2012 12:01

Respuestas

  • Si con esa opción no te vale dado las caracteristicas, puedes tener tres opciones:

    1. Una pegarte con el XSLT y mirar como funciona la funcion count(*) en el XSLT. Aqui tienes dos enlaces interesantes para ello:http://www.daniweb.com/software-development/xml-xslt-and-xpath/threads/237263/editing-xpath-count-function-in-sharepoint-dataview y http://our.umbraco.org/forum/developers/xslt/13316-How-to-get-number-of-items-in-for-each
    2. Añadiendo algo de codigo JavaScript para que te realice esta cuenta Como por ejemplo en este link http://www.mstechblogs.com/paul/xslt-and-jquery-samples.
    3. Desarrollando un WebPart en la que lances consultas SPQuery y obtengas la información que necesites.

    De las tres opciones creo que la opción mas sencilla y quizas mas rápida de implementar es utilizando el JavaScript.

    lunes, 22 de octubre de 2012 11:10

Todas las respuestas

  • Para hacer un conteo de elementos los puedes hacer directamente desde una vista de sharepoint , en la vista puedes agrupar los elementos que tienes y tambien puedes hacer diversas operaciones (cuenta,suma, media..)

    viernes, 19 de octubre de 2012 13:25
  • Ya, eso ya lo sé Adrián, así es como lo tengo actualmente en MOSS2007, pero tras hacer una migración a Sharepoint 2010 ese método no me vale porque la lista sobre la que se realiza la consulta tiene 15.000 elementos y no hay forma de visualizarlos sin aplicar indizaciones sobre los elementos y filtros varios, lo que me elimina resultados y no me permite sacar el conteo sobre el total de los elementos.
    lunes, 22 de octubre de 2012 8:04
  • Si con esa opción no te vale dado las caracteristicas, puedes tener tres opciones:

    1. Una pegarte con el XSLT y mirar como funciona la funcion count(*) en el XSLT. Aqui tienes dos enlaces interesantes para ello:http://www.daniweb.com/software-development/xml-xslt-and-xpath/threads/237263/editing-xpath-count-function-in-sharepoint-dataview y http://our.umbraco.org/forum/developers/xslt/13316-How-to-get-number-of-items-in-for-each
    2. Añadiendo algo de codigo JavaScript para que te realice esta cuenta Como por ejemplo en este link http://www.mstechblogs.com/paul/xslt-and-jquery-samples.
    3. Desarrollando un WebPart en la que lances consultas SPQuery y obtengas la información que necesites.

    De las tres opciones creo que la opción mas sencilla y quizas mas rápida de implementar es utilizando el JavaScript.

    lunes, 22 de octubre de 2012 11:10
  • He probado con varias de las opciones que me das (la de desarrollar un WebPart está descartada, me toca hacerlo con el CQWP sí o sí, nada de desarrollo) y no hay forma, comento cada una:

    1.- lo expuesto aquí: http://www.daniweb.com/software-development/xml-xslt-and-xpath/threads/237263/editing-xpath-count-function-in-sharepoint-dataview no me sirve porque no tengo un DataView y no consigo indicarle al XSL el valor a seleccionar en mi lista para hacer el conteo, y lo indicado aquí: http://our.umbraco.org/forum/developers/xslt/13316-How-to-get-number-of-items-in-for-each más de lo mismo, en ambas especifica algo del tipo:

    <xsl:variable name="itemsWhereSomeCondition" select="$items[condition='something']"/>

    pero no hay forma de hacer que el select coja el valor correcto (al menos yo no doy con ello),  le indico la propiedad que quiero que compare, pero la condición me falla, ya que son columnas de la lista y no tiene elementos dentro que poder referenciar.

    2.- en este ejemplo de JQuery no hay ninguna referencia a cómo contar valores, el único count que aparece es la referencia a una variable, que en este caso poco importa su valor, ya que no realiza operación alguna, solo es una comparación de su valor.

    Llevo horas buscando algo que me abra los ojos pero todo lo que encuentro de XSLT no me vale para aplicarlo sobre Sharepoint porque está usado sobre XML con una estructura muy clara de nodos de la que no se dispone en Sharepoint y por tanto no se puede usar de la misma manera.

    Habrá que seguir buscando.
    ¿Alguna otra idea?

    martes, 23 de octubre de 2012 10:37
  • Mira en este enlace que desarrolla en un CQWP un conteo del numero de respuestas de un foro que es algo semejante a lo que tu deseas hacer https://www.nothingbutsharepoint.com/sites/eusp/Pages/How-to-Configure-a-Custom-Item-Style-for-a-Discussion-Board-using-the-Content-Query-Web-Part.aspx

    martes, 23 de octubre de 2012 11:44
  • Mira en este enlace que desarrolla en un CQWP un conteo del numero de respuestas de un foro que es algo semejante a lo que tu deseas hacer https://www.nothingbutsharepoint.com/sites/eusp/Pages/How-to-Configure-a-Custom-Item-Style-for-a-Discussion-Board-using-the-Content-Query-Web-Part.aspx


    Gracias de nuevo Adrián, pero en ese caso hay "truco" ya que es el propio Sharepoint el que hace el recuento de Replies en los paneles de discusión y en este ejemplo lo que hace es coger el itemchildcount que recupera ese valor que aparece en la lista ya calculado, por lo que tampoco sirve para hacer un cálculo del número de apariciones de un elemento en una lista.
    martes, 23 de octubre de 2012 13:33
  • Se me acaban las ideas ....

    No puedes utilizar nada de desarrollo? En caso de poder utilizar desarrollo y por el tema de hacer una respuesta optima de tiempo. Yo lo que me crearia una vista con dos campos Nombre de la Ciudad y uno numerico que fuera Cuenta, yo lo que haria es me crearia una función que me rellenase la vista y posteriormente utilizando eventreceiver sobre la lista madre actualizar estos indicadores. Con la tabla ya creada es muy sencillito utilizarla en un CQWP.

    martes, 23 de octubre de 2012 13:48
  • Ya, te entiendo perfectamente Adrián, así llevo yo varios días y es frustrante.

    No puedo usar nada de nada de desarrollo, bastante he conseguido ya con que me dejen tocar el itemstyle y meter mano ahí con lo que pueda, pero no hay licencia de VisualStudio para mi puesto y estoy limitado en ese aspecto.

    El gran problema que tengo es el número de elemento de las listas que manejo, tienen tantos elementos que es imposible hacer una vista sobre ellas, la restricción de 5000 elementos de Sharepoint 2010 no permite recuperarlos.

    Al final todo este lío no es más que para recrear lo que tenemos montado en MOSS2007, que es simplemente una vista sobre la lista con 2 niveles de agrupamiento por los campos que he expuesto y en MOSS se tardan unos 10 segundos en configurarlo mientras que en Sharepoint 2010 llevo varios días dándome una y otra vez contra un muro, y encima ahora explícale al usuario final que el producto se ha migrado para mejorar, pero que a cambio no puede ver las cosas de la manera tan clara y simple como las ha visto hasta ahora, es bastante incomprensible.

    Tengo google que me va a echar humo...

    Sigo abierto a cualquier idea que me pueda solucionar la papeleta!!!

    martes, 23 de octubre de 2012 14:05
  • Has probado a aumentar el numero de elementos? Lo digo por el echo de que quizas 15.000 no ralentiza en exceso la base de datos, el tope para usuarios administradores es de 20.000, pero se supone que es para algo puntual.... Si tienes un entorno de Pruebas quizas puedas valorarlo hay.

    martes, 23 de octubre de 2012 14:25
  • Sí, hemos probado y se empieza a notar la ralentización, pero el mayor problema no es ese, sino que es una lista que se ha empezado a usar hace pocos meses y tiene una estimación de 30.000 entradas al año, así que el crecimiento es enorme y es inabarcable por una vista normal de Sharepoint por desgracia para mi.

    Además el problema es que no es solo 1, sino que se trata de 5 listas, por lo que el número de elementos es enorme para lo que soporta Sharepoint.

    martes, 23 de octubre de 2012 14:43
  • Yo creo que la solución pasa inevitable por un desarrollo y por un analisis de la Arquitectura de nuevo, porque sino es inviable la solución que estais intentando desarrollar. 

    Por si te sirve de utilidad en sitios donde hemos tenido que montar un Sharepoint donde la estimación de entradas es mayor de lo soportado por Sharepoint una opción es utilizar las tablas de SQLServer para ello y a traves de desarrollos a medida mostrar la información que se solicita... tener las tablas maestras en listas de sharepoint y los detalles en SQLServer, pero bueno eso ya es otra historia y dependiendo de las especificaciones del proyecto y mas factores que yo ahora mismo desconozco.

    martes, 23 de octubre de 2012 14:49
  • Tras infructuosas pruebas opté por cambiar de derroteros y tratar de montar un DataView, en este caso sí que he conseguido con Designer maquetarlo tal como quiero que me muestre los datos y he obtenido el doble nivel de agrupación y el conteo de los elementos de cada uno de los grupos y subgrupos, pero al enlazarlo con la lista "buena" he comprobado que también persiste la limitación de 5000 elementos para mi desgracia.

    He intentado trasladar el XSL del DataView al CQWP, pero tampoco he sido capaz de hacerlo
    ¿Hay alguna forma de pasar toda la estructura de un DataView a un CQWP para que funcione de igual manera?

    Por desgracia Adrián, siguen cerrados en banda con el tema de desarrollo y es una opción que no contemplan, cuestiones de proyecto.

    viernes, 26 de octubre de 2012 10:51
  • Veo muy dificil que lo que estes intentando conseguir poner los estilos en un CQWP de la misma forma en la que lo hace en un DataView, por la forma en la que se agrupan que es bastante distinta en un sitio y en otro. Quizas tocando algo del fichero Header, pero lo veo muy mal, yo aunque no soy muy habilidoso para el tema de estilos no he conseguido hacer una suma de registros agrupados :=

    Pero antes de esto creo que te tienes que pelear con el tema de la limitación porque lo que estan limitadas son las consultas de mas de 5.000 registros para usuarios no administradores, con lo que entiendo (y sino que los MVP me corrijan) que en un CQWP vas a tener el mismo tipo de problemas.

    Saludos

    viernes, 26 de octubre de 2012 11:26
  • Perdona que te corrija yo, que no soy MVP ni nada parecido ;) pero ya he hecho la prueba con el CQWP de recuperar registros de esa lista que actualmente tiene 10.000 elementos con un usuario que no es administrador y lo hace "perfectamente", bien es cierto que en la consulta solo he recuperado un par de campos pero los trae todos sin demasiados problemas (salvo que el IE se queda tostado y se tarda siglos en hacer que reconozca cualquier acción del ratón)
    lunes, 29 de octubre de 2012 7:20
  • Muchas gracias RedHeart por la aclaración pensaba que era la limitación de cualquier consulta sobre una lista  y hay estaba incluido el CQWP.
    lunes, 29 de octubre de 2012 8:21
  • Hola,

    Cuidadín con las consultas, si eres usuario administrador el límite no está en 5.000 sino en 20.000....habría que revisar también que umbrales tenéis para la limitación de recursos. El límite de 5.000 para usuarios no administradores aplica a cualquier tipo de consulta, salvo que dichos umbrales se cambien.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    lunes, 29 de octubre de 2012 9:01
  • Hola,

    Cuidadín con las consultas, si eres usuario administrador el límite no está en 5.000 sino en 20.000....habría que revisar también que umbrales tenéis para la limitación de recursos. El límite de 5.000 para usuarios no administradores aplica a cualquier tipo de consulta, salvo que dichos umbrales se cambien.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    Acabo de repetir la prueba Juan Carlos, porque me has dejado con la duda, pero con un usuario no administrador, puedo hacer una consulta con un CQWP de una lista que tiene exactamente 9876 elementos y efectivamente los recupera absolutamente todos (no he traído todo los campos, solo un par de ellos, pero para el caso es lo mismo consultar un campo que 20 si se trae todos los valores).

    Desconozco si internamente la consulta la realiza con las limitaciones del administrador y si superamos esos 20.000 registros fallará la consulta, pero a día de hoy con casi 10.000 sí que la hace. Eso sí, como decía antes, el rendimiento del explorer es penoso y es un infierno hasta pulsar en acciones del sitio o en modificar web part para elegir otra fuente de datos.

    Un saludo

    lunes, 29 de octubre de 2012 10:10
  • Hola,

    Bueno, nosotros te hemos avisado ;-)...una consulta que devuelva en una misma vista más de 5.000 elementos es prohibida en SharePoint ya que ocasiona los problemas de rendimiento qué estás viendo y que penalizan la resto de usuarios. ¿Solución? Paginar los resultados de manera que se muestre un número de elementos por página razonable.

    Saludos


    ------------------------------------------------------------
    Juan Carlos González Martín MVP de SharePoint Server
    Director revista CompartiMOSS: http://www.gavd.net/servers/compartimoss/compartimoss_main.aspx
    Blog: http://geeks.ms/blogs/ciin
    Twitter: @jcgm1978
    ------------------------------------------------------------

    lunes, 29 de octubre de 2012 10:39
  • Para páginar el CQWP puedes mirar este ejemplo que es muy valido y esta muy bien explicado  http://blog.mastykarz.nl/paging-content-query-web-part/
    lunes, 29 de octubre de 2012 10:46
  • Ya, ya, si lo entiendo perfectamente, de hecho he podido comprobar "en directo" cómo el IE se queda muerto al recuperar tantos registros y precisamente por eso he descartado mostrar todos en pantalla y solo sacar lo que especificaba en mi primer mensaje, un listado de CCAA y ciudades con un conteo de cuántos elementos tiene cada uno, para no tener que mostrar el detalle de todos los elementos, con eso lo que consigo es mostrar en pantalla datos estadísticos de todos los elementos almacenados en la lista pero solo mostrando unos 200 elementos, lo que no me saturará el explorer.

    Pero sigo sin conseguir el segundo nivel de agrupamiento ni el conteo de elementos, así que continúo pegándome con ello.

    Gracias a ambos.

    martes, 30 de octubre de 2012 8:20