Linguaggio di query MiroxQL
MiroxQL (Mirox Query Language) è il modo canonico per definire metriche calcolate personalizzate sulla piattaforma Mirox. Scrivi una breve formula che combina le tue metriche di esportazione esistenti in una nuova metrica, e questa diventa disponibile ovunque vengano utilizzate le metriche di esportazione — l'accesso programmatico ai tuoi dati passa attraverso MiroxQL e l'API di esportazione metriche, non attraverso alcuna integrazione separata di dati grezzi.
Panoramica
MiroxQL è un semplice linguaggio di espressioni per definire metriche calcolate personalizzate basate su metriche esistenti. Ti consente di creare indicatori di performance su misura, combinare più fonti di dati e implementare logiche di business personalizzate senza scrivere codice.
Che cos'è MiroxQL?
MiroxQL ti permette di trasformare e combinare le metriche di esportazione esistenti in nuove metriche calcolate. Tutti i calcoli vengono eseguiti lato server, garantendo coerenza ed eliminando la necessità di post-elaborazione.
MiroxQL è il nome commerciale della funzionalità di formule per metriche
"MiroxQL" è il nome di presentazione della funzionalità di formule personalizzate per le metriche. Non esiste un endpoint chiamato letteralmente MiroxQL — le tue formule vengono create e gestite tramite l'API delle formule per metriche all'indirizzo /v1/export/metric/formula e diventano disponibili ovunque vengano utilizzate le metriche di esportazione.
Apri in Mirox: crea e gestisci le tue formule nell'editor di formule sotto Esportazione dati ▸ Metriche. Nella pagina Esportazione dati, apri la scheda Metriche per aggiungere una metrica personalizzata e scrivere la sua formula MiroxQL.
Concetti chiave
Riferimenti alle metriche
Tutti i riferimenti alle metriche in MiroxQL devono essere preceduti dal simbolo @:
@energy_grid_daily
@gti_sensor_daily
@availability_technical
Gli ID delle metriche devono corrispondere a metriche di esportazione valide disponibili nel sistema. Consulta Metriche di esportazione disponibili per l'elenco completo.
Riferimenti alla configurazione
I valori di configurazione del parco possono essere referenziati usando il prefisso $ con la notazione a punti:
$park.peak_production_w
$park.latitude
$park.information.inverter_max_power_w
Questo consente alle formule di utilizzare valori configurati come capacità installata, posizione e dettagli costruttivi dell'impianto. I campi di configurazione disponibili sono:
| Riferimento | Descrizione | Unità |
|---|---|---|
$park.peak_production_w | Capacità di produzione di picco totale | W |
$park.latitude | Latitudine geografica | ° |
$park.longitude | Longitudine geografica | ° |
$park.self_consumption | Fattore di autoconsumo (da 0.0 a 1.0) | rapporto |
$park.information.string_peak_power_w | Potenza di picco totale di tutte le stringhe | W |
$park.information.inverter_max_power_w | Capacità massima di potenza degli inverter | W |
$park.information.inverter_total | Numero di inverter | — |
$park.information.gak_total | Numero di quadri di campo (GAK) | — |
$park.information.strings_total | Numero di stringhe | — |
$park.information.modules_total | Numero di moduli solari | — |
Questi sono gli stessi campi proposti dall'elenco dei campi di configurazione dell'editor di formule, così puoi verificare direttamente nell'app l'insieme attuale.
Tipi di dati
MiroxQL lavora con valori numerici:
- Interi:
1000,42,365 - Decimali:
0.85,3.14,99.5 - Risultati: tutti i calcoli restituiscono numeri in virgola mobile
Operazioni supportate
Operazioni aritmetiche
| Operatore | Descrizione | Esempio | Risultato |
|---|---|---|---|
+ | Addizione | @energy_grid_daily + @energy_shutdown_grid_daily | Somma dei valori |
- | Sottrazione | @production_actual - @energy_grid_daily | Differenza |
* | Moltiplicazione | @specific_yield * 1000 | Valore scalato |
/ | Divisione | @energy_grid_daily / $park.peak_production_w | Rapporto |
% | Modulo | @value % 100 | Resto |
Divisione per zero: restituisce automaticamente 0 invece di generare un errore.
Operazioni di confronto
| Operatore | Descrizione | Esempio | Risultato |
|---|---|---|---|
== | Uguale a | @gti_weather_daily == 0 | Booleano (1 o 0) |
!= | Diverso da | @gti_sensor_daily != 0 | Booleano |
< | Minore di | @availability_technical < 95 | Booleano |
<= | Minore o uguale | @temperature <= 25 | Booleano |
> | Maggiore di | @gti_sensor_daily > 0 | Booleano |
>= | Maggiore o uguale | @pr_actual >= @pr_target | Booleano |
Operazioni logiche
| Operatore | Descrizione | Esempio | Risultato |
|---|---|---|---|
&& | AND logico | @gti_sensor_daily > 0 && @energy_grid_daily > 0 | Entrambi devono essere veri |
|| | OR logico | @gti_sensor_daily == 0 || @gti_weather_daily == 0 | Almeno uno vero |
! | NOT logico | !(@availability_technical < 95) | Inverte il booleano |
Espressioni condizionali
L'operatore ternario consente la logica condizionale:
condition ? value_if_true : value_if_false
Esempio: usa i dati del sensore se disponibili, altrimenti usa i dati meteorologici
@gti_sensor_daily > 0 ? @gti_sensor_daily : @gti_weather_daily
Funzioni
| Funzione | Descrizione | Esempio | Risultato |
|---|---|---|---|
max(a, b) | Restituisce il massimo tra due valori | max(@energy_grid_daily, 0) | Valore maggiore |
min(a, b) | Restituisce il minimo tra due valori | min(@availability, 100) | Valore minore |
Precedenza degli operatori
Le operazioni vengono valutate nel seguente ordine (dalla più alta alla più bassa):
- Parentesi
() - Funzioni
max(),min() - Moltiplicazione, divisione, modulo
*,/,% - Addizione, sottrazione
+,- - Confronto
<,<=,>,>= - Uguaglianza
==,!= - AND logico
&& - OR logico
||
Usa le parentesi per modificare la precedenza: (@a + @b) * @c
Creazione di metriche personalizzate
Le formule MiroxQL possono essere utilizzate per creare metriche personalizzate calcolate su richiesta e rese disponibili per l'esportazione insieme alle metriche standard. Ogni metrica personalizzata richiede diversi parametri di configurazione:
Configurazione della metrica
ID metrica (metric_id):
- Identificatore univoco per la metrica
- Deve iniziare con una lettera o un trattino basso
- Può contenere lettere, numeri e trattini bassi
- Esempio:
pr_weather_corrected,specific_yield_normalized
Nome (name):
- Nome visualizzato leggibile
- Utilizzato nelle esportazioni e nei report
- Esempio: "Performance Ratio (corretto per il meteo)"
Descrizione (description):
- Spiegazione opzionale di ciò che la metrica calcola
- Aiuta gli altri utenti a comprendere lo scopo della metrica
Unità (unit):
- Unità di misura per la metrica
- Esempio:
kWh,%,Wh/W,kWh/m²
Formula (formula):
- L'espressione MiroxQL che calcola il valore della metrica
- Deve fare riferimento ad almeno una metrica esistente con il prefisso
@ - Esempio:
(@energy_grid_daily + @energy_shutdown_grid_daily) / @energy_report * 100
Parametri di scala e cifre
Unità grezze e fattori di scala
Calcola sempre le formule in unità grezze (non convertite in kilo, mega, ecc.) e usa il parametro scale per convertire durante l'esportazione. Questo è fondamentale quando le formule hanno dipendenze dai risultati di altre formule.
Esempio: calcola l'energia in Wh (grezza), poi imposta scale=0.001 per esportare in kWh.
Formula: @energy_grid_daily + @energy_shutdown_grid_daily
Unit: kWh
Scale: 0.001 # Divide il risultato per 1000 durante l'esportazione
Il fattore di scala viene applicato solo durante l'esportazione dei dati, non durante il calcolo della formula. Questo garantisce che le formule dipendenti ricevano valori non scalati e possano eseguire calcoli accurati.
Scala (scale):
- Fattore di scala applicato al risultato durante l'esportazione
- Predefinito:
1.0(nessuna scala) - Valori comuni:
0.001- Converte Wh in kWh0.000001- Converte Wh in MWh100- Converte un rapporto in percentuale
- Formula applicata:
exported_value = calculated_value * scale
Cifre (digits):
- Numero di cifre decimali per l'arrotondamento nelle esportazioni
- Intervallo: 0-10, predefinito: 2
- Applicato solo durante l'esportazione, non durante il calcolo
Arrotondamento solo durante l'esportazione
Il parametro digits controlla l'arrotondamento solo per l'esportazione dei dati, non per i calcoli delle formule. I calcoli interni utilizzano sempre la massima precisione per evitare errori di arrotondamento cumulativi.
Esempio: una formula che calcola @energy_grid_daily / $park.peak_production_w potrebbe produrre 0.003456789. Con digits=4, viene esportata come 0.0035, ma le altre formule che fanno riferimento a questa metrica utilizzano comunque il valore alla massima precisione 0.003456789.
Periodi di calcolo e metodi di aggregazione
Il sistema supporta due metodi di aggregazione per le metriche personalizzate, configurabili durante l'esportazione tramite API.
Aggregazione giornaliera (predefinita):
La formula viene eseguita una volta al giorno utilizzando i valori giornalieri delle metriche. I risultati giornalieri vengono quindi sommati o mediati per il periodo di esportazione. Questo è ideale per le somme di energia e i calcoli di performance giornaliera.
Esempio - Formula di somma dell'energia:
Formula: @energy_grid_daily + @energy_shutdown_grid_daily
Per un'esportazione mensile:
- Giorno 1:
1000 + 50 = 1050kWh - Giorno 2:
1100 + 45 = 1145kWh - ... (continua per tutti i giorni)
- Totale mensile: somma di tutti i risultati giornalieri =
1050 + 1145 + ...
Aggregazione per periodo:
Le metriche di base vengono prima aggregate al periodo (totali settimanali/mensili), quindi la formula viene eseguita una volta su questi valori aggregati. Questo è ideale per i performance ratio e i calcoli di efficienza su periodi.
Esempio - Formula del performance ratio:
Formula: @energy_grid_daily / @energy_report * 100
Per un'esportazione mensile:
- Energia di rete mensile: somma di tutti i valori giornalieri di
@energy_grid_daily - Energia obiettivo mensile: somma di tutti i valori giornalieri di
@energy_report - PR mensile:
monthly_grid_energy / monthly_target_energy * 100
Scelta del metodo di aggregazione
Usa l'aggregazione giornaliera per calcolare giorno per giorno e sommare/mediare i risultati (ad es. somme di energia). Usa l'aggregazione per periodo per calcolare in base ai totali del periodo (ad es. performance ratio mensili). Il metodo di aggregazione viene specificato durante la configurazione dell'esportazione tramite API.
Esempio di metrica personalizzata
Esempio completo di una definizione di metrica personalizzata:
{
"metric_id": "energy_total_incl_losses",
"name": "Total Energy Including Losses",
"description": "Sum of grid energy and all shutdown losses",
"unit": "kWh",
"scale": 0.001,
"digits": 2,
"formula": "@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily"
}
Questo crea una metrica che:
- Calcola in Wh (unità grezza)
- Esporta in kWh (scalata di 0.001)
- Arrotonda a 2 cifre decimali nelle esportazioni
- Mantiene la massima precisione per le formule dipendenti
Esempi di formule
Calcoli di base
Energia totale comprese le perdite
@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily
Resa specifica (Wh per Watt installato)
@energy_grid_daily / $park.peak_production_w
Performance Ratio (effettivo vs. obiettivo)
(@energy_grid_daily / @energy_target) * 100
Logica condizionale
Irraggiamento validato (preferisci il sensore, fallback sul meteo)
@gti_sensor_daily > 0 ? @gti_sensor_daily : @gti_weather_daily
Indicatore di utilizzo dei dati meteorologici
@gti_sensor_daily > 0 ? 0 : 100
Disponibilità limitata (mai superiore al 100%)
min(@availability_calculated, 100)
Validazione complessa
Dati del sensore validati (con controllo qualità)
@gti_sensor_daily > 0 && (@gti_weather_daily == 0 || (@gti_sensor_daily / @gti_weather_daily) >= 0.2) ? @gti_sensor_daily : @gti_weather_daily
Questa formula:
- Verifica se esistono dati del sensore (
@gti_sensor_daily > 0) - Valida che il sensore sia ragionevole rispetto al meteo (almeno il 20% del valore meteorologico)
- Usa il sensore se valido, altrimenti usa i dati meteorologici
Obiettivi di produzione
Produzione teorica dal meteo
(@gti_weather_daily / 1000) * $park.peak_production_w * 0.85
Questo calcola la produzione attesa in base a:
- Irraggiamento meteorologico (convertito da Wh/m² a kWh/m²)
- Capacità installata
- Efficienza di sistema presunta (0.85 o 85%)
Produzione con correzione delle perdite
max(@energy_grid_daily - @losses_noncompensable, 0)
Garantisce che il risultato non sia mai negativo usando max().
Performance ratio
Performance Ratio (corretto per le perdite)
(@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily) / @energy_target * 100
Indice di performance del report
(@pr_actual_corrected / @pr_report) * 100
Analisi delle perdite
Perdite compensabili totali
@energy_shutdown_grid_daily + @energy_shutdown_external_daily
Percentuale di perdite
(@energy_shutdown_grid_daily + @energy_shutdown_external_daily) / (@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily) * 100
Perdite non compensabili
max(@energy_target - @energy_grid_daily - @energy_shutdown_grid_daily - @energy_shutdown_external_daily, 0)
Best practice
Progettazione delle formule
- Mantieni le formule semplici: suddividi i calcoli complessi in più metriche
- Usa nomi significativi: assegna nomi chiari alle metriche calcolate (
pr_weather_based, noncalc1) - Documenta le assunzioni: annota fattori di efficienza, conversioni o logiche speciali
- Gestisci i casi limite: usa la logica condizionale per evitare divisioni per zero o valori negativi
- Valida i risultati: testa le formule con dati noti prima della distribuzione
Dipendenze tra metriche
Quando utilizzi metriche calcolate in altre formule:
- Evita dipendenze circolari: la metrica A non può dipendere dalla metrica B se B dipende da A
- Costruisci gerarchicamente: metriche di base → calcoli intermedi → metriche finali
- Riutilizza i componenti: crea metriche intermedie riutilizzabili per i calcoli comuni
Conversioni di unità
Presta attenzione alle unità quando combini le metriche:
# Converti kWh/m² in Wh/m² moltiplicando per 1000
(@gti_sensor_daily * 1000)
# Converti Wh in kWh dividendo per 1000
(@production_wh / 1000)
# Normalizza l'energia per la capacità installata (Wh per Watt)
@energy_grid_daily / $park.peak_production_w
Dati nulli/mancanti
MiroxQL tratta i dati mancanti come 0. Per gestire esplicitamente i dati mancanti:
# Verifica se i dati esistono prima di usarli
@metric > 0 ? @metric : @fallback_metric
# Indica quando i dati sono mancanti
@metric > 0 ? 1 : 0
Validazione delle formule
Requisiti di sintassi
Le formule valide devono:
- Fare riferimento ad almeno una metrica (con prefisso
@) o a un valore di configurazione (con prefisso$) - Avere parentesi bilanciate
- Non avere operatori consecutivi (eccetto con
!) - Usare una sintassi degli operatori valida
Errori comuni
| Errore | Causa | Soluzione |
|---|---|---|
Prefisso @ mancante | energy_grid_daily + 100 | Aggiungi il prefisso: @energy_grid_daily + 100 |
| Parentesi non bilanciate | (@a + @b | Chiudi le parentesi: (@a + @b) |
| ID metrica non valido | @nonexistent_metric | Usa un ID metrica valido |
| Operatori consecutivi | @a + * @b | Rimuovi l'operatore in eccesso: @a * @b |
| Valore di configurazione mancante | $park.missing_value | Assicurati che la configurazione esista |
Integrazione con i modelli di esportazione
Le metriche calcolate che usano MiroxQL possono essere incluse nei modelli di esportazione:
- Definisci la formula: crea una metrica personalizzata con una formula MiroxQL
- Aggiungi al modello: includi l'ID della metrica in un modello di esportazione
- Esporta i dati: la metrica viene calcolata su richiesta durante l'esportazione
Per la gestione dei modelli, consulta API di esportazione metriche - Sistema di modelli.
Casi d'uso
Monitoraggio delle performance
Crea KPI su misura per le tue esigenze specifiche:
- Performance ratio personalizzati
- Metriche di disponibilità corrette
- Categorizzazione delle perdite
Conformità contrattuale
Implementa calcoli specifici per il contratto:
- Garanzie di performance con esclusioni
- Perdite compensabili vs. non compensabili
- Obiettivi di produzione corretti
Analisi del portfolio
Aggrega e normalizza tra i parchi:
- Resa specifica normalizzata
- Confronti corretti per il meteo
- Benchmarking dell'efficienza
Intelligence operativa
Ricava insight utilizzabili:
- Indicatori di qualità dei dati
- Punteggi di salute del sistema
- Flag di rilevamento anomalie
Limitazioni
Considerazioni sulle performance
- Le formule vengono valutate per ogni periodo di tempo nell'esportazione
- Formule molto complesse possono influire sulle performance di esportazione
- Le dipendenze ricorsive aumentano il tempo di calcolo
Ambito di calcolo
- Le formule operano su valori aggregati giornalieri
- Non possono accedere a granularità inferiori al giorno
- Non possono eseguire calcoli con lookback o finestre mobili
- Non possono accedere a dati storici oltre la riga corrente
Disponibilità dei dati
- Le metriche calcolate richiedono che tutte le metriche dipendenti siano disponibili
- Le metriche di base mancanti producono metriche calcolate incomplete
- I valori di configurazione devono essere impostati nella configurazione del parco
Documentazione correlata
- API di esportazione metriche - Metriche di esportazione e modelli
- Report - Utilizzo delle metriche calcolate nei report
- Generazione di report esterni - Workflow automatizzati
- Architettura di raccolta delle metriche - Comprendere le metriche grezze