사용자정의 JavaScript를 통해 분석에서 질의 검증 및 차단

JavaScript로 검증 스크립트를 개발하여 분석 조건 및 열 공식을 검증하고 부적합한 질의를 차단할 수 있습니다.

분석에서 질의 차단

분석 작업을 수행하는 사용자가 사용자정의 JavaScript를 호출하여 분석 조건 및 열 공식을 검증할 수 있습니다. 검증을 통해 분석을 편집할 때 질의를 차단할 수 있습니다. 사용자정의 JavaScript는 웹 서버를 통해 액세스할 수 있어야 합니다. 이 기능을 사용으로 설정하려면 관리자는 시스템 설정에서 웹 서버의 URL을 지정하고 웹 서버를 안전한 도메인으로 등록합니다.

  1. JavaScript로 사용자정의 검증 스크립트를 개발하여 웹 서버에 저장하고 사용자정의 스크립트가 포함된 JavaScript(*.JS) 파일을 가리키는 URL을 기록해 둡니다.
    예를 들어 myblocking.js에 저장하는 차단 스크립트를 개발하고 URL을 http://example.com:8080/mycustomscripts/myblocking.js로 지정할 수 있습니다.
  2. 시스템 설정에서 웹 서버의 URL을 지정합니다.
    1. 콘솔을 누르고 시스템 설정을 누릅니다.
    2. 분석에서 질의 차단을 위한 URL에 단계 1에서 확인한 URL을 입력합니다.
  3. 웹 서버를 안전한 도메인으로 등록합니다.
    1. 콘솔을 누르고 안전한 도메인을 누릅니다.
    2. 단계 2에서 지정한 URL에 도메인 항목을 추가합니다.
      예를 들어 example.com:8080을 추가할 수 있습니다.
    3. 옵션에 대해 스크립트접속을 선택합니다.
  4. 검증 스크립트를 테스트합니다.
    1. 분석을 엽니다.
    2. 적합한 조건과 부적합한 조건을 모두 사용하여 분석을 실행합니다.
    3. 질의가 예상한 대로 차단되는지 확인합니다.

조건에 따라 분석을 차단하는 JavaScript 개발

사용자가 분석 실행을 시도할 때마다 Oracle Analytics가 validateAnalysisCriteria 함수를 호출합니다. 고유한 특정 조건에 따라 질의를 검증 및 차단하도록 validateAnalysisCriteria를 사용자정의할 수 있습니다. 함수가 true를 반환하면 질의가 실행됩니다. 함수가 false를 반환하거나 메시지를 표시할 때는 질의가 차단됩니다.

예를 들어 다음은 myblocking.js라는 JavaScript 프로그램의 샘플 코드입니다.

// This is a blocking function. It ensures that users select what 
// the designer wants them to.
function validateAnalysisCriteria(analysisXml)
{
   // Create the helper object
   var tValidator = new CriteriaValidator(analysisXml);
   // Validation Logic
   if (tValidator.getSubjectArea() != "Sample Sales")
      return "Try Sample Sales?";
   if (!tValidator.dependentColumnExists("Markets","Region","Markets","District"))
   {
      // If validation script notifies user, then return false
      alert("Region and District are well suited, do you think?");
      return false;
   }
   if (!tValidator.dependentColumnExists("Sales Measures","","Periods","Year"))
   return "You selected a measure so pick Year!";
   if (!tValidator.filterExists("Sales Measures","Dollars"))
   return "Maybe filter on Dollars?";
   if (!tValidator.dependentFilterExists("Markets","Market","Markets"))
   return "Since you are showing specific Markets, filter the markets.";
   var n = tValidator.filterCount("Markets","Region");
   if ((n <= 0) || (n > 3))
      return "Select 3 or fewer specific Regions";
   return true;
}

함수가 false 이외의 값을 반환하면 조건이 적합한 것으로 간주되고 분석이 실행됩니다. 이 함수는 또한 미리보기 및 저장 작업의 조건을 검증하기 위해 사용됩니다.

공식에 따라 분석을 차단하는 JavaScript 개발

사용자가 열 공식을 입력하거나 수정하려고 시도할 때마다 Oracle Analytics는 validateAnalysisFormula 함수를 호출하여 작업을 확인합니다. 고유한 특정 조건에 따라 공식을 검증 및 차단하도록 validateAnalysisFormula를 사용자정의할 수 있습니다. 함수가 true를 반환하면 공식이 수락되었음을 의미합니다. 검증이 실패하고 함수가 false를 반환하면 공식이 거부되었음을 의미하며 사용자정의 메시지가 표시됩니다.

메시지를 표시하고 사용자가 작업을 계속하도록 허용하려면 함수가 true를 반환해야 합니다. 질의를 차단하려면 함수가 false를 반환하거나 메시지를 표시해야 합니다. 함수에서 JavaScript 문자열과 정규 표현식 기법을 사용하여 공식을 조사하고 검증할 수 있습니다.

Helper 함수가 제공되므로 질의 차단 함수가 필터, 열 등을 확인할 수 있습니다. 검증 Helper 함수을(를) 참조하십시오.

예를 들어 다음 코드는 사용자가 허용되지 않는 공식을 입력하는 경우 질의를 차단하는 방법을 보여줍니다.

// This is a formula blocking function. It makes sure the user doesn't enter an unacceptable formula.
function validateAnalysisFormula(sFormula, sAggRule)
{
   // don't allow the use of concat || in our formulas
   var concatRe = /\|\|/gi;
   var nConcat = sFormula.search(concatRe);
   if (nConcat >= 0)
      return "You used concatenation (character position " + nConcat + "). That isn't allowed.";
   // no case statements
   var caseRe = /CASE.+END/gi;
   if (sFormula.search(caseRe) >= 0)
      return "Don't use a case statement.";
   // Check for a function syntax: aggrule(formula) aggrule shouldn't contain a '.'
   var castRe = /^\s*\w+\s*\(.+\)\s*$/gi;
   if (sFormula.search(castRe) >= 0)
      return "Don't use a function syntax such as RANK() or SUM().";
    return true;
}

검증 Helper 함수

일부 검증 helper 함수는 JavaScript 파일로 사용하도록 제공됩니다.

검증 Helper 함수 설명

CriteriaValidator.getSubjectArea()

분석에서 참조되는 주제 영역의 이름을 반환합니다. 일반적으로 다른 검증을 수행하기 전 이 함수 내에서 전환 문에 사용됩니다. 분석이 집합 기준 조건인 경우 null을 반환합니다.

CriteriaValidator.tableExists(sTable)

콘텐츠 설계자가 지정된 폴더(테이블)를 분석에 추가한 경우 true를 반환하고, 폴더가 추가되지 않았으면 false를 반환합니다.

CriteriaValidator.columnExists(sTable, sColumn)

콘텐츠 설계자가 분석에 지정된 열을 추가한 경우 true를 반환하고 열이 추가되지 않았으면 false를 반환합니다.

CriteriaValidator.dependentColumnExists(sCheckTable, sCheckColumn, sDependentTable, sDependentColumn)

checkColumn이 제공된 경우 dependentColumn이 존재하는지 확인합니다. checkColumn이 제공되지 않았으면 true를 반환합니다. 그렇지 않으면 checkColumn 및 종속 열이 제공됩니다. checkColumndependentColumnnull이면 폴더가 검증됩니다. checkTable의 열이 제공되었으면 dependentTable의 열이 제공되어 있어야 합니다.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

지정된 열에 필터가 존재하면 true를 반환하고, 필터가 제공되지 않았으면 false를 반환합니다.

CriteriaValidator.dependentFilterExists(sCheckTable, sCheckColumn, sFilterTable, sFilterColumn)

checkColumn이 프로젝션 목록에 제공된 경우 dependentFilter가 존재하는지 확인합니다. checkColumn이 제공되지 않았으면 true를 반환합니다. 그렇지 않으면 checkColumn 및 종속 필터가 제공됩니다.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

제공된 논리적 열에 지정된 필터 값 수를 반환합니다. 필터 값이 "equals," "null," "notNull" 또는 "in"이면 선택한 값 수를 반환합니다. 열이 필터에 사용되지 않았으면 0을 반환합니다. 기본값 없이 열 프롬프트가 표시된 경우에는 -1을 반환합니다. "greater than", "begins with" 등의 다른 모든 필터 연산자의 경우 값 수를 확인할 수 없기 때문에 999를 반환합니다.