protected function excludeIneligibleRegions(CubeMetaData $cube, &$eligibleRegionNames, array $requestDimensions, $isExactMatchRequired)
 {
     // checking each request dimension
     foreach ($requestDimensions as $requestDimension) {
         $requestDimensionName = $requestDimension->dimensionName;
         $requestDimensionLevelName = $requestDimension->levelName;
         // checking each eligible region
         foreach ($eligibleRegionNames as $eligibleRegionNameIndex => $eligibleRegionName) {
             $eligibleRegion = $cube->regions->{$eligibleRegionName};
             $isRegionEligible = FALSE;
             // is the dimension present in the region?
             if (isset($eligibleRegion->dimensions->{$requestDimensionName})) {
                 $eligibleRegionDimension = $eligibleRegion->dimensions->{$requestDimensionName};
                 // if levels are defined we need to check if any aggregation is done on required level or any lower level
                 if (isset($eligibleRegionDimension->levels)) {
                     $dimension = $cube->findDimension($requestDimensionName);
                     if (isset($dimension)) {
                         $matchingLevelName = NULL;
                         foreach ($dimension->levels as $level) {
                             $levelName = $level->name;
                             if (isset($eligibleRegionDimension->levels->{$levelName})) {
                                 $matchingLevelName = $levelName;
                             }
                             if ($requestDimensionLevelName === $levelName) {
                                 if (isset($matchingLevelName)) {
                                     if ($isExactMatchRequired) {
                                         if ($requestDimensionLevelName === $matchingLevelName) {
                                             $isRegionEligible = TRUE;
                                         }
                                     } else {
                                         $isRegionEligible = TRUE;
                                     }
                                 }
                                 break;
                             }
                         }
                     }
                 } else {
                     $isRegionEligible = TRUE;
                 }
             }
             if (!$isRegionEligible) {
                 unset($eligibleRegionNames[$eligibleRegionNameIndex]);
             }
         }
     }
 }