您可以使用 JavaScript 开发验证脚本以验证分析标准和列公式,并阻止无效查询。
使用分析的用户可以调用定制 JavaScript 来验证分析标准和列公式。通过验证功能,可以在编辑分析时阻止查询。定制 JavaScript 必须可通过 Web 服务器访问。要启用此功能,管理员需要在系统设置中指定 Web 服务器的 URL,并将该 Web 服务器注册为安全域。
每当用户尝试运行分析时,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,则系统会认为标准有效并运行分析。此函数还可用于验证针对预览和保存操作的标准。
每当用户尝试输入或修改列公式时,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 文件中提供了一些验证帮助函数供您使用。
| 验证帮助函数 | 说明 |
|---|---|
|
|
返回分析引用的主题区域的名称。它通常在函数的 switch 语句中使用,并在运行其他验证之前执行。如果分析为基于集合的标准,则返回 |
|
|
如果内容设计者已将指定文件夹(表)添加到分析中,则返回 |
|
|
如果内容设计者已将指定列添加到分析中,则返回 |
|
|
检查以确保当存在 |
|
|
如果指定列上存在筛选器,则返回 |
|
|
检查以确保当投影列表中存在 |
|
|
返回为给定逻辑列指定的筛选器值的数量。如果筛选器值为 " |