ERP analitika: ataskaitoms ir eksportui

Šiame skyriuje apžvelgiamos praktinės galimybės paimti duomenis iš Rivile ERP per REST (GET) ir juos panaudoti populiariausiose analitikos priemonėse.

Pastaba: techninės API naudojimo detalės (autentifikacija, filtravimas, pavyzdžiai įvairiomis kalbomis) yra API skyriuje:


Turinys


Bendra ERP duomenų ištraukimo schema

Analitikai skirti duomenų šaltiniai (data sources) pasiekiami per du loginius endpoint'us:

1. Filtravimo schema pagal duomenų šaltinį

  • Paskirtis: gauti konkretaus duomenų šaltinio filtravimo schemą (laukus, tipus, leistinas reikšmes) tam, kad jūs teisingai suformuotumėte filter parametrą duomenų užklausoms. Visada vadovaukitės šio endpoint’o atsakymu – schemos gali keistis.

  • Užklausos forma:

    GET https://api.rivile.cloud/bi/schemas/{dataSource}
    X-SessionToken: <JŪSŲ_API_RAKTAS>
  • Pavyzdinė užklausa:

    GET https://api.rivile.cloud/bi/schemas/PRODUCT
    X-SessionToken: <JŪSŲ_API_RAKTAS>
  • Pavyzdinis atsakymas (trumpinta, JSON Schema):

    {
    "type": "object",
    "properties": {
    "type": {
      "type": "string",
      "enum": ["PRODUCT", "SERVICE", "ALL"],
      "default": "ALL"
    },
    "active": { "type": "boolean", "default": true },
    "createdFrom": { "type": "string", "format": "date" },
    "createdTo": { "type": "string", "format": "date" },
    "suppliers": {
      "type": "array",
      "items": { "type": "string", "format": "uuid" },
      "maxItems": 500,
      "minItems": 1,
      "uniqueItems": true
    }
    },
    "additionalProperties": false
    }
  • Pastaba: schemoje pateikiami laukai, pagal kuriuos leidžiama filtruoti duomenis formuojant ištraukimo užklausas.


2. Duomenų ištraukimas pagal filtrus

  • Paskirtis: paimti pasirinkto duomenų šaltinio (parametras "type") duomenis, panaudojus suformuotą filter (URL‑encoded JSON) pagal 1‑ojo endpoint’o schemą.
  • Užklausos forma:
    GET https://api.rivile.cloud/bi/collect?type={dataSource}&filter={urlEncodedJson}
    X-SessionToken: <JŪSŲ_API_RAKTAS>
  • Pastaba: filter visada turi būti tinkamai URL‑užkoduotas. Rekomenduojama pirma suformuoti JSON objektą ir tik tada jį užkoduoti URL parametru.
  • Pavyzdys (visi produktų tipai):
    GET https://api.rivile.cloud/bi/collect?type=PRODUCT&filter=%7B%22type%22%3A%22ALL%22%7D
    X-SessionToken: <JŪSŲ_API_RAKTAS>
  • Pavyzdinis atsakymas:
    {
    "status": "SUCCESS",
    "success": {
    "data": {
      "companyId": "e1bb7ce7-c380-45b1-ba04-6685538007e5",
      "products": [{productObject}]
    }
    }
    }

Dažniausiai naudojami duomenų šaltiniai (orientacinė informacija)

Pastaba: realų sąrašą duomenų šaltinių ir tikslų laukų rinkinį (schema) visada gaukite iš 1-ojo endpoint’o – pavyzdžiai žemiau skirti orientacijai.

  • SALES_INVOICE_DETAILED – pardavimų sąskaitų eilutės: datos, dokumentų nr., klientai, prekės, kiekiai, sumos, PVM, nuolaidos.
  • GENERAL_LEDGER – DK įrašai: sąskaitos, korespondencijos, debetas/kreditas, laikotarpiai, objektai.
  • PAYABLE_RECEIVABLES_FLAT – pirkėjų/tiekėjų skolų „flat“ vaizdas: dokumentai, terminai, likučiai, apmokėjimo statusai.
  • PRODUCT – prekių/dimensijų katalogas: kodai, pavadinimai, mat. vnt., grupės, požymiai.
  • PRICE – kainodara: kainų tipai, galiojimo periodai, kainos pagal prekę/klientą.
  • INVENTORY_STOCK – atsargų likučiai ir apyvarta: sandėliai, partijos, kiekiai, judėjimai.
  • CLIENT – klientų kortelės: identifikatoriai, grupės, segmentai, lokacijos, atributai.
  • DEPARTMENT – padaliniai/centrai: hierarchija, pavadinimai, kodai.
  • LOT – partijos: partijos numeriai, galiojimai, susiejimai su prekėmis/sandėliais.
  • MARK – žymos/atributai: universalūs klasifikatoriai susiejimams ir filtravimui.
  • OBJECT – objektai/projektai: valdymo dimensija, susiejama su įrašais.
  • LEDGER_ACCOUNT – DK sąskaitų planas: kodai, pavadinimai, tipai.
  • CLIENT_GROUP – klientų grupės/segmentai: hierarchija ir filtravimas ataskaitoms.
  • PURCHASE_INVOICE_DETAILED – pirkimų sąskaitų eilutės: tiekėjai, prekės, kiekiai, savikaina, PVM.
  • LEAD – potencialūs klientai (CRM): šaltiniai, būsenos, atsakingi asmenys.
  • PAYMENTS – apmokėjimai: datos, sumos, mokėjimo būdai, susiejimai su dokumentais.

Greitas naudojimo scenarijus

  • 1 žingsnis: išsikvieskite GET /bi/schemas/{dataSource} ir išsaugokite jus dominančio duomenų šaltinio filtravimo schemą.
  • 2 žingsnis: pagal schemą suformuokite filter JSON objektą (tik palaikomiems laukams ir leistinoms reikšmėms) ir jį URL‑užkoduokite.
  • 3 žingsnis: kvieskite GET /bi/collect?type={dataSource}&filter={urlEncodedJson}.
  • 4 žingsnis: rezultatą naudokite tiesiogiai analitikos įrankyje arba įkelkite į tarpinę DB/duomenų sandėlį.

Rekomendacijos

  • Stambesniems srautams – suplanuokite naktinius atnaujinimus ir saugokite juos savo infrastruktūroje.

Populiariausios analitikos priemonės (nuo Excel iki BI)

Microsoft Excel (Power Query)

  • Paskirtis: greitos ad hoc ataskaitos, pivot lentelės, paprasti grafikai.
  • Kaip jungtis: Data > Get Data > From Other Sources > From Web ir nurodykite REST URL.
  • Kaip pasiimti ERP duomenis per endpoint:
    • 1) Išsikvieskite schemą: GET https://api.rivile.cloud/bi/schemas/PAYMENTS (antraštė X-SessionToken: <API_RAKTAS>), pagal atsakymą apsibrėžkite filtrus.
    • 2) Power Query pasirinkite Web > Advanced ir nurodykite URL su filtru, pvz.:
    • URL: https://api.rivile.cloud/bi/collect?type=PAYMENTS&filter=%7B%22from%22%3A%222025-01-01%22%2C%22to%22%3A%222025-12-31%22%7D
    • Headers: X-SessionToken: <API_RAKTAS> (Authentication: Anonymous, nes raktą perduodame antraštėje).
    • 3) Power Query redaktoriuje iš success.data mazgo išskleiskite atitinkamą masyvą (pvz., payments), konvertuokite į Table.
  • Patarimai:
    • Power Query redaktoriuje apdorokite JSON (Record/List į Table), tipizuokite stulpelius.
    • Parametrizuokite datų filtrus (pvz., „Nuo_Datos“), kad lengvai atnaujintumėte.
    • Įjunkite Background Refresh arba naudokite „Refresh All“ periodiškai.

Microsoft Power BI

  • Paskirtis: interaktyvūs valdybos/darbo srities (dashboard) atvaizdavimai, duomenų modeliavimas (DAX), publikavimas Power BI Service.
  • Kaip jungtis: Get Data > Web (arba „Blank Query“ su M formuluote) į REST GET.
  • Kaip pasiimti ERP duomenis per endpoint:
    • 1) Sukurkite parametrus: BaseUrl = "https://api.rivile.cloud", ApiKey, FromDate, ToDate.
    • 2) Modifikuokite užklausą (Blank Query) – pavyzdys:
      let
      BaseUrl = "https://api.rivile.cloud",
      // ApiKey, FromDate, ToDate – tai Parameter'iai, juos naudokite tiesiogiai
      FilterObj = [ from = FromDate, to = ToDate ],
      FilterText = Uri.EscapeDataString( Text.FromBinary( Json.FromValue(FilterObj) ) ),
      Url = BaseUrl & "/bi/collect?type=PAYMENTS&filter=" & FilterText,
      Source = Json.Document(Web.Contents(Url, [Headers=[#"X-SessionToken"=ApiKey]])),
      Data = Source[success][data],
      Lines = Data[payments],
      Table = Table.FromList(Lines, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
      Expanded = Table.ExpandRecordColumn(
      Table,
      "Column1",
      Record.FieldNames(
        Table.FirstValue(
          Table.TransformColumns(Table.FirstN(Table,1), {{"Column1", each _, type record}})[Column1]
        )
      )
      )
      in
      Expanded
    • 3) Įjunkite Incremental Refresh pagal datų koloną (pvz., dokumento data).
  • Patarimai:
    • Įgyvendinkite inkrementinį atnaujinimą (Incremental Refresh) pagal datą/laiką.
    • Sukurkite žvaigždės schemą: faktų lentelės (pvz., pardavimai) ir dimensijos (klientai, prekės, kalendorius).
    • Naudokite parametrus (BaseUrl, ApiKey) skirtingiems duomenims ištraukti.

Google Looker Studio (anksčiau „Data Studio“)

  • Paskirtis: lengvai dalinami interaktyvūs prietaisų skydai naršyklėje.
  • Kaip jungtis: per „Community Connector“ arba sukurkite tarpinį Google Sheets/BigQuery sluoksnį.
  • Kaip pasiimti ERP duomenis per endpoint (Google Sheets + Apps Script):
    • 1) Sheets faile Tools > Script editor sukurkite skriptą, kuris kviečia:
      function loadRivileSales() {
      var url = 'https://api.rivile.cloud/bi/collect?type=PAYMENTS&filter=' +
              encodeURIComponent(JSON.stringify({from:'2025-01-01', to:'2025-12-31'}));
      var resp = UrlFetchApp.fetch(url, {headers: {'X-SessionToken': PropertiesService.getScriptProperties().getProperty('API_KEY')}});
      var json = JSON.parse(resp.getContentText());
      var rows = json.success.data.payments || [];
      var sheet = SpreadsheetApp.getActive().getSheetByName('payments') || SpreadsheetApp.getActive().insertSheet('payments');
      sheet.clear();
      if (rows.length === 0) return;
      var headers = Object.keys(rows[0]);
      sheet.getRange(1,1,1,headers.length).setValues([headers]);
      sheet.getRange(2,1,rows.length,headers.length).setValues(rows.map(r => headers.map(h => r[h] ?? '')));
      }
    • 2) Nustatykite API_KEY Script Properties, sukurkite laikmatį (Trigger) periodiniam atnaujinimui ir naudokite šį Sheets kaip Looker Studio šaltinį.
  • Patarimai:
    • Kuo didesni srautai – tuo labiau tinka BigQuery kaip šaltinis.
    • Įrenkite atnaujinimo tvarkaraštį (Sheets + Apps Script triggeriai ar ETL planuotojas).

Tableau

  • Paskirtis: pažangi vizualinė analitika, dideli duomenų kiekiai, interaktyvūs prietaisų skydai.
  • Kaip jungtis: Web Data Connector (WDC) arba duomenų įkėlimas į tarpinę DB (PostgreSQL/SQL Server).
  • Kaip pasiimti ERP duomenis per endpoint:
    • 1) Greitas variantas: naudokite tarpinę DB. ETL pagalba kvieskite GET /bi/collect kas N minučių ir įrašykite rezultatus į lenteles (pvz., fact_sales, dim_client, dim_product). Tableau jungiasi prie DB ir atnaujina Extract.
    • 2) Jei naudojate WDC: sukurkite paprastą WDC, kuris siunčia HTTP GET į https://api.rivile.cloud/bi/collect?type=INVENTORY_STOCK&filter=... su X-SessionToken antrašte ir grąžina data duomenis.
  • Patarimai:
    • Esant ribojimams per REST, naudokite iš anksto paruoštą „extract“ per ETL, o Tableau atnaujinkite „Data Extracts“.
    • Modeliuokite dimensijas/faktus ir naudokite skaičiuojamus laukus konsoliduotoms metrikoms.

Qlik Sense / Qlik Cloud

  • Paskirtis: asociatyvus variklis, lankstus duomenų derinimas iš kelių šaltinių.

  • Kaip jungtis: Qlik Script (REST connector) nurodant endpoint'ą, antraštes, puslapiavimą.

  • Kaip pasiimti ERP duomenis per endpoint (skripto pavyzdys):

    LET vBaseUrl = 'https://api.rivile.cloud';
    LET vApiKey = '$(include=api_key.txt)'; // arba nustatykite kaip kintamąjį saugiai
    LET vFrom = '2025-01-01';
    LET vTo = '2025-12-31';
    LET vFilter = Replace(Replace(JsonSerialize('{
      "from":"$(vFrom)",
      "to":"$(vTo)"
    }'), chr(10), ''), ' ', '');
    LET vUrl = '$(vBaseUrl)/bi/collect?type=PAYMENTS&filter=' & UrlEncode(vFilter);
    
    RESTConnectorMasterTable:
    SQL SELECT 
      "status",
      "success/data/payments" AS payments
    FROM JSON (wrap on) "$(vUrl)"
    WITH CONNECTION (HTTPHEADER "X-SessionToken" "$(vApiKey)");
    
    Payments:
    LOAD *
    RESIDENT RESTConnectorMasterTable;
    DROP TABLE RESTConnectorMasterTable;
  • Pastaba: prieš naudojant aukščiau esantį skriptą, Qlik aplinkoje sukurkite REST Connection (pvz., RivileREST) ir skripto pradžioje pridėkite LIB CONNECT TO 'RivileREST';. WITH CONNECTION bloke nurodykite URL "$(vUrl)" ir antraštę HTTPHEADER "X-SessionToken" "$(vApiKey)". Realioje apklausoje REST Connector dažniausiai sukuria „Master/Child“ lenteles, kurias reikia sujungti pagal generuojamus raktus (__KEY__, __FK__).


ETL ir tarpinis sluoksnis (pasirinktinai)

  • Kai analitikos įrankis turi ribotą REST palaikymą arba duomenų daug, rekomenduojame naudoti ETL įrankį (pvz., n8n, Airflow, Pentaho, Azure Data Factory) ir duomenis krauti į:
    • Debesų duomenų sandėlį: BigQuery, Snowflake, Azure SQL/Synapse.
    • RDBMS: PostgreSQL, MySQL, SQL Server.
  • Privalumai: kontrolė dėl klaidų, pakartojamumas, našumas, istorinių duomenų saugojimas.

Saugumas ir prieiga

  • Slaptai laikykite autentifikacijos raktus.

Analitikos API užklausos kainuoja

  • Kaupimas ir detaliame lygyje agregavimas ERP duomenų reikalauja daug resursų, todėl šios užklauso kainuoja papildomai.
  • Daugiau apie analitikos API užklausų kainodarą pasidomėkite ERP kainodaros puslapyje.

Integraciniai sprendimai