Creación de filtros

Puede crear un filtro para cada conjunto de restricciones de acceso que necesite colocar en los valores de la base de datos de Essbase. No es necesario crear filtros independientes para los usuarios con las mismas necesidades de acceso. Después de crear un filtro, puede asignarlo a varios usuarios o grupos de usuarios.

Note:

Si utiliza una función de cálculo que devuelve un juego de miembros, como hijos o descendientes, y se evalúa como un juego vacío, el filtro de seguridad no se crea. Se escribe un error en el log de la aplicación que indica que la definición de región se ha evaluado en un juego vacío.

Antes de crear un filtro, realice las siguientes acciones:

  • Conéctese al servidor y seleccione la base de datos asociada al filtro.

  • Compruebe las reglas de nomenclatura para los filtros en Límites.

Consulte Creación de filtros.

Para crear un filtro, también puede utilizar la sentencia crear filtro MaxL.

Filtrado de Miembros frente a Filtrado de Combinaciones de Miembros

El acceso a los valores de la base de datos de Essbase se puede controlar filtrando miembros enteros o filtrando combinaciones de miembros. El filtrado de miembros por separado afecta a segmentos completos de datos para esos miembros. El filtrado de combinaciones de miembros afecta a los datos en las intersecciones de miembros.

Figura 30-1 Cómo afectan los filtros a las relaciones AND/OR de datos


En esta imagen se muestran dos cubos: el cubo izquierdo ilustra el impacto de las relaciones OR; el cubo derecho ilustra el impacto de las relaciones AND.

Note:

El filtrado de combinaciones de miembros (relación AND) no se aplica a metaread. Metaread filtra cada miembro por separado (relación OR).

Filtrar miembros por separado

Para filtrar todos los datos de uno o más miembros de esquema de Essbase, defina el acceso para cada miembro en su propia fila. Las definiciones de filtro en filas separadas de un filtro se tratan con una relación de quirófano.

Por ejemplo, para bloquear el acceso a Sales o Jan, supongamos que el usuario KSands tiene asignado el siguiente filtro:

  • Acceso: Ninguno. Especificación del miembro: Ventas.

  • Acceso: Ninguno. Especificaciones del miembro: Jan.

La próxima vez que el usuario KSands se conecte a Sample Basic, su vista de hoja de cálculo del margen de beneficio para el trimestre 1 muestra que no tiene acceso a los valores de datos para el miembro Sales o el miembro Jan, que están marcados con #NOACCESS. Todos los datos de Ventas se bloquean de la vista, así como todos los datos de enero, dentro y fuera del miembro de Ventas. Se dispone de datos sobre el costo de los productos vendidos (costo de los productos vendidos), un hermano de ventas y un hijo de margen, a excepción del costo de los productos vendidos para enero.

Figura 30-2 Resultados del bloqueo de filtro de acceso a ventas o enero


En esta imagen se muestra una hoja de cálculo en la que las celdas bloqueadas por los filtros se marcan con #NOACCESS.

Filtrar combinaciones de miembros

Para filtrar datos para combinaciones de miembros de Essbase, defina el acceso para cada combinación de miembros mediante una fila en el Editor de filtros. En las definiciones de filtro, dos juegos de miembros separados por una coma se tratan como la unión de esos dos juegos de miembros (una relación AND).

Por ejemplo, supongamos que al usuario RChin se le asigna el siguiente filtro: Acceso: Ninguno. Especificaciones del miembro: Sales, Jan.

La próxima vez que el usuario RChin se conecte a Sample Basic, su vista de hoja de cálculo del margen de beneficio para el trimestre 1 muestra que no tiene acceso al valor de datos en la intersección de los miembros Sales y Jan, que está marcada con #NoAccess. Los datos de ventas de enero están bloqueados. Sin embargo, los datos de ventas de otros meses están disponibles y los datos no de ventas de enero están disponibles.

Figura 30-3 Resultados del bloqueo de filtro de acceso a las ventas, enero


En esta imagen se muestra una hoja de cálculo en la que los datos de ventas de enero están bloqueados para el usuario.

Filtro con variables de sustitución

Las variables de sustitución de Essbase permiten gestionar información que cambia con regularidad. Cada variable tiene asignado un nombre y un valor. Un gestor de base de datos puede cambiar el valor en cualquier momento. Cuando se especifica una variable de sustitución en un filtro, se aplica el valor en el momento en que se accede a los datos.

Por ejemplo, si desea que un grupo de usuarios vea datos sólo para el mes actual, puede configurar una variable de sustitución denominada CurMonth y definir un filtro (MonthlyAccess) en el que especifique el acceso, utilizando &CurMonth para el nombre de miembro. El uso de un ampersand (&) al principio de una especificación lo identifica como una variable de sustitución en lugar de un nombre de miembro para Essbase. Asigne el filtro MonthlyAccess a los usuarios adecuados.

Cada mes, solo tiene que cambiar el valor de la variable de sustitución CurMonth por el nombre de miembro para el mes actual, como Jan, Feb, etc. El nuevo valor se aplicará a todos los usuarios asignados.

Consulte Implantación de variables para cambiar la información.

Filtro con funciones de atributo

Puede utilizar filtros para restringir el acceso a los datos de Essbase para los miembros base que comparten un atributo concreto. Para filtrar datos para miembros con atributos específicos definidos en una dimensión de atributo, utilice el miembro de atributo en combinación con la función @ATTRIBUTE o la función @WITHATTR.

Note:

@@ATTRIBUTE y @WITHATTR son funciones de juego de miembros. La mayoría de las funciones de juego de miembros se pueden utilizar en definiciones de filtro.

Por ejemplo, supongamos que el usuario PJones tiene asignado este filtro: Acceso: Ninguno. Especificación de miembro: @ATTRIBUTE("Caffeinated_False").

La próxima vez que el usuario PJones se conecte a Sample Basic, su vista de hoja de cálculo de las ventas de cola del primer trimestre en California muestra que no tiene acceso a los valores de datos para ningún miembro de dimensión base asociado a Caffeinated_False. Los datos de ventas de Caffeine Free Cola están bloqueados. Tenga en cuenta que Caffeine Free Cola es un miembro base y Caffeinated_False es un miembro asociado de la dimensión de atributo Caffeinated (no se muestra en la vista de la hoja de cálculo).

Figura 30-4 Resultados del bloqueo de filtro de acceso a productos sin cafeína


Esta imagen muestra una hoja de cálculo en la que los datos de ventas de Caffeine Free Cola están bloqueados para el usuario.

Filtros de metadatos

El filtrado de metadatos proporciona un filtrado de datos y una capa adicional de seguridad. Con el filtrado de metadatos, un administrador de Essbase puede eliminar miembros de esquema de la vista de un usuario, proporcionando acceso solo a aquellos miembros que sean de interés para el usuario.

Cuando se utiliza un filtro para aplicar el permiso MetaRead a un miembro:

  1. Los datos de todos los ascendientes de ese miembro están ocultos en la vista del usuario de filtro.

  2. Los datos y metadatos (nombres de miembros) de todos los hermanos de ese miembro están ocultos en la vista del usuario de filtro.

Filtros dinámicos

Puede crear filtros dinámicos de seguridad de Essbase basados en datos externos de origen para reducir el número de definiciones de filtro necesarias. Esta acción se realiza mediante el uso de la sintaxis para la definición del filtro dinámico, incluido el método @datasourceLookup y las variables $LoginUser y $LoginGroup.

Note:

Los filtros dinámicos soportan funciones SQL como LOWER, UPPER y CAST, incluidas las expresiones anidadas. Puede utilizar estas funciones directamente con las funciones de conjunto de miembros para crear definiciones de filtro de acceso más flexibles y precisas.

Sintaxis de filtro dinámico

Utilice la sintaxis de filtro dinámico para crear filtros dinámicos que pueda asignar a varios usuarios y grupos.

Las filas del filtro pueden contener los siguientes elementos como parte de su definición, además de las expresiones de miembro.

$loginuser

Esta variable almacena el valor del usuario actual con sesión iniciada en tiempo de ejecución. Puede utilizarse en combinación con el método @datasourcelookup.

$logingroup

Esta variable almacena el valor de todos los grupos a los que pertenece el usuario conectado actualmente. Incluye grupos directos e indirectos. Si se utiliza en combinación con el método @datasourcelookup, cada grupo se busca de manera individual en el origen de datos.

@datasourcelookup

Este método recupera los registros de un origen de datos.

Sintaxis

@datasourcelookup (dataSourceName, columnName, columnValue, returnColumnName)
parámetro Descripción
dataSourceName

Nombre del origen de datos externo definido en Essbase. Para un origen de datos a nivel de aplicación, agregue al nombre un prefijo con el nombre de la aplicación y un punto.

columnName

Nombre de la columna de origen de datos para buscar un columnValue determinado.

columnValue

Valor que buscar en columnName.

returnColumnName

Nombre de la columna de origen de datos desde la que devolver una lista de valores.

Note:

Los nombres de columna de origen de datos no deben utilizar palabras reservadas SQL como USER, GROUP o ROLE. El uso de palabras reservadas puede provocar errores de análisis SQL o un comportamiento de filtro inesperado.

Descripción

Una llamada de @datasourcelookup equivale a la siguiente consulta de SQL:

select returnColumnName from dataSourceName where columnName=columnValue

@datasourcelookup busca el origen de datos determinado y el registro en los que columnName contenga columnValue. Si especifica columnValue como $loginuser, este método buscará registros en los que el método columnName contenga el nombre del usuario actualmente conectado.

Essbase forma la fila de definición de filtro combinando los elementos de la lista en una cadena separada por comas. Si algún registro contiene caracteres especiales, espacios o solo números, aparecerá entre comillas.

Note:

El parámetro @options se puede utilizar para controlar el comportamiento de los fallos de consulta. Cuando estrictoLookup=true, los fallos de consulta se tratan como errores fatales y no se devuelve ningún resultado de filtro.

Ejemplos

Indique los parámetros entre comillas.

La siguiente llamada busca un origen de datos global y devuelve una lista de nombres de almacén en los que aparece Mary como gestor de almacén.

@datasourceLookup("StoreManagersDS","STOREMANAGER","Mary","STORE")

La siguiente llamada busca un origen de datos a nivel de aplicación y devuelve una lista de nombres de almacén en los que el usuario con sesión iniciada actualmente aparece como gestor de almacén.

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")

La siguiente llamada busca un origen de datos a nivel de aplicación y devuelve una lista de nombres de almacén en los que el departamento de tienda coincide con alguno de los grupos a los que pertenece el usuario conectado.

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","$logingroup","STORE")

Si el usuario conectado pertenece a 3 grupos, el método anterior @datasourcelookup devuelve todos los valores que coincidan para cada grupo.

En el siguiente ejemplo se utilizan funciones SQL dentro de una expresión de filtro dinámico.

@datasourceLookup("Sample.StoreManagersDS",LOWER(CAST("STOREMANAGER" AS VARCHAR(30))),LOWER("$loginuser"),"STORE")

En el ejemplo siguiente se realiza una evaluación sensible a mayúsculas/minúsculas mediante funciones de mayúsculas/minúsculas explícitas.

@datasourceLookup("Sample.StoreManagersDS",UPPER("STOREMANAGER"),UPPER("$loginuser"),"STORE")

En el siguiente ejemplo, se devuelven las tiendas que pertenecen al departamento de ventas o marketing.

@datasourceLookup("Sample.StoreManagersDS","STORE_DEPARTMENT","Sales","Marketing","STORE")

En el siguiente ejemplo se utiliza una función de juego de miembros con @datasourceLookup.

@DESCENDANTS(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE"))

En el siguiente ejemplo, se utilizan funciones de juego de miembros anidadas con una consulta de origen de datos.

@CHILDREN(@LSIBLING(@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE")))

En el siguiente ejemplo se utiliza un comportamiento de consulta estricto. Si la consulta falla, no se devuelve ningún resultado de filtro.

@datasourceLookup("Sample.StoreManagersDS","STOREMANAGER","$loginuser","STORE",@options(strictLookup=true))

Flujo de trabajo de creación de filtros dinámicos

Utilice el siguiente flujo de trabajo general para crear filtros dinámicos.

Este flujo de trabajo de filtros dinámicos asume que ya dispone de un cubo, así como de usuarios y grupos aprovisionados.

  1. Identifique un origen de datos, ya sea de archivos o relacional.
  2. Defina la conexión y el origen de datos en Essbase, tanto globalmente como a nivel de aplicación.
  3. Cree filtros en el nivel del cubo. Navegue hasta el cubo y seleccione Filtros.
  4. Defina la fila de filtro para cada filtro, utilizando la sintaxis del filtro dinámico para emplear la variable $loginuser, la variable $logingroup y la variable @datasourcelookup según sea necesario.
  5. Asigne los filtros a usuarios o grupos.
  6. Si ha asignado el filtro a un grupo, asigne el grupo a la aplicación que se va a filtrar. Vaya a la aplicación y seleccione Permisos.

Ejemplo de filtro dinámico

El siguiente filtro dinámico funciona con el cubo denominado Efficient.UserFilters, disponible en la galería como plantilla de ejemplo.


Filtro dinámico con tres filas que otorga acceso de metalectura al usuario con sesión iniciada.

Para aprender a crear y aplicar este filtro dinámico, descargue la plantilla del libro de trabajo, Efficient_Filters.xlsx, en la sección Técnico de la galería, y siga las instrucciones README en el libro de trabajo. La galería está disponible en la sección Archivos de la interfaz web de Essbase.