필터 생성

Essbase 데이터베이스 값에 배치해야 하는 각 액세스 제한 세트에 대한 필터를 생성할 수 있습니다. 동일한 액세스 요구 사항이 있는 사용자에 대해 별도의 필터를 생성할 필요는 없습니다. 필터를 생성한 후 여러 사용자 또는 사용자 그룹에 지정할 수 있습니다.

주:

하위 또는 하위 멤버와 같은 멤버 세트를 반환하고 빈 세트로 평가되는 계산 함수를 사용하면 보안 필터가 생성되지 않습니다. 영역 정의가 빈 집합으로 평가되었다는 오류가 응용 프로그램 로그에 기록됩니다.

필터를 생성하기 전에 다음 작업을 수행합니다.

  • 서버에 연결하고 필터와 연관된 데이터베이스를 선택합니다.

  • Limits에서 필터에 대한 이름 지정 규칙을 확인합니다.

필터 생성을 참조하십시오.

필터를 생성하려면 필터 생성 MaxL 문을 사용할 수도 있습니다.

멤버 필터링과 멤버 조합 필터링 비교

Essbase 데이터베이스 값에 대한 액세스는 전체 멤버를 필터링하거나 멤버 조합을 필터링하여 제어할 수 있습니다. 멤버를 개별적으로 필터링하면 해당 멤버의 전체 데이터 조각에 영향을 줍니다. 멤버 조합을 필터링하면 멤버 교차의 데이터에 영향을 줍니다.

그림 30-1 필터가 데이터 및/또는 관계에 미치는 영향


이 이미지는 두 큐브를 보여줍니다. 왼쪽 큐브는 OR 관계의 영향을 나타내고 오른쪽 큐브는 AND 관계의 영향을 나타냅니다.

주:

멤버 조합(AND 관계)에 대한 필터링은 메타 리드에 적용되지 않습니다. Metaread는 각 멤버를 개별적으로 필터링합니다(OR 관계).

개별적으로 멤버 필터링

하나 이상의 Essbase 아웃라인 멤버에 대한 모든 데이터를 필터링하려면 해당 행의 각 멤버에 대한 액세스를 정의합니다. 필터의 별도 행에 있는 필터 정의는 OR 관계로 처리됩니다.

예를 들어, Sales 또는 Jan에 대한 액세스를 차단하려면 사용자 KSands에 다음 필터가 지정되어 있다고 가정합니다.

  • 액세스: 없음. 회원 사양 : 판매.

  • 액세스: 없음. 멤버 사양: Jan.

다음에 사용자 KSands가 Sample Basic에 연결하면 Qtr1의 수익률에 대한 스프레드시트 뷰에 Sales 멤버 또는 Jan 멤버의 데이터 값에 대한 액세스 권한이 없는 것으로 표시됩니다. 이 값은 #NOACCESS로 표시됩니다. Sales의 모든 데이터는 Sales 멤버 내부 및 외부에 있는 1월의 모든 데이터뿐만 아니라 보기에서 차단됩니다. 매출의 형제이자 마진의 하위인 COGS(매출 원가)에 대한 데이터는 1월 COGS를 제외하고 사용할 수 있습니다.

그림 30-2 판매 또는 Jan에 대한 필터 차단 액세스 결과


이 이미지는 필터에 의해 차단된 셀이 #NOACCESS로 표시된 스프레드시트를 보여줍니다.

멤버 조합 필터링

Essbase 멤버 조합에 대한 데이터를 필터링하려면 필터 편집기의 행을 사용하여 각 멤버 조합에 대한 액세스를 정의합니다. 필터 정의에서 쉼표로 구분된 두 멤버 세트는 해당 두 멤버 세트(AND 관계)의 합집합으로 처리됩니다.

예를 들어, 사용자 RChin에 Access: None 필터가 지정되어 있다고 가정합니다. 회원 사양: Sales, Jan.

다음에 사용자 RChin이 Sample Basic에 연결하면 Qtr1에 대한 수익 마진의 스프레드시트 뷰에 Sales 멤버와 Jan 멤버의 교차에 #NoAccess로 표시된 데이터 값에 대한 액세스 권한이 없음을 알 수 있습니다. 1월의 판매 데이터는 볼 수 없습니다. 그러나 다른 월의 Sales 데이터를 사용할 수 있으며 1월의 비Sales 데이터를 사용할 수 있습니다.

그림 30-3 판매에 대한 필터 차단 액세스 결과, Jan


이 이미지는 Jan에 대한 Sales 데이터가 사용자에 대해 차단된 스프레드시트를 보여줍니다.

대체 변수를 사용하여 필터링

Essbase 대체 변수를 사용하면 정기적으로 변경되는 정보를 관리할 수 있습니다. 각 변수에는 할당된 이름과 값이 있습니다. Database Manager는 언제든지 값을 변경할 수 있습니다. 필터에 대체 변수가 지정된 경우 데이터에 액세스할 때의 값이 적용됩니다.

예를 들어, 사용자 그룹이 현재 월의 데이터만 보도록 하려면 CurMonth라는 대체 변수를 설정하고 멤버 이름에 &CurMonth를 사용하여 액세스를 지정하는 필터(MonthlyAccess)를 정의할 수 있습니다. 사양의 시작 부분에 앰퍼샌드(&)를 사용하면 Essbase에 대한 멤버 이름 대신 대체 변수로 식별됩니다. MonthlyAccess 필터를 적절한 사용자에게 지정합니다.

매월 CurMonth 대체 변수의 값을 현재 월의 멤버 이름(예: Jan, Feb 등)으로만 변경해야 합니다. 새 값은 할당된 모든 사용자에게 적용됩니다.

정보 변경을 위한 변수 구현을 참조하십시오.

속성 함수로 필터링

필터를 사용하여 특정 속성을 공유하는 기본 멤버에 대한 Essbase 데이터에 대한 액세스를 제한할 수 있습니다. 속성 차원에 정의된 특정 속성이 있는 멤버에 대한 데이터를 필터링하려면 @ATTRIBUTE 함수 또는 @WITHATTR 함수와 함께 속성 멤버를 사용합니다.

주:

@@ATTRIBUTE@WITHATTR은 멤버 세트 함수입니다. 대부분의 멤버 세트 함수는 필터 정의에 사용할 수 있습니다.

예를 들어, 사용자 PJones에 Access: None 필터가 지정되어 있다고 가정합니다. 회원 사양: @ATTRIBUTE("Caffeinated_False").

다음에 사용자 PJones가 Sample Basic에 연결하면 캘리포니아의 1분기 콜라 판매 스프레드시트 뷰에 Caffeinated_False와 연관된 기본 차원 멤버의 데이터 값에 액세스할 수 없습니다. 카페인 프리 콜라 (Caffeine Free Cola)의 판매 데이터는 볼 수 없습니다. Caffeine Free Cola는 기본 멤버이고 Caffeinated_False는 속성 차원 Caffeinated(스프레드시트 보기에는 표시되지 않음)의 연관된 멤버입니다.

그림 30-4 카페인 없는 제품에 대한 필터 차단 액세스 결과


이 이미지는 Caffeine Free Cola에 대한 Sales 데이터가 사용자에 대해 차단된 스프레드시트를 보여줍니다.

메타데이터 필터링

메타데이터 필터링은 데이터 필터링과 추가적인 보안 계층을 제공합니다. 메타데이터 필터링을 사용하면 Essbase 관리자가 사용자의 뷰에서 아웃라인 멤버를 제거하여 사용자에게 관심 있는 멤버에만 액세스할 수 있습니다.

필터가 멤버에 대한 MetaRead 권한을 적용하는 데 사용되는 경우:

  1. 해당 멤버의 모든 상위 멤버에 대한 데이터는 필터 사용자 뷰에서 숨겨집니다.

  2. 해당 멤버의 모든 동위 멤버에 대한 데이터 및 메타데이터(멤버 이름)는 필터 사용자 뷰에서 숨겨집니다.

동적 필터링

외부 소스 데이터를 기반으로 동적 Essbase 보안 필터를 생성하여 필요한 필터 정의 수를 줄일 수 있습니다. @datasourceLookup 메소드와 $LoginUser$LoginGroup 변수 등 동적 필터 정의 구문을 사용하면 됩니다.

주:

동적 필터는 중첩 표현식을 포함하여 LOWER, UPPER 및 CAST와 같은 SQL 함수를 지원합니다. 이러한 함수를 멤버 집합 함수와 직접 사용하여 보다 유연하고 정확한 액세스 필터 정의를 생성할 수 있습니다.

동적 필터 구문

동적 필터 구문을 사용하여 여러 사용자와 그룹에 지정할 수 있는 유연한 필터를 생성합니다.

필터 행에는 멤버 표현식과 함께 정의의 일부로 다음 요소가 포함될 수 있습니다.

$loginuser

이 변수는 런타임 시 현재 로그인한 사용자의 값을 저장합니다. @datasourcelookup 메소드와 함께 사용할 수 있습니다.

$logingroup

이 변수는 현재 로그인한 사용자가 속한 모든 그룹의 값을 저장합니다. 직접 그룹과 간접 그룹이 모두 포함됩니다. @datasourcelookup 메소드와 함께 사용할 때 각 그룹은 데이터 출처에 대해 개별적으로 조회됩니다.

@datasourcelookup

이 메소드는 데이터 소스에서 레코드를 인출합니다.

구문

@datasourcelookup (dataSourceName, columnName, columnValue, returnColumnName)
매개변수 설명
dataSourceName

Essbase에서 정의된 외부 데이터 소스의 이름입니다. 애플리케이션 레벨 데이터 소스의 경우 이름에 애플리케이션 이름과 마침표를 접두어로 사용합니다.

columnName

제공된 columnValue를 검색할 데이터 소스 열의 이름입니다.

columnValue

columnName에서 검색할 값입니다.

returnColumnName

값 목록을 반환할 데이터 소스 열의 이름입니다.

주:

데이터 소스 열 이름에는 USER, GROUP 또는 ROLE과 같은 SQL 예약어가 사용되지 않아야 합니다. 예약어를 사용하면 SQL 구문 분석 오류 또는 예상치 않은 필터 동작이 발생할 수 있습니다.

설명

@datasourcelookup 호출은 다음 SQL 질의와 동등합니다.

select returnColumnName from dataSourceName where columnName=columnValue

@datasourcelookup은 제공된 데이터 출처를 조회하고 columnNamecolumnValue가 포함된 레코드를 검색합니다. columnValue$loginuser로 지정할 경우 이 메소드는 columnName에 현재 로그인한 사용자 이름이 포함된 레코드를 검색합니다.

Essbase는 콤마로 구분된 문자열로 목록 요소를 결합하여 필터 정의 행을 구성합니다. 레코드에 특수 문자 또는 공백이 포함되거나 숫자만 포함된 경우 따옴표로 묶입니다.

주:

@options 매개변수는 조회 실패 동작을 제어하는 데 사용할 수 있습니다. strictLookup=true인 경우 조회 실패가 치명적 오류로 처리되고 필터 결과가 반환되지 않습니다.

예제

매개변수를 따옴표로 묶습니다.

다음 호출은 전역 데이터 소스를 조회하고 Mary가 상점 관리자인 상점 이름 목록을 반환합니다.

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

다음 호출은 애플리케이션 레벨 데이터 소스를 조회하고 현재 로그인한 사용자가 상점 관리자인 상점 이름 목록을 반환합니다.

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

다음 호출은 애플리케이션 레벨 데이터 소스를 조회하고 로그인한 사용자가 속한 그룹과 상점 부서가 일치하는 상점 이름 목록을 반환합니다.

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

로그인한 사용자가 3개 그룹에 속하는 경우 위의 @datasourcelookup 메소드는 각 그룹에 대해 모든 일치 열 값을 반환합니다.

다음 예제에서는 동적 필터 표현식 내의 SQL 함수를 사용합니다.

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

다음 예제는 명시적 대소문자 구분 함수를 사용하여 대소문자 구분 평가를 수행합니다.

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

다음 예에서는 Sales 또는 Marketing 부서에 속한 점포를 반환합니다.

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

다음 예에서는 @datasourceLookup과 함께 멤버 세트 함수를 사용합니다.

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

다음 예에서는 데이터 소스 조회와 함께 중첩된 멤버 세트 함수를 사용합니다.

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

다음 예에서는 엄격한 조회 동작을 사용합니다. 조회가 실패하면 필터 결과가 반환되지 않습니다.

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

동적 필터를 생성하는 워크플로우

다음과 같은 일반적인 워크플로우를 사용하여 동적 필터를 생성할 수 있습니다.

이 동적 필터 워크플로우에서는 이미 큐브가 있고 프로비전된 사용자 및 그룹이 있다고 간주합니다.

  1. 데이터 소스가 파일인지 아니면 관계형 소스인지 식별합니다.
  2. 전역적으로 또는 애플리케이션 레벨에서 Essbase 내에서 접속 및 데이터 소스를 정의합니다.
  3. 큐브 레벨에서 필터를 생성합니다. 큐브로 이동하고 필터를 선택합니다.
  4. 동적 필터 구문에서 필요에 따라 $loginuser 변수, $logingroup 변수와 @datasourcelookup 메소드를 사용하여 각 필터의 필터 행을 정의합니다.
  5. 사용자 또는 그룹에 필터를 지정합니다.
  6. 필터를 그룹에 지정한 경우 필터링할 애플리케이션에 그룹을 지정합니다. 애플리케이션으로 이동하고 권한을 선택합니다.

동적 필터의 예

다음 동적 필터는 갤러리에서 샘플 템플리트로 사용 가능한 Efficient.UserFilters라는 큐브에서 작동합니다.


로그인한 사용자에게 메타 읽기 액세스 권한을 부여하는 세 행을 가진 동적 필터입니다.

이 동적 필터를 생성하고 적용하는 방법을 알아보려면 갤러리의 기술 섹션에서 워크북 템플리트 Efficient_Filters.xlsx를 다운로드하고 워크북의 README 지침을 따릅니다. 갤러리는 Essbase 웹 인터페이스의 파일 섹션에서 사용할 수 있습니다.