Certaines vues ont des colonnes avec une formule comprenant @now. Ces colonnes sont utilisées pour calculer les jours à partir de maintenant. Mais ces vues sont si lentes. J'ai juste besoin d'obtenir des documents dans une catégorie spécifique à partir du résultat de la vue. Y a-t-il un paramètre en vue pour obtenir le document de la catégorie avant de calculer les jours? Ou dois-je supprimer les colonnes de jours de la vue et écrire un agent pour ajouter et calculer des colonnes de jours au résultat de la vue?

-1
Frank Yuan 23 mai 2018 à 16:21

3 réponses

Meilleure réponse

"Ou [dois-je] supprimer les colonnes de jours de la vue et écrire un agent pour ajouter et calculer les colonnes de jours au résultat de la vue?"

Oui. @Now dans une formule de vue est une recette pour de mauvaises performances. Créez un agent planifié qui s'exécute une fois par jour et met à jour un champ sur le document, puis affichez ce champ dans la vue.

2
Duston 23 mai 2018 à 14:13

Déjà répondu, mais je ressentais toujours le besoin d'ajouter mes pensées.

Si vous pouvez vous permettre de toucher vos documents tous les jours (par exemple, c'est juste un site Web sur un serveur unique ou en cluster), j'envisagerais sérieusement d'écrire un agent qui met à jour un champ "NumDaysOld".

La raison pour laquelle les performances sont lentes si vous avez @Now ou @Today dans une sélection de vue ou une formule de colonne est que l'indexeur sait alors qu'il dépend du temps et ne stocke donc pas l'index de vue (ou peut-être ne stocke-t-il tout simplement pas l'index entier, je ne suis pas sûr), ce qui l'oblige à se reconstruire à chaque fois qu'il y accède.

Si vous trichez en utilisant @TextToTime ("Today"), vos index de vue risquent d'être obsolètes car si un document ne change pas pendant n jours, la vue ne change pas pendant n jours et l'indexeur ne l'est pas déclenché ...

Une meilleure pratique serait peut-être d'écrire un agent pour changer la formule de colonne chaque jour afin qu'au lieu de @Today, utilisez une date littérale (en utilisant des crochets, comme [5/29/2018]), puis écrivez un agent à modifier cette formule de colonne tous les jours. Je n'ai jamais essayé ça parce que ça ne m'était pas disponible quand j'avais besoin de faire quelque chose comme ça. (Cela fait longtemps.) Au lieu de cela, j'ai résolu ce besoin en:

  • rédiger un agent qui a modifié chaque document pour mettre à jour l'âge du document, ou
  • créer des dossiers pour «<1 mois», «2 à 6 mois», etc., et disposer d'un agent quotidien chargé de remplir / corriger les dossiers, ou
  • éviter le problème en ayant une vue des documents ouverts triés par date, puis en essayant de convaincre les utilisateurs finaux que c'était assez proche! :-P (pas fier de celui-ci)
1
JSmart523 29 mai 2018 à 14:05

Cette formule de colonne vous permet d'ajouter une valeur Aujourd'hui sans utiliser @Today et donc beaucoup de traitement continu;

TodayDateString:= "Today";
Today := @TextToTime(TodayDateString);
@Abs(@Integer((Today - DateToCompare) / (60 * 60 * 24)))
1
Mark Maden 24 mai 2018 à 13:23