Ověřování a blokování dotazů v analýzách pomocí vlastních skriptů JavaScript

Můžete vytvářet vlastní ověřovací skripty v jazyce JavaScript pro ověřování kritérií analýz a vzorců sloupců a pro blokování neplatných dotazů.

Blokování dotazů v analýzách

Uživatelé pracující s analýzami mohou vyvolat vlastní skript v jazyce JavaScript pro ověřování kritérií analýzy a vzorců sloupců. Ověřování umožňuje blokovat dotazy při úpravě analýzy. Vlastní skript v jazyce JavaScript musí být přístupný prostřednictvím webového serveru. Chtějí-li správci tuto funkci aktivovat, musí zadat adresu URL webového serveru v nastavení systému a registrovat webový server jako bezpečnou doménu.

  1. Vytvořte vlastní ověřovací skripty v jazyce JavaScript, uložte je na webovém serveru a poznamenejte si adresu URL ukazující na soubor v jazyce JavaScript (*.js) obsahující vlastní skripty.
    Můžete například vytvořit blokovací skript, který uložíte do souboru myblocking.js, a adresa URL může být:http://example.com:8080/mycustomscripts/myblocking.js.
  2. V nastavení systému zadejte adresu URL webového serveru:
    1. Klikněte na položku Konzola, poté klikněte na položku Nastavení systému.
    2. Do pole Adresa URL pro blokování dotazů v analýzách zadejte adresu URL, kterou jste si poznamenali v kroku 1.
  3. Postup registrace webového serveru jako bezpečné domény:
    1. Klikněte na položku Konzola, poté klikněte na položku Bezpečné domény.
    2. Přidejte položku pro doménu z adresy URL, kterou jste zadali v kroku 2.
      Můžete zadat například: example.com:8080.
    3. Při určení voleb vyberte SkriptPřipojit.
  4. Otestujte ověřovací skripty:
    1. Otevřete analýzu.
    2. Spusťte analýzu s platnými i neplatnými kritérii.
    3. Ověřte, zda jsou dotazy blokovány podle očekávání.

Vytvoření skriptu v jazyce JavaScript pro blokování analýz na základě kritérií

Kdykoli se uživatel pokusí spustit analýzu, služba Oracle Analytics vyvolá funkci validateAnalysisCriteria. Funkci validateAnalysisCriteria můžete přizpůsobit tak, aby ověřovala a blokovala dotazy na základě vašich vlastních specifických kritérií. Pokud funkce vrátí hodnotu true, dotaz se spustí. Pokud funkce vrátí hodnotu false nebo zobrazí zprávu, dotaz je blokován.

Následující ukázka obsahuje kód programu s názvem myblocking.js vytvořený v jazyce 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;
}

Pokud funkce vrátí cokoli jiného než hodnotu false, jsou kritéria považována za platná a je spuštěna analýza. Funkce slouží také k ověření platnosti kritérií pro operace náhledu a ukládání.

Vytvoření skriptu v jazyce JavaScript pro blokování analýz na základě vzorce

Kdykoli se uživatel pokusí zadat nebo upravit vzorec sloupce, služba Oracle Analytics vyvolá funkci validateAnalysisFormula k ověření operace. Funkci validateAnalysisFormula můžete přizpůsobit tak, aby ověřovala a blokovala vzorce na základě vašich vlastních specifických kritérií. Pokud funkce vrátí hodnotu true, vzorec je přijat. Pokud ověření selže, funkce vrátí hodnotu false, vzorec je odmítnut a zobrazí se vaše vlastní zpráva.

Chcete-li zobrazit zprávu a umožnit uživatelům pokračovat, funkce musí vrátit hodnotu true. Chcete-li dotaz zablokovat, funkce musí vrátit hodnotu false nebo zobrazit zprávu. K prozkoumání a ověření vzorce můžete ve své funkci použít řetězec v jazyce JavaScript a techniky regulárních výrazů.

K dispozici jsou pomocné funkce, takže funkce blokování dotazů může kontrolovat filtry, sloupce atd. Prostudujte si téma Pomocné funkce ověřování.

Následující kód například ukazuje, jak blokovat dotaz, pokud uživatel zadá nepřijatelný vzorec.

// 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;
}

Pomocné funkce ověřování

Soubor v jazyce JavaScript obsahuje několik pomocných funkcí ověřování, které můžete použít.

Pomocná funkce ověřování Popis

CriteriaValidator.getSubjectArea()

Vrátí název cílové oblasti, na kterou se odkazuje analýza. Obvykle se používá v příkazu přepínání v rámci funkce před provedením dalšího ověření. Pokud analýza vychází z kritérií založených na sadě, funkce vrátí hodnotu null.

CriteriaValidator.tableExists(sTable)

Vrátí hodnotu true, pokud byla zadaná složka (tabulka) přidána návrhářem obsahu do analýzy, nebo hodnotu false, pokud složka přidána nebyla.

CriteriaValidator.columnExists(sTable, sColumn)

Vrátí hodnotu true, pokud byl zadaný sloupec přidán návrhářem obsahu do analýzy, nebo hodnotu false, pokud sloupec přidán nebyl.

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

Zkontroluje, zda existuje sloupec dependentColumn, pokud je dostupný sloupec checkColumn. Vrátí hodnotu true, pokud není dostupný sloupec checkColumn, nebo pokud je sloupec checkColumn dostupný společně se závislým sloupcem. Pokud mají položky checkColumndependentColumn hodnotu null, složky jsou ověřeny. Pokud je dostupný libovolný sloupec z tabulky checkTable, musí být dostupný sloupec z tabulky dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Vrátí hodnotu true, pokud je pro zadaný sloupec nastaven filtr, nebo hodnotu false, pokud není dostupný žádný filtr.

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

Zkontroluje, zda existuje filtr dependentFilter, pokud je dostupný sloupec checkColumn v seznamu projekcí. Vrátí hodnotu true, pokud není dostupný sloupec checkColumn, nebo pokud je sloupec checkColumn dostupný společně se závislým filtrem.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Vrátí počet hodnot filtru zadaných pro daný logický sloupec. Pokud je hodnota filtru „equals“, „null“, „notNull“ nebo „in“, pak vrátí počet vybraných hodnot. Pokud sloupec není použit ve filtru, pak vrátí hodnotu nula. Pokud je sloupec vyzván bez výchozího nastavení, pak vrátí hodnotu –1. Pro všechny ostatní operátory filtrů (jako jsou „greater than“, „begins with“ atd.) vrátí hodnotu 999, protože počet hodnot nelze určit.