Dans le backend, je compile certains résultats d'enquête générés à partir de RSForm Pro et je veux afficher les statistiques graphiquement à l'aide d'un graphique circulaire PlotALot.
Mon formulaire a 4 valeurs possibles pour cette question particulière: Australia
, NewZealand
, Oceania
et Other
.
J'ai commencé avec la requête suivante dans la zone de texte sql de l'onglet Plot1:
SELECT FieldValue, COUNT(1)
FROM jprefix_rsform_submission_values
WHERE FormId = 8
AND FieldName = 'Location'
GROUP BY 1
ORDER BY 2 DESC
Cependant, cela omet tout emplacement dont le nombre est nul. Pour m'assurer que tous les emplacements possibles étaient inclus, j'ai dérivé une table des emplacements par défaut via une sous-requête, puis j'ai joint les données RSForm à la table dérivée.
SELECT
Location,
COUNT(FieldValue)
FROM (
(SELECT 'Australia' AS Location)
UNION
(SELECT 'New Zealand')
UNION
(SELECT 'Oceania')
UNION
(SELECT 'Other')) AS defaults
LEFT JOIN jprefix_rsform_submission_values
ON FormId = 8
AND FieldName = 'Location'
AND FieldValue = REPLACE(Location, ' ', '')
GROUP BY 1
ORDER BY 2 DESC
Cela fournit maintenant le jeu de résultats correct:
Location | COUNT(FieldValue)
--------------------------------
Australia | 46
Other | 7
New Zealand | 0
Oceania | 0
Le problème est que lorsque je donne ce sql à PlotAlot, je ne vois que:
Comment puis-je empêcher PlotAlot d'omettre les valeurs nulles dans la légende?
J'ai réussi à résoudre ce problème en modifiant la deuxième colonne de la clause SELECT pour générer une minuscule valeur décimale non nulle.
IF(COUNT(FieldValue) > 0, COUNT(FieldValue), 0.1)
Pour l'enregistrement, GREATEST(COUNT(FieldValue), 0.1)
aura pratiquement le même jeu de résultats (techniquement, tous les résultats deviennent des valeurs flottantes) et la sortie graphique est la même.
Par conséquent, les emplacements apparaissent dans la légende et les valeurs 0.1
Sont arrondies à 0
.
En tant que problème potentiellement lié au regroupement de petites valeurs dans une étiquette "Autre" dans la légende, il peut être résolu en définissant la valeur sliceVisibilityThreshold sur 0
.
Pour implémenter cela, allez dans l'éditeur de graphiques de PlotALot, cliquez sur l'onglet Extra et à l'intérieur du champ Options supplémentaires, entrez sliceVisibilityThreshold: 0
.