En este apartado vamos a hablar de las formas de establecer seguridad a métricas de un cubo multidimensional, los problemas que aparecen y sus soluciones.

Formas de establecer seguridad a métricas SSAS

Para controlar la seguridad de los objetos, operaciones y datos de Analysis Services se utilizan roles (grupos de usuarios). Los usuarios se pueden añadir o quitar de los roles y para esos roles se determinan unos permisos.

La información relativa a los roles que proporciona Microsoft se encuentra en el siguiente enlace:

https://docs.microsoft.com/en-us/sql/analysis-services/multidimensional-models/roles-and-permissions-analysis-services

Los métodos existentes para establecer seguridad a las métricas de un cubo que se encuentran en la documentación oficial son las siguientes:

  • Acceso personalizado a datos de una dimensión (dimension data)
  • Acceso personalizado a los datos de las celdas (Cell Data)

Acceso personalizado para una dimension

Con este procedimiento se puede denegar el acceso a una medida física y visible. La medida no aparecerá al acceder al cubo.

Si protegemos una medida física visible estaremos ocultando la información de todos los cálculos que procedan de esta, es decir, todas las medidas calculadas donde aparezca van a salir sin valor cuando el usuario sin acceso explore el cubo.

Los pasos son los siguientes:

  1. Seleccionar el rol al que se le va a establecer la seguridad
  2. Acceder a las propiedades del rol.
  3. Acceder a la pestaña ‘Dimension Data’, en el desplegable seleccionar ‘Measures Dimension’.1 - Acceso personalizado para una dimension4. Aparecen una serie de medidas del cubo con un recuadro para marcar, desmarcar aquellas que no queramos que vean los usuarios que pertenecen al rol.

2 - Acceso personalizado para una dimension

Por ejemplo, ocultamos’ Internet Order Quantity’, si entramos un rol con permisos podemos ver el valor.

3 - Acceso personalizado para una dimension

Si accedemos al cubo con el rol la medida ya no aparece.4 - Acceso personalizado para una dimension

Si queremos mostrar unas medidas calculadas y otras no que procedan de la física, habría que hacer lo siguiente:

  1. Crear un duplicado de la medida física con otro nombre
  2. Poner no visible la que hemos creado nueva.
  3. Mantener visible la original.
  4. Modificar las medidas calculadas que no se quieren proteger para que usen la medida renombrada no visible.
  5. Mantener las medidas calculadas a las que se les quiera aplicar la seguridad usando la medida original física visible.
  6. Establecer la seguridad con se ha explicado anteriormente, únicamente a la medida física visible.

Hay más información en el siguiente enlace:

https://docs.microsoft.com/en-us/sql/analysis-services/multidimensional-models/grant-custom-access-to-dimension-data-analysis-services

Acceso personalizado a los datos de las celdas

Este procedimiento se utiliza para permitir o denegar el acceso a los datos de un cubo a un determinado rol. La medida puede ser física o calculada.

La medida sigue apareciendo al acceder al cubo, pero no tiene valor.

Si protegemos una medida de esta manera estaremos ocultando la información de todos los cálculos que procedan de esta, es decir, todas las medidas calculadas donde aparezca van a salir sin valor cuando el usuario sin acceso a ella explore el cubo.

Esta forma de ocultación es útil cuando se quiere impedir el acceso a una medida calculada y no a la física de la que procede.

Los pasos son los siguientes:

  1. Acceder a la pestaña ‘Cell Data’ de las propiedades del rol.
  2. Marcar ‘Enable read permissions
  3. En la casilla ‘Allow Reading of cube content’ escribir ‘(NOT Measures.CurrentMember IS nombre_de_la_medida)’ para la medida que queremos ocultar1 - Acceso personalizado a los datos de las celdas4. Con esto, estaríamos haciendo que la medida Internet Gross Profit salga sin valor cuando accedemos al cubo con el rol

Hay más información en el siguiente enlace:

https://docs.microsoft.com/en-us/sql/analysis-services/multidimensional-models/grant-custom-access-to-cell-data-analysis-services

Problemas

Cuando la ocultación se realiza con ‘Cell Data’ (en el apartado Acceso personalizado a los datos de las celdas), las métricas con ‘distinct count’ aparecen sin valor cuando se usan varios filtros.

Por ejemplo, accedemos al cubo con el rol y mostramos la medida llamada ‘Customer Count’ que se calcula con distinct count de Clientes, tiene valor.

1 - Problemas

Añadimos dos filtros, como ‘United Kingdom’ y ‘United States’ de la geografía del cliente y ya no aparece valor

2 - Problemas

Soluciones

Hay que crear las medidas calculadas como físicas y después alterar su valor con un ‘scope’.

Por ejemplo, para ocultar el cálculo Gross Profit Margin habría que seguir los pasos siguientes:

  1. Renombrar el cálculo como ‘[Measures].[Gross Profit Margin_hidden]’.
  2. Crear una medida física en el cubo con valor nulo y con el nombre ‘Gross Profit Margin’.
  3. Crear un set ‘GrossProfitMarginSet’ que emplee la función ‘iserror’ para detectar si se produce error, debido a que el script mdx se ejecuta después de que la seguridad sea aplicada y el scope falla, de esta forma controlamos el error. Si no se hace este paso, y accedemos al cubo con un rol que no tiene permiso aparecerá un error, indicando que la instrucción “end scope” no corresponde con “scope”.
Create hidden Set GrossProfitMarginSet As

iif(iserror(strtomember("[Measures].[Gross Profit Margin]")), {},

{[Measures].[Gross Profit Margin]});
  1. Asignar el valor del cálculo con el scope.
Scope(GrossProfitMarginSet);

    This=[Measures].[Gross Profit Margin_hidden];

End scope;
  1. Ocultar la medida en la pestaña de propiedades del rol “Dimension Data”, con los mismos pasos que se explicaron en el punto ‘Acceso personalizado para una dimension (dimension data)’.
  2. El código mdx queda de la siguiente manera:
Create Member CurrentCube.[Measures].[Gross Profit Margin_hidden]

As (

      [Measures].[Sales Amount]

      -

      [Measures].[Total Product Cost]

    )

    /

    [Measures].[Sales Amount],

Format_String = "Percent",VISIBLE = 0,

Associated_Measure_Group = 'Sales Summary',

Non_Empty_Behavior =

 {

   [Measures].[Sales Amount],

   [Measures].[Total Product Cost]

 };     



Create hidden Set GrossProfitMarginSet As

iif(iserror(strtomember("[Measures].[Gross Profit Margin]")), {},

{[Measures].[Gross Profit Margin]});



Scope(GrossProfitMarginSet);

    This=[Measures].[Gross Profit Margin_hidden];

End scope;

 

0 Shares:
Deja una respuesta

Tu dirección de correo electrónico no será publicada.

You May Also Like