About Specifying Functional Groups for Application Roles in Data Filters
When a semantic model object such as a logical fact table is accessed by multiple application roles with different levels of access, you can specify functional groups to prevent application roles from viewing data restricted from view by that specific application role.
When there are no functional groups defined, all the security filters applied
to a given table, regardless of the associated role, and are combined using the
OR operator. Using the OR operator works in most
cases because a role can view a union of all the rows selected by the security filters.
For example, consider the following filters:
Role A is assigned the filter, Product = 'Camera'
Role B is assigned the filter, Product = 'Monitor'
If an application role is given Role A and Role B, then the role can view data for both the Camera and Monitor products.
When the two security filters from the same table are combined in the query,
the filter conditions are combined using the OR operator, this is
appropriate for most security filters defined on dimension tables, for example:
Product = 'Camera' OR Product = 'Monitor'
Using functional groups is necessary when securing a single fact table, using data filters from different dimensions.
In this example, a fact table is secured using the following filters:
Role A is assigned the filter, Product = 'Camera'
Role B is assigned the filter, Product = 'Monitor'
Role C is assigned the filter, Region = 'Southwest'
If you don't use functional groups, a user with roles A, B, and C would have
all three filter conditions combined in the query using the OR
operator, for example:
(Product = 'Camera' OR Product = 'Monitor' OR Region =
'Southwest')
Combining the results of Role A, B, and C doesn't make sense because Product
and Region are independent dimensions. Combining data filters from different dimensions
using OR operator provides the application roles access to more data
values than the roles should view.
In this example, the application role can see data for all products within the Southwest region as well as data for all regions within the Camera and Monitor products.
To get the expected behavior, that is allowing the application role to see
data only for the Camera and Monitor products within the Southwest region, you need to
change the filter to combine the product filters with the region filter using the
AND operator, for example:
(Product = 'Camera' OR Product = 'Monitor') AND (Region =
'Southwest')
To achieve this using functional groups, assign the security filters to functional groups as follows:
Role A is assigned the filter, Product = 'Camera' with functional
group "Product"
Role B is assigned the filter, Product = 'Monitor' with functional
group "Product"
Role C is assigned the filter, Region = 'Southwest' with functional
group "Region"
All the filters in the same functional group are combined using the
OR operator and all sets of filters in different functional groups
are combined using the AND operator. By choosing the functional groups
associated with each security filter, you can control how the filters are combined using
the OR and AND operators.