您可以使用 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 语句中使用,并在运行其他验证之前执行。如果分析为基于集合的标准,则返回 |
|
如果内容设计者已将指定文件夹(表)添加到分析中,则返回 |
|
如果内容设计者已将指定列添加到分析中,则返回 |
|
检查以确保当存在 |
|
如果指定列上存在筛选器,则返回 |
|
检查以确保当投影列表中存在 |
|
返回为给定逻辑列指定的筛选器值的数量。如果筛选器值为 " |