Forum d'entraide Acomba
Pourquoi ne pas devenir membre du forum ?

Identifiez-vous ou Inscrivez-vous afin d'accéder à l'inrégralité du forum:
Accès à toutes les catégories du forum,
Entraide entre les 6 500 membres, et ce nombre s'accroît quotidiennement!

Notez que ce forum est indépendant de la société Acceo Solutions, éditrice du logiciel Acomba.

Rejoignez le forum, c’est rapide et facile

Forum d'entraide Acomba
Pourquoi ne pas devenir membre du forum ?

Identifiez-vous ou Inscrivez-vous afin d'accéder à l'inrégralité du forum:
Accès à toutes les catégories du forum,
Entraide entre les 6 500 membres, et ce nombre s'accroît quotidiennement!

Notez que ce forum est indépendant de la société Acceo Solutions, éditrice du logiciel Acomba.
Forum d'entraide Acomba
Vous souhaitez réagir à ce message ? Créez un compte en quelques clics ou connectez-vous pour continuer.
Connexion
Le Deal du moment :
Jeux, jouets et Lego : le deuxième à ...
Voir le deal

Aller en bas
avatar
simonlabdes
Nombre de messages : 12
Ville : Bonaventure, Gaspésie
Date d'inscription : 28/03/2011
http://www.solutioninfomedia.com

ODBC - SQL - Analyse des ventes - Problème de performances Empty ODBC - SQL - Analyse des ventes - Problème de performances

Mer 25 Mai 2011 - 10:46
(je viens d'envoyer le email à ODBC Acomba, mais je m'essaye ici aussi pour notre bien à tous....)

La situation
Lorsque j’exécute la requête [que j’ai simplifié] suivante (ramener les total des ventes par Client/Produit pour une période donnée):
Code:
select   Invoicing.InCustomerSupplierNumber,
      Product.PrNumber,
      Product.PrDescription1,
      sum(IlInvoicedQty) as QteVendue,
      sum(IlInvoicedQty * IlCost) as CoutantTotalReel,
      sum(IlInvoicedQty * IlSellingPrice) as VendantTotalReel
from { OJ Invoicing
      inner join InvoicingLine
      inner join Product
       on InvoicingLine.IlProductCP = Product.RecCardPos
       on InvoicingLine.IlInvoicingCP = Invoicing.RecCardPos
      }
Where InDate = {d '2010-01-05'}
group by Invoicing.InCustomerSupplierNumber,
      Product.PrNumber,
      Product.PrDescription1
J’ai un résultat en moins d’une seconde (sur un disque dur SSD…). Si je change cette date pour le lendemain uniquement, même rapidité : moins d’une seconde…

Problème : Toutefois, si je change le filtre pour avoir plus qu’une seule journée:
Code:
Where InDate between {d '2010-01-05'} and {d '2010-01-06'}
Ou bien
Code:
Where InDate in ({d '2010-01-05'}, {d '2010-01-06'})
Ou bien
Code:
Where InDate >= {d '2010-01-05'} and InDate <= {d '2010-01-06'}
(donc un laps de 2 jours)

Alors la requête prend 600 secondes et plus à revenir!
Note : la table Invoicing contient environ 200K lignes et la Table InvoicingLine environ 1M

Ma question :
Est-ce que je m’y prend de la bonne façon pour ramasser plusieurs jours??

Note 2 : Et je veux éviter de faire de la programamtion (VB, C# et compagnie).

Note 3 : Nous avons développé un système qui "synchronise" Acomba sur un Serveur SQL, mais j'aimerais éviter cette solution pour un simple rapport...
Lartis
Lartis
Nombre de messages : 640
Ville : Laval
Date d'inscription : 03/04/2007

Fiche d'Entreprise
Nom de l'entreprise: Groupe Conseil Lartis Inc.
http://www.lartis.com

ODBC - SQL - Analyse des ventes - Problème de performances Empty Re: ODBC - SQL - Analyse des ventes - Problème de performances

Jeu 2 Juin 2011 - 23:30
As-tu essayé
Where (InDate = {d '2010-01-05'}) OR (InDate = {d '2010-01-05'})

J'ai l'impression que c'est une question d'index sur le champ date qui est efficace pour = mais pas avec < et >.
Jeremie
Jeremie
Nombre de messages : 123
Date d'inscription : 11/08/2010

Fiche d'Entreprise
Nom de l'entreprise:
http://bourgeois-sc.com

ODBC - SQL - Analyse des ventes - Problème de performances Empty Re: ODBC - SQL - Analyse des ventes - Problème de performances

Ven 3 Juin 2011 - 10:26
Votre requête semble bonne, mais honnêtement ... faut pas oublier que l"ODBC Acomba est pas super rapide non plus.

Juste pour récupérer un numéro de facture, en local j'ai un délais de 6 secondes.
une fois chez le client, ça grimpe à 3 minutes pour enregistrer une simple facture.

Hier, un de mes clients, mas fait la remarque suivant. "Dans un module qui va dans Acomba, si le bouton enregistrer reste pas enfoncé 3 ou 4 secondes, je me demande toujours si l'enregistrement à bien été faites."

Mais je suis curieux de lire la réponses que vous aurez des gens d'acomba.


@Lartis

En faites, pas vraiment.
Ça pas rapport avec le =, mais plus avec le SUM() et le Group.
Puisqu'il veut avoir le total des factures entre entre deux date pour chaque client et produit.
Acomba doit travailler plus, donc faire travailler le disque dur ...

Je ne crois pas que ça sois l'explication la plus scientifique et je suis peut être dans le champs gauche, mais selon mes observations plus la requête SQL est complexe, plus Acomba à de la misère.

Et cela dépend aussi de la configuration.
Si Acomba est sur une vielle machine, si le serveur est surchargé etc etc etc ...

Remarquez que c'est la même chose avec SQL Serveur, sauf que lui il est plus optimisé.
Et avec 200k d'enregistrement ... même SQL Server travaillerait.
Moins, mais suffisamment pour que cela paraisse.
avatar
simonlabdes
Nombre de messages : 12
Ville : Bonaventure, Gaspésie
Date d'inscription : 28/03/2011
http://www.solutioninfomedia.com

ODBC - SQL - Analyse des ventes - Problème de performances Empty Re: ODBC - SQL - Analyse des ventes - Problème de performances

Ven 3 Juin 2011 - 10:38
je ne suis pas ben ben correct! j'ai eu la réponse d'Acomba la semaine dernière en fait et je ne l'ai pas posté..tut tut..!

voici la réponse :
Bonjour M. L’Abbé-Deslauriers,

Nous avons révisé votre requête SQL et voici quelques observations :

• Vous pouvez utilisez la table « TransactionHeaderDetail » ce qui permet d’éliminer une jointure dans votre requête. (Voir exemple ci-bas).
• Lorsque vous voulez filtrer sur les dates, vous devriez toujours utiliser les opérations (i.e. « Where InDate >= {d '2000-01-26'} and InDate <= {d '2000-01-27'} ). Si vous utilisez les commandes « Between » ou « In », ceux-ci augmente le temps d’exécution de la requête

Voici votre requête utilisant la table « TransactionHeaderDetail » :

Select TransactionHeaderDetail.InCustomerSupplierNumber,
Product.PrNumber,
Product.PrDescription1,
sum(IlInvoicedQty) as QteVendue,
sum(IlInvoicedQty * IlCost) as CoutantTotalReel,
sum(IlInvoicedQty * IlSellingPrice) as VendantTotalReel

from { OJ TransactionHeaderDetail
inner join Product
on TransactionHeaderDetail.IlProductCP = Product.RecCardPos
}
Where InDate >= {d '2010-01-05'} and InDate <= {d '2010-01-06'}

group by TransactionHeaderDetail.InCustomerSupplierNumber,
Product.PrNumber,
Product.PrDescription1

Si vous avez d’autres questions, n’hésitez pas à nous écrire de nouveau.

Salutations,

Nous avions déjà remarqué que TransactionHeaderDetail était plus vite que Invoicing et InvoicingLine, mais bon, on se dompte...! j'imagine qu'une requête qui n'a besoin que de l'entête aura avantage à aller dans Invoicing seulement, et si on veut du détail, alors utiliser la genre de vue TransactionHeaderDetail.

Et nous aussi, c'est un peu long créer des factures (3-5 secondes).
Contenu sponsorisé

ODBC - SQL - Analyse des ventes - Problème de performances Empty Re: ODBC - SQL - Analyse des ventes - Problème de performances

Revenir en haut
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum