Ayuda sobre productos BOLD:

Informes de tabla dinámica

Página:
< Volver

ATENCIÓN: El siguiente contenido es de uso avanzado y su utilización puede ocasionar daños irreparables en la configuración del sistema

Introducción

La principal diferencia de los informes de tabla dinámica (EnumAdvancedReport) respecto de los habituales es que son capaces de agregar los datos directamente en el servidor y por tanto pueden procesar un número muy superior de filas sin los problemas generados por la descarga de grandes documentos en el cliente. Tan sólo los datos agregados tras efectuar algún tipo de suma o cálculo es lo que realmente se retorna al cliente. De esta forma se evita el problema que suponía enviar un gran volúmen de datos al cliente para mostrar totales, subtotales, etc…

Además, mediante estos informes es posible partir de un informe ya existente y crear una nueva instancia del mismo simplificando su número de columnas, cambiando la ordenación por defecto, etc… de forma que siempre aparezca y se genere tal como nos interesa sin necesidad de ninguna acción adicional por parte del usuario o usuaria.

Antecedentes

Los informes en BOLD se pueden definir ahora de dos formas: en el querycustom.xml partiendo de un informe “nativo” o bien generando un objeto de tipo BIDatacubeModel. Estos objetos contienen una definición similar a la que existía hasta ahora en el querycustom pero con la ventaja de que se pueden construir dinámicamente mientras la aplicación está en ejecución y son más fáciles de actualizar (por ahora sólo vía importación).

Además estos objetos ahora se gestionan de la misma forma que el resto de objetos del sistema: tienen un maestro, control de versiones, import/export, etc… Y los resultados de los informes se pueden almacenar de forma persistente como el resto.

Descripción

Los informes de tabla dinámica pueden funcionar de forma muy similar a como se configuran las tablas dinámicas en una hoja de cálculo:

  1. Se parte de una tabla base virtual interna en memoria donde residen los datos a agregar
  2. Se definen las claves de agregación
  3. Se define la función de agregación
  4. Se efectúa el cálculo de la tabla resultante
  5. Sobre los datos agregados es posible extraer la información que los originó fácilmente (tipo drill-down)

Por otro lado, existen algunos aspectos diferentes:

Origen de los datos a agregar

La tabla virtual de los datos a agregar puede tener diferentes orígenes y puede que no exista realmente como tal sino que los datos origen podrían ser:

  • un iterador sobre los objetos en memoria del sistema (ej.: las tareas del plan en un intervalo, los contratos del plan, las personas empleadas en el plan, ver las funciones de iterador)
  • los resultados de un informe preexistente base (por ejemplo uno de estos).
  • el resultado de una consulta SQL (que no es más que otro tipo de informe).

Además es posible anexar nuevos campos calculados a los campos de la tabla origen (al estilo de los ExtAttribute). Estas columnas adicionales se pueden utilizar luego como variables en el siguiente paso de agregación. Ver Input_Axis. También es posible utilizar expresions BeforeExpression y AfterExpression para ejecutar ciertas acciones únicamente al inicio y al final del cálculo del informe.

Nota: El tipo de origen de los informes de tabla dinámica se especifica a través del atributo DataInputType. Los valores posibles son:

0: Sobre un informe estándar.

1: Sobre un informe SQL (Pendiente de implementar)

2: Sobre el iterador Iterator_Task_ForPlanTasks

3: Sobre el iterador IterBased_ByAccumulatedByNeedIncidence

4: Sobre el iterador Iterator_ByDay_ForPlanTasks

5: Sobre el iterador Iterator_TasksAndEmptyDays_ForPlanTasks

6: Sobre el iterador Iterator_ByDayAndEmptyDays_ForPlanTasks

Definición de las claves de agrupación o agregación de los datos

La agrupación de los datos se configura a lo largo de dos ejes: X e Y. Por ejemplo los datos se podrían obtener agregados/agrupados según [Año, Mes] y [Categoría, Actividad] de tal forma que se obtuviera el tiempo asignado correspondiente a cada presencia según dichas coordenadas. Otra configuración de ejemplo podría ser [Necesidad/Puesto] para obtener una relación de la última asignación efectuada en el intervalo de cálculo, etc…

La definición de las claves de agrupación de los datos se realiza de la misma forma que para las columnas calculadas de los informes evaluadas en el contexto de cada fila de datos de entrada y retornan el valor de coordenada que corresponde a esa fila de datos. Por ejemplo, si queremos agrupar por años y meses para determinar el año al que asignar los datos de una fila, la fórmula de una de las columnas de agrupación sería:

Year(TimePeriod.StartTime)

La evaluación sobre cada fila de datos de entrada de la función anterior podría generar una clave como la siguiente:

2009, 2010, 2011

Las variables disponibles dependerán del contexto generado por el objeto y los atributos calculados sobre la fila de datos de entrada.

Definición de la función de agregación

Es posible definir múltiples campos de agregación, pero todos ellos compartirán la misma clave de agregación. Por ejemplo podríamos acumular los tiempos de incidencia por mes y a la vez obtener las duraciones asignadas a una área en concreto.

Las funciones de agregación disponibles actualmente son:

  • Def. de usuario: (pendiente) Una expresión definida por la propia persona usuaria
  • Suma: suma el resultado de la evaluación de la dimensión de agregación al valor ya existente (para las claves de agregación actuales)
  • Max: selecciona el máximo entre el valor ya existente y el nuevo valor retornado por la expresión
  • Min: selecciona el mínimo
  • Contar: cuenta el nº de veces que la expresión es cierta

Alguns ejemplos de funciones de agregación posibles serían (recordar: la función se evalúa para cada fila de datos de entrada y su resultado se agrega sobre los cálculos sobre filas anteriores que cumplan la misma clave de agregación):

Contar el nº de incidencias que aparecen

TimePeriod.Incidence!=0

Definición en formato XML

Como cualquier objeto del sistema, un objeto informe de tabla dinámica también puede importarse a partir de un documento XML con un ejemplo clarificador.

Acceso a la lista de informes definidos

Se puede acceder a la lista de definiciones cargadas en el sistema desde el menú Maestros–>Informes de tabla dinámica

Lamentablemente no existe por el momento otra forma de editar las definiciones que no sea modificando manualmente la definición XML desde un editor de texto e importándola de nuevo.

Importar o actualizar una definición de informe de tabla dinámica

Cargando el fichero de definición XML desde el menú Integración–>Importar documento XML o desde el subsistema externo de integración BOLDXML.

Ejemplos

Algunos ejemplos de definiciones de informes de tabla dinámica genéricos que se pueden importar en la herramienta y que no dependen de ninguna parametrización específica se pueden descargar de la página Biblioteca de informes de tabla dinámica genéricos

Filtrado de datos de un informe de tabla dinámica

Estos informes disponen de dos secciones especiales para filtrar tareas o personas trabajadoras.

  • InputFilterByWorker: Expresión para filtrar qué profesionales quieres que se incluyan en el informe. El contexto es WorkerPlan.
  • InputFilter: Expresión para decidir que cajas/días se incluirán en el informe. El contexto es TaskContextObject.

Truco para paginar informes especiales

<InputFilterByWorker>
    <Expression>
        <![CDATA[
               IfElse(!IsInvalid(GetSessionVar("PAGINA")) AND !IsInvalid(GetSessionVar("PAGINASTOTALES")) , 
Mod(ContractWorker.Worker.ID,GetSessionVar("PAGINASTOTALES"))==GetSessionVar("PAGINA")-1 , true)
         ]]>
    </Expression>
     </InputFilterByWorker>

Ver también

TaskContextObject Para ver en los informes de iteradores de plan, sobre qué propiedades nos podemos apoyar en la etapa de agregación.

Was this article helpful?
0 out Of 5 Stars
5 Estrellas 0%
4 Estrellas 0%
3 Estrellas 0%
2 Estrellas 0%
1 Estrellas 0%
5
How can we improve this article?
How Can We Improve This Article?

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Contenido