カスタムJavaScriptを使用した分析における問合せの検証とブロック
JavaScriptで検証スクリプトを開発し、分析基準や列の計算式を検証し、無効な問合せをブロックできます。
分析での問合せのブロック
分析を担当するユーザーは、カスタムJavaScriptを呼び出して、分析基準や列の計算式を検証できます。検証を使用すると、分析を編集する際に問合せをブロックできます。カスタムJavaScriptにはWebサーバーからアクセスできることが必要です。この機能を有効にするには、管理者はシステム設定でWebサーバーのURLを指定し、Webサーバーを安全ドメインとして登録します。
基準に基づいて分析をブロックする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の文字列と正規表現の手法を使用して計算式を調査し、検証できます。
ヘルパー関数を使用することによって、問合せブロック関数でフィルタや列などをチェックできます。「検証ヘルパー関数」を参照してください。
たとえば、次のコードは、ユーザーが入力した計算式を受け入れられない場合に問合せをブロックする方法を示しています。
// 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;
}
検証ヘルパー関数
使用できるいくつかの検証ヘルパー関数がJavaScriptファイルにあります。
これらの関数は、answers/queryblocking.jsという名前のファイル内で定義されます。この表に各ヘルパー関数を示し、それぞれについて説明します。
検証ヘルパー関数 | 説明 |
---|---|
|
分析で参照されたサブジェクト・エリアの名前を返します。通常これは、他の検証を実行する前に関数内のswitch文で使用されます。分析がセット・ベースの基準である場合は |
|
指定されたフォルダ(表)がコンテンツ・デザイナによって分析に追加されている場合は |
|
指定された列がコンテンツ・デザイナによって分析に追加されている場合は |
|
|
|
指定された列にフィルタが存在する場合は |
|
プロジェクション・リストに |
|
特定の論理列に対して指定されたフィルタ値の数を返します。フィルタ値が |