Langage de requête MiroxQL
MiroxQL (Mirox Query Language) est la manière canonique de définir des métriques calculées personnalisées sur la plateforme Mirox. Vous écrivez une courte formule qui combine vos métriques d'export existantes en une nouvelle métrique, et celle-ci devient disponible partout où les métriques d'export sont utilisées — l'accès programmatique à vos données passe par MiroxQL et l'API d'export de métriques, et non par une intégration distincte de données brutes.
Vue d'ensemble
MiroxQL est un langage d'expression simple pour définir des métriques calculées personnalisées basées sur des métriques existantes. Il vous permet de créer des indicateurs de performance sur mesure, de combiner plusieurs sources de données et d'implémenter une logique métier personnalisée sans écrire de code.
Qu'est-ce que MiroxQL ?
MiroxQL vous permet de transformer et de combiner les métriques d'export existantes en nouvelles métriques calculées. Tous les calculs sont effectués côté serveur, garantissant la cohérence et éliminant le besoin de post-traitement.
MiroxQL est un nom commercial pour la fonctionnalité de formules de métriques
« MiroxQL » est le nom de présentation de la capacité de formules de métriques personnalisées. Il n'existe aucun endpoint littéralement appelé MiroxQL — vos formules sont créées et gérées via l'API de formules de métriques à /v1/export/metric/formula et deviennent disponibles partout où les métriques d'export sont utilisées.
Ouvrir dans Mirox : créez et gérez vos formules dans l'éditeur de formules sous Export de données ▸ Métriques. Sur la page Export de données, ouvrez l'onglet Métriques pour ajouter une métrique personnalisée et écrire sa formule MiroxQL.
Concepts clés
Références de métriques
Toutes les références de métriques dans MiroxQL doivent être préfixées par le symbole @ :
@energy_grid_daily
@gti_sensor_daily
@availability_technical
Les ID de métriques doivent correspondre à des métriques d'export valides disponibles dans le système. Consultez Métriques d'export disponibles pour la liste complète.
Références de configuration
Les valeurs de configuration d'un parc peuvent être référencées à l'aide du préfixe $ avec la notation par points :
$park.peak_production_w
$park.latitude
$park.information.inverter_max_power_w
Cela permet aux formules d'utiliser des valeurs configurées telles que la puissance installée, l'emplacement et les détails de construction de la centrale. Les champs de configuration disponibles sont :
| Référence | Description | Unité |
|---|---|---|
$park.peak_production_w | Capacité de production crête totale | W |
$park.latitude | Latitude géographique | ° |
$park.longitude | Longitude géographique | ° |
$park.self_consumption | Facteur d'autoconsommation (0,0 à 1,0) | ratio |
$park.information.string_peak_power_w | Puissance crête totale de tous les strings | W |
$park.information.inverter_max_power_w | Capacité de puissance maximale des onduleurs | W |
$park.information.inverter_total | Nombre d'onduleurs | — |
$park.information.gak_total | Nombre de boîtes de jonction générateur (GAK) | — |
$park.information.strings_total | Nombre de strings | — |
$park.information.modules_total | Nombre de modules solaires | — |
Ce sont les mêmes champs proposés par la liste des champs de configuration de l'éditeur de formules, vous pouvez donc confirmer l'ensemble actuel directement dans l'application.
Types de données
MiroxQL fonctionne avec des valeurs numériques :
- Entiers :
1000,42,365 - Décimaux :
0.85,3.14,99.5 - Résultats : tous les calculs renvoient des nombres à virgule flottante
Opérations prises en charge
Opérations arithmétiques
| Opérateur | Description | Exemple | Résultat |
|---|---|---|---|
+ | Addition | @energy_grid_daily + @energy_shutdown_grid_daily | Somme des valeurs |
- | Soustraction | @production_actual - @energy_grid_daily | Différence |
* | Multiplication | @specific_yield * 1000 | Valeur mise à l'échelle |
/ | Division | @energy_grid_daily / $park.peak_production_w | Ratio |
% | Modulo | @value % 100 | Reste |
Division par zéro : renvoie automatiquement 0 au lieu de générer une erreur.
Opérations de comparaison
| Opérateur | Description | Exemple | Résultat |
|---|---|---|---|
== | Égal à | @gti_weather_daily == 0 | Booléen (1 ou 0) |
!= | Différent de | @gti_sensor_daily != 0 | Booléen |
< | Inférieur à | @availability_technical < 95 | Booléen |
<= | Inférieur ou égal | @temperature <= 25 | Booléen |
> | Supérieur à | @gti_sensor_daily > 0 | Booléen |
>= | Supérieur ou égal | @pr_actual >= @pr_target | Booléen |
Opérations logiques
| Opérateur | Description | Exemple | Résultat |
|---|---|---|---|
&& | ET logique | @gti_sensor_daily > 0 && @energy_grid_daily > 0 | Les deux doivent être vrais |
|| | OU logique | @gti_sensor_daily == 0 || @gti_weather_daily == 0 | Au moins un vrai |
! | NON logique | !(@availability_technical < 95) | Inverse le booléen |
Expressions conditionnelles
L'opérateur ternaire permet une logique conditionnelle :
condition ? value_if_true : value_if_false
Exemple : utiliser les données du capteur si disponibles, sinon utiliser les données météo
@gti_sensor_daily > 0 ? @gti_sensor_daily : @gti_weather_daily
Fonctions
| Fonction | Description | Exemple | Résultat |
|---|---|---|---|
max(a, b) | Renvoie le maximum de deux valeurs | max(@energy_grid_daily, 0) | Valeur la plus grande |
min(a, b) | Renvoie le minimum de deux valeurs | min(@availability, 100) | Valeur la plus petite |
Priorité des opérateurs
Les opérations sont évaluées dans l'ordre suivant (du plus élevé au plus bas) :
- Parenthèses
() - Fonctions
max(),min() - Multiplication, Division, Modulo
*,/,% - Addition, Soustraction
+,- - Comparaison
<,<=,>,>= - Égalité
==,!= - ET logique
&& - OU logique
||
Utilisez des parenthèses pour modifier la priorité : (@a + @b) * @c
Création de métriques personnalisées
Les formules MiroxQL peuvent être utilisées pour créer des métriques personnalisées qui sont calculées à la demande et rendues disponibles pour l'export aux côtés des métriques standard. Chaque métrique personnalisée nécessite plusieurs paramètres de configuration :
Configuration de la métrique
ID de métrique (metric_id) :
- Identifiant unique de la métrique
- Doit commencer par une lettre ou un trait de soulignement
- Peut contenir des lettres, des chiffres et des traits de soulignement
- Exemple :
pr_weather_corrected,specific_yield_normalized
Nom (name) :
- Nom d'affichage lisible par l'humain
- Utilisé dans les exports et les rapports
- Exemple : « Performance Ratio (corrigé météo) »
Description (description) :
- Explication facultative de ce que calcule la métrique
- Aide les autres utilisateurs à comprendre l'objectif de la métrique
Unité (unit) :
- Unité de mesure de la métrique
- Exemple :
kWh,%,Wh/W,kWh/m²
Formule (formula) :
- L'expression MiroxQL qui calcule la valeur de la métrique
- Doit référencer au moins une métrique existante avec le préfixe
@ - Exemple :
(@energy_grid_daily + @energy_shutdown_grid_daily) / @energy_report * 100
Paramètres d'échelle et de décimales
Unités brutes et facteurs d'échelle
Calculez toujours les formules en unités brutes (non converties en kilo, méga, etc.) et utilisez le paramètre scale pour convertir lors de l'export. Ceci est crucial lorsque des formules dépendent d'autres résultats de formules.
Exemple : calculez l'énergie en Wh (brut), puis définissez scale=0.001 pour l'exporter en kWh.
Formule : @energy_grid_daily + @energy_shutdown_grid_daily
Unité : kWh
Échelle : 0.001 # Divise le résultat par 1000 lors de l'export
Le facteur d'échelle est appliqué uniquement lors de l'export des données, pas lors du calcul de la formule. Cela garantit que les formules dépendantes reçoivent des valeurs non mises à l'échelle et peuvent effectuer des calculs précis.
Échelle (scale) :
- Facteur d'échelle appliqué au résultat lors de l'export
- Par défaut :
1.0(aucune mise à l'échelle) - Valeurs courantes :
0.001- Convertir Wh en kWh0.000001- Convertir Wh en MWh100- Convertir un ratio en pourcentage
- Formule appliquée :
exported_value = calculated_value * scale
Décimales (digits) :
- Nombre de décimales pour l'arrondi dans les exports
- Plage : 0-10, par défaut : 2
- Appliqué uniquement lors de l'export, pas lors du calcul
Arrondi lors de l'export uniquement
Le paramètre digits contrôle l'arrondi pour l'export de données uniquement, pas pour les calculs de formules. Les calculs internes utilisent toujours la pleine précision afin d'éviter les erreurs d'arrondi cumulatives.
Exemple : une formule calculant @energy_grid_daily / $park.peak_production_w pourrait produire 0.003456789. Avec digits=4, elle s'exporte en 0.0035, mais les autres formules référençant cette métrique utilisent toujours la valeur en pleine précision 0.003456789.
Périodes de calcul et méthodes d'agrégation
Le système prend en charge deux méthodes d'agrégation pour les métriques personnalisées, qui peuvent être configurées lors de l'export via l'API.
Agrégation quotidienne (par défaut) :
La formule s'exécute une fois par jour en utilisant les valeurs quotidiennes des métriques. Les résultats quotidiens sont ensuite additionnés ou moyennés pour la période d'export. C'est idéal pour les sommes d'énergie et les calculs de performance quotidiens.
Exemple - Formule de somme d'énergie :
Formule : @energy_grid_daily + @energy_shutdown_grid_daily
Pour un export mensuel :
- Jour 1 :
1000 + 50 = 1050kWh - Jour 2 :
1100 + 45 = 1145kWh - ... (se poursuit pour tous les jours)
- Total mensuel : somme de tous les résultats quotidiens =
1050 + 1145 + ...
Agrégation par période :
Les métriques de base sont d'abord agrégées sur la période (totaux hebdomadaires/mensuels), puis la formule s'exécute une fois sur ces valeurs agrégées. C'est idéal pour les ratios de performance et les calculs d'efficacité sur des périodes.
Exemple - Formule de performance ratio :
Formule : @energy_grid_daily / @energy_report * 100
Pour un export mensuel :
- Énergie réseau mensuelle : somme de toutes les valeurs quotidiennes
@energy_grid_daily - Énergie cible mensuelle : somme de toutes les valeurs quotidiennes
@energy_report - PR mensuel :
monthly_grid_energy / monthly_target_energy * 100
Choix de la méthode d'agrégation
Utilisez l'agrégation quotidienne pour calculer quotidiennement et additionner/moyenner les résultats (par exemple, sommes d'énergie). Utilisez l'agrégation par période pour calculer sur la base des totaux de la période (par exemple, ratios de performance mensuels). La méthode d'agrégation est spécifiée lors de la configuration de l'export via l'API.
Exemple de métrique personnalisée
Exemple complet d'une définition de métrique personnalisée :
{
"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"
}
Cela crée une métrique qui :
- Calcule en Wh (unité brute)
- Exporte en kWh (mise à l'échelle par 0,001)
- Arrondit à 2 décimales dans les exports
- Conserve la pleine précision pour les formules dépendantes
Exemples de formules
Calculs de base
Énergie totale incluant les pertes
@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily
Productible spécifique (Wh par watt installé)
@energy_grid_daily / $park.peak_production_w
Performance ratio (réel vs. cible)
(@energy_grid_daily / @energy_target) * 100
Logique conditionnelle
Irradiance validée (préférer le capteur, repli sur la météo)
@gti_sensor_daily > 0 ? @gti_sensor_daily : @gti_weather_daily
Indicateur d'utilisation des données météo
@gti_sensor_daily > 0 ? 0 : 100
Disponibilité plafonnée (ne jamais dépasser 100 %)
min(@availability_calculated, 100)
Validation complexe
Données de capteur validées (avec contrôle de qualité)
@gti_sensor_daily > 0 && (@gti_weather_daily == 0 || (@gti_sensor_daily / @gti_weather_daily) >= 0.2) ? @gti_sensor_daily : @gti_weather_daily
Cette formule :
- Vérifie si les données du capteur existent (
@gti_sensor_daily > 0) - Valide que le capteur est raisonnable par rapport à la météo (au moins 20 % de la valeur météo)
- Utilise le capteur s'il est valide, sinon utilise les données météo
Cibles de production
Production théorique à partir de la météo
(@gti_weather_daily / 1000) * $park.peak_production_w * 0.85
Ceci calcule la production attendue en fonction de :
- L'irradiance météo (convertie de Wh/m² en kWh/m²)
- La puissance installée
- L'efficacité système supposée (0,85 ou 85 %)
Production avec ajustement des pertes
max(@energy_grid_daily - @losses_noncompensable, 0)
Garantit que le résultat n'est jamais négatif grâce à max().
Ratios de performance
Performance ratio (corrigé des pertes)
(@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily) / @energy_target * 100
Indice de performance du rapport
(@pr_actual_corrected / @pr_report) * 100
Analyse des pertes
Pertes compensables totales
@energy_shutdown_grid_daily + @energy_shutdown_external_daily
Pourcentage de pertes
(@energy_shutdown_grid_daily + @energy_shutdown_external_daily) / (@energy_grid_daily + @energy_shutdown_grid_daily + @energy_shutdown_external_daily) * 100
Pertes non compensables
max(@energy_target - @energy_grid_daily - @energy_shutdown_grid_daily - @energy_shutdown_external_daily, 0)
Bonnes pratiques
Conception des formules
- Gardez les formules simples : décomposez les calculs complexes en plusieurs métriques
- Utilisez des noms parlants : nommez clairement les métriques calculées (
pr_weather_based, pascalc1) - Documentez les hypothèses : notez les facteurs d'efficacité, les conversions ou la logique particulière
- Gérez les cas limites : utilisez la logique conditionnelle pour éviter la division par zéro ou les valeurs négatives
- Validez les résultats : testez les formules avec des données connues avant le déploiement
Dépendances entre métriques
Lors de l'utilisation de métriques calculées dans d'autres formules :
- Évitez les dépendances circulaires : la métrique A ne peut pas dépendre de la métrique B si B dépend de A
- Construisez hiérarchiquement : métriques de base → calculs intermédiaires → métriques finales
- Réutilisez les composants : créez des métriques intermédiaires réutilisables pour les calculs courants
Conversions d'unités
Soyez attentif aux unités lors de la combinaison de métriques :
# Convertir kWh/m² en Wh/m² en multipliant par 1000
(@gti_sensor_daily * 1000)
# Convertir Wh en kWh en divisant par 1000
(@production_wh / 1000)
# Normaliser l'énergie par la puissance installée (Wh par watt)
@energy_grid_daily / $park.peak_production_w
Données nulles/manquantes
MiroxQL traite les données manquantes comme 0. Pour gérer explicitement les données manquantes :
# Vérifier si les données existent avant de les utiliser
@metric > 0 ? @metric : @fallback_metric
# Indiquer lorsque les données sont manquantes
@metric > 0 ? 1 : 0
Validation des formules
Exigences de syntaxe
Les formules valides doivent :
- Référencer au moins une métrique (avec le préfixe
@) ou une valeur de configuration (avec le préfixe$) - Avoir des parenthèses équilibrées
- Ne pas avoir d'opérateurs consécutifs (sauf avec
!) - Utiliser une syntaxe d'opérateur valide
Erreurs courantes
| Erreur | Cause | Solution |
|---|---|---|
Préfixe @ manquant | energy_grid_daily + 100 | Ajouter le préfixe : @energy_grid_daily + 100 |
| Parenthèses déséquilibrées | (@a + @b | Fermer les parenthèses : (@a + @b) |
| ID de métrique invalide | @nonexistent_metric | Utiliser un ID de métrique valide |
| Opérateurs consécutifs | @a + * @b | Supprimer l'opérateur en trop : @a * @b |
| Valeur de configuration manquante | $park.missing_value | S'assurer que la configuration existe |
Intégration avec les modèles d'export
Les métriques calculées utilisant MiroxQL peuvent être incluses dans les modèles d'export :
- Définir la formule : créez une métrique personnalisée avec une formule MiroxQL
- Ajouter au modèle : incluez l'ID de la métrique dans un modèle d'export
- Exporter les données : la métrique est calculée à la demande lors de l'export
Pour la gestion des modèles, consultez API d'export de métriques - Système de modèles.
Cas d'usage
Supervision de la performance
Créez des KPI adaptés à vos besoins spécifiques :
- Ratios de performance personnalisés
- Métriques de disponibilité ajustées
- Catégorisation des pertes
Conformité contractuelle
Implémentez des calculs spécifiques aux contrats :
- Garanties de performance avec exclusions
- Pertes compensables vs. non compensables
- Cibles de production ajustées
Analyse de portefeuille
Agrégez et normalisez entre parcs :
- Productible spécifique normalisé
- Comparaisons ajustées à la météo
- Étalonnage de l'efficacité
Intelligence opérationnelle
Dégagez des informations exploitables :
- Indicateurs de qualité des données
- Scores de santé du système
- Indicateurs de détection d'anomalies
Limitations
Considérations de performance
- Les formules sont évaluées pour chaque période de l'export
- Les formules très complexes peuvent affecter la performance de l'export
- Les dépendances récursives augmentent le temps de calcul
Portée du calcul
- Les formules opèrent sur des valeurs agrégées quotidiennement
- Ne peuvent pas accéder à une granularité infra-journalière
- Ne peuvent pas effectuer de calculs rétrospectifs ou par fenêtre glissante
- Ne peuvent pas accéder aux données historiques au-delà de la ligne courante
Disponibilité des données
- Les métriques calculées nécessitent que toutes les métriques dépendantes soient disponibles
- L'absence de métriques de base entraîne des métriques calculées incomplètes
- Les valeurs de configuration doivent être définies dans la configuration du parc
Documentation connexe
- API d'export de métriques - Métriques d'export et modèles
- Rapports - Utilisation des métriques calculées dans les rapports
- Génération de rapports externes - Flux de travail automatisés
- Architecture de collecte des métriques - Comprendre les métriques brutes