Overenie a blokovanie dopytov v analýzach pomocou vlastného skriptu JavaScript

Môžete vyvíjať skripty overenia v jazyku JavaScript, ktoré budú overovať kritériá analýzy a vzorce stĺpcov a blokovať neplatné dopyty.

Blokovanie dopytov v analýzach

Používatelia pracujúci s analýzami môžu vyvolať vlastný skript JavaScript, ktorý bude overovať kritériá analýzy a vzorce stĺpcov. Toto overenie umožňuje blokovať dopyty počas úpravy analýzy. Vlastný skript JavaScript musí byť prístupný prostredníctvom webového servera. Na aktivovanie tejto funkcie administrátor zadá adresu URL webového servera v systémových nastaveniach a zaregistruje webový server ako bezpečnú doménu.

  1. Vytvorte vlastné skripty overenia v jazyku JavaScript, uložte ich na webovom serveri a poznačte si adresu URL, ktorá odkazuje na súbor JavaScript (*.JS) obsahujúci vlastné skripty.
    Môžete napríklad vytvoriť skript na blokovanie, ktorý uložíte v súbore myblocking.js, a adresa URL môže byť: http://example.com:8080/mycustomscripts/myblocking.js.
  2. Zadajte adresu URL webového servera v systémových nastaveniach:
    1. Kliknite na položku Konzola a potom kliknite na položku Rozšírené systémové nastavenia.
    2. V poli URL for Blocking Queries in Analyses (Adresa URL na blokovanie dopytov v analýzach) zadajte adresu URL, ktorú ste si poznačili v kroku 1.
  3. Zaregistrujte webový server ako bezpečnú doménu:
    1. Kliknite na položku Konzola a potom kliknite na položku Bezpečné domény.
    2. Zadajte záznam pre doménu v adrese URL, ktorú ste zadali v kroku 2.
      Môžete napríklad zadať doménu: example.com:8080.
    3. Ak chcete zobraziť voľby, vyberte položku Skript a potom položku Pripojiť.
  4. Otestujte skripty overenia:
    1. Otvorte analýzu.
    2. Spustite analýzu s platnými aj neplatnými kritériami.
    3. Overte, či sú dopyty blokované podľa očakávaní.

Vývoj skriptu JavaScript na blokovanie analýz na základe kritérií

Vždy keď sa používateľ pokúsi spustiť analýzu, služba Oracle Analytics vyvolá funkciu validateAnalysisCriteria. Funkciu validateAnalysisCriteria môžete prispôsobiť tak, aby overovala a blokovala dopyty na základe vašich vlastných kritérií. Ak táto funkcia vráti hodnotu true, dopyt sa spustí. Ak táto funkcia vráti hodnotu false alebo zobrazí hlásenie, dopyt sa zablokuje.

Napríklad toto je vzorový kód pre program JavaScript s názvom myblocking.js.

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

Ak táto funkcia vráti ľubovoľnú inú hodnotu než false, kritériá sa považujú za platné a analýza sa spustí. Funkcia sa používa aj na overenie kritérií pre operácie ukážky a uloženia.

Vývoj skriptu JavaScript na blokovanie analýz na základe vzorca

Keď sa používateľ pokúsi zadať alebo upraviť vzorec stĺpca, služba Oracle Analytics vyvolá funkciu validateAnalysisFormula na overenie operácie. Funkciu validateAnalysisFormula môžete prispôsobiť tak, aby overovala a prípadne blokovala vzorce na základe vašich vlastných kritérií. Ak táto funkcia vráti hodnotu true, vzorec bol akceptovaný. Ak je overenie neúspešné, funkcia vráti hodnotu false, vzorec sa zamietne a zobrazí sa vlastné hlásenie.

Ak chcete zobraziť hlásenie a umožniť používateľovi pokračovať, funkcia musí vrátiť hodnotu true. Ak chcete dopyt zablokovať, funkcia musí vrátiť hodnotu false alebo zobraziť hlásenie. Na preskúmanie a overenie vzorca môžete vo funkcii použiť reťazec JavaScriptu a techniky regulárnych výrazov.

K dispozícii sú aj pomocné funkcie, takže funkcia blokovania dopytov môže kontrolovať filtre, stĺpce a podobne. Pozrite si časť Pomocné funkcie overenia.

Nasledujúci kód napríklad znázorňuje, ako zablokovať dopyt, ak používateľ zadá neprijateľný 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é funkcie overenia

V súbore JavaScript sú dostupné viaceré pomocné funkcie overenia, ktoré môžete používať.

Pomocná funkcia overenia Popis

CriteriaValidator.getSubjectArea()

Vráti názov tematickej oblasti, na ktorú odkazuje analýza. Zvyčajne sa používa v príkaze switch v rámci funkcie pred vykonaním ďalšieho overenia. Ak ide o analýzu s kritériami na základe množiny, vráti hodnotu null.

CriteriaValidator.tableExists(sTable)

Vráti hodnotu true, ak návrhár obsahu pridal zadaný priečinok (tabuľku) do analýzy. Vráti hodnotu false, ak priečinok nebol pridaný.

CriteriaValidator.columnExists(sTable, sColumn)

Vráti hodnotu true, ak návrhár obsahu pridal zadaný stĺpec do analýzy. Vráti hodnotu false, ak stĺpec nebol pridaný.

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

Skontroluje, či existuje dependentColumn, ak existuje checkColumn. Vráti hodnotu true, ak neexistuje checkColumn, alebo ak checkColumn a závislý stĺpec existujú. Ak checkColumn a dependentColumn majú hodnotu null, priečinky sa overia. Ak existuje ľubovoľný stĺpec z tabuľky checkTable, musí existovať stĺpec z tabuľky dependentTable.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

Vráti hodnotu true, ak v zadanom stĺpci existuje filter, a hodnotu false, ak neexistuje žiadny filter.

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

Skontroluje, či existuje dependentFilter, ak v zozname projekcií existuje checkColumn. Vráti hodnotu true, ak neexistuje checkColumn, alebo ak checkColumn a závislý filter existujú.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Vráti počet hodnôt filtra, ktoré sú zadané pre daný logický stĺpec. Ak je hodnota filtra "equals", "null", "notNull" alebo "in", vráti počet zvolených hodnôt. Ak stĺpec nie je použitý vo filtri, vráti hodnotu nula. Ak sa zobrazí výzva pre stĺpec bez predvolenej hodnoty, vráti hodnotu -1. Pre všetky ostatné operátory filtra (napríklad "greater than", "begins with" atď.) vráti hodnotu 999, pretože počet hodnôt nie je možné určiť.