Lekérdezések érvényesítése és blokkolása elemzésekben egyéni JavaScript használatával

Kifejleszthet egyéni érvényesítési parancsfájlokat JavaScript nyelven az elemzési feltételek és oszlopképletek érvényesítéséhez, valamint az érvénytelen lekérdezések blokkolásához.

Lekérdezések blokkolása elemzésekben

Az elemzéseken dolgozó felhasználók meghívhatnak egyéni JavaScriptet az elemzési feltételek és az oszlopképletek ellenőrzéséhez. Az érvényesítés lehetővé teszi a lekérdezések blokkolását elemzés szerkesztésekor. Az egyéni JavaScriptnek webes kiszolgálón keresztül kell elérhetőnek lennie. E funkció engedélyezéséhez a rendszergazdáknak meg kell adni a rendszerbeállításokban a webkiszolgáló URL-címét, és a kiszolgálót biztonságos tartományként kell regisztrálni.

  1. Fejlesszen JavaScript nyelvű egyéni érvényesítési parancsfájlokat, tárolja azokat webkiszolgálón, és jegyezze fel az egyéni parancsfájlokat tartalmazó JavaScript (*.JS) fájlra mutató URL-címet.
    Például kifejleszthet egy blokkoló parancsfájlt, amelyet a myblocking.js fájlban tárol, és az URL-cím lehet a következő:http://example.com:8080/mycustomscripts/myblocking.js.
  2. Adja meg a rendszerbeállításokban a webkiszolgálója URL-címét:
    1. Kattintson a Konzol, majd a Speciális rendszerbeállítások elemre.
    2. Az URL lekérdezések blokkolásához elemzésekben mezőben adja meg az 1. lépésben lejegyzett URL-címet.
  3. Regisztrálja a webkiszolgálót biztonságos tartományként:
    1. Kattintson a Konzol, majd a Biztonságos tartományok elemre.
    2. Adja meg a 2. lépésben az URL-címben megadott tartomány bejegyzését.
      Megadhatja például a példában szereplő: example.com:8080 bejegyzést.
    3. Beállításként válassza a Parancsfájl és a Csatlakozás lehetőséget.
  4. Tesztelje az érvényesítési parancsfájljait:
    1. Nyisson meg egy elemzést.
    2. Futtassa az elemzést érvényes és érvénytelen feltételekkel is.
    3. Ellenőrizze, hogy a rendszer a várt módon blokkolta-e a lekérdezéseket.

JavaScript kifejlesztése elemzések blokkolásához feltételek alapján

Amikor egy felhasználó elemzést próbál futtatni, az Oracle Analytics meghívja a validateAnalysisCriteria függvényt. A validateAnalysisCriteria testreszabható, hogy ellenőrizzen és blokkoljon lekérdezéseket a saját specifikus feltételeink szerint. Ha a függvény a true értéket adja vissza, a lekérdezés fut. Ha a függvény a false értéket adja vissza, vagy üzenetet jelenít meg, a lekérdezés blokkolva van.

Például a következő egy mintakód egy myblocking.js nevű JavaScript-programhoz.

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

Ha a függvény által visszaadott érték nem false, a program a feltételt érvényesnek tekinti, és az elemzés fut. A függvény használatos feltételek ellenőrzéséhez is a műveletek előnézetéhez és mentéséhez.

JavaScript kifejlesztése elemzések blokkolásához képlet alapján

Amikor egy felhasználó megpróbál beírni vagy módosítani egy oszlopképletet, az Oracle Analytics meghívja a validateAnalysisFormula függvényt a művelet ellenőrzéséhez. A validateAnalysisFormula testreszabható, hogy ellenőrizzen és blokkoljon képleteket a saját specifikus feltételeink szerint. Ha a függvény a true értéket adja vissza, a képlet elfogadott. Ha az érvényesítés nem működik, a függvény a false, értéket adja vissza, a képlet elutasításra kerül, és megjelenik az Ön egyéni üzenete.

Üzenet megjelenítéséhez és annak engedélyezéséhez, hogy a felhasználók továbbléphessenek, a függvénynek a true értéket kell visszaadnia. A lekérdezés blokkolásához a függvénynek a false értéket kell visszaadnia, vagy egy üzenetet kell megjelenítenie. A függvényben JavaScript-karakterláncot és reguláris kifejezési technikákat használhat a képlet vizsgálatához és ellenőrzéséhez.

Rendelkezésre állnak segítő függvények, hogy a lekérdezést letiltó függvény ellenőrizhesse a szűrőket, oszlopokat stb. Lásd: Érvényesítést segítő függvények.

Például, a következő kód megmutatja, hogyan tiltsunk le egy lekérdezést, ha a felhasználó elfogadhatatlan függvényt ad meg.

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

Érvényesítést segítő függvények

Számos érvényesítést segítő függvény áll rendelkezésre, amelyeket egy JavaScript fájlban használhat.

Érvényesítést segítő függvény Leírás

CriteriaValidator.getSubjectArea()

Visszaadja a tárgyterület nevét, amelyre az elemzés hivatkozik. Általában egy függvényen belüli switch utasításban használatos további érvényesítések elvégzése előtt. Ha az elemzés készlet alapú feltételekből áll, akkor null értéket ad vissza.

CriteriaValidator.tableExists(sTable)

true értéket ad vissza, ha a meghatározott mappa (tábla) a tartalomtervező által lett hozzáadva az elemzéshez, és false értéket ad vissza, ha a mappa nem lett hozzáadva.

CriteriaValidator.columnExists(sTable, sColumn)

true értéket ad vissza, ha a meghatározott oszlop a tartalomtervező által lett hozzáadva az elemzéshez, és false értéket ad vissza, ha az oszlop nem lett hozzáadva.

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

Ellenőrzi, hogy létezik-e a dependentColumn, ha jelen van a checkColumn. true értéket ad vissza, ha a checkColumn nem található, vagy ha a checkColumn és a függő oszlop megtalálható. Ha a checkColumn és a dependentColumn null értékű, akkor megtörténik a mappák érvényesítése. Ha a checkTable táblából bármilyen oszlop megtalálható, akkor a dependentTable tábla valamelyik oszlopának is megtalálhatónak kell lennie.

CriteriaValidator.filterExists(sFilterTable, sFilterColumn)

true értéket ad vissza, ha van szűrő a megadott oszlopon, és false értéket ad vissza, ha nincs szűrő.

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

Ellenőrzi, hogy létezik-e a dependentFilter, ha jelen van a checkColumn a projekciós listában. true értéket ad vissza, ha a checkColumn nem található, vagy ha a checkColumn és a függő szűrő megtalálható.

CriteriaValidator.filterCount(sFilterTable, sFilterColumn)

Visszaadja az adott logikai oszlophoz meghatározott szűrőértékek számát. Ha a szűrőérték "equals", "null", "notNull" vagy "in", akkor visszaadja a kiválasztott értékek számát. Ha az oszlop nem használatos a szűrőben, akkor nulla értéket ad vissza. Ha az oszlopot alapérték nélkül kérik be, akkor a -1 értéket adja vissza. Minden egyéb szűrőoperátor (például: "greater than", "begins with" stb.) esetében a 999 értéket adja vissza, mert az értékek száma nem állapítható meg.