Question

J'ai déjà posé ce genre de question, mais je n'ai pas reçu de bonnes réponses, peut-être parce que le code était trop long ou que ma question n'était pas claire. Pour cette fois, j'essaierai de faire de mon mieux :) Jusqu'à présent, j'ai écrit du code pour trouver à partir d'un tableau la somme de la ligne, ce qui fonctionne bien:

<cfloop list="#product_id_list#" index="product_index">
    <cfloop list="#month_list#" index="month_index">
        <cfoutput query="GET_SALES_TOTAL">
            <cfif AY eq month_index and product_id eq product_index>
                <cfloop list="#type_index#" index="tt_index">
                    <cfset 'alan_#tt_index#_#month_index#_#product_index#' = evaluate(tt_index)>
                </cfloop>
            </cfif>
        </cfoutput>
    </cfloop>
</cfloop>
<cfset 'total_#ii_index#_#p_index#'=evaluate('total_#ii_index#_#p_index#') + #evaluate('alan_#ii_index#_#ddd_other#_#p_index#')#>

Maintenant, je veux trouver une somme de colonne. Le code de la somme de colonne fonctionne, mais mal. Cela compte la somme du dernier produit:

<cfloop list="#product_id_list#" index="product_index">
    <cfloop list="#month_list#" index="month_index">
        <cfoutput query="GET_SALES_TOTAL">
            <cfif AY eq month_index and product_id eq product_index>
                <cfloop list="#type_index#" index="tt_index">
                    <cfset 'alan2_#tt_index#_#month_index#_#product_index#' = evaluate(tt_index)>
                </cfloop>
            </cfif>
        </cfoutput>
    </cfloop>
</cfloop>
<cfset 'total2_#ddd_other#_#p_index#'=evaluate('total2_#ddd_other#_#p_index#') + #evaluate('alan2_#ii_index#_#ddd_other#_#p_index#')#>

La sortie pour la somme de ligne:

<cfloop list="#product_id_list#" index="p_index">
    <cfloop list="#type_index#" index="kk_ind">
        <td align="center">
          <font color="##FF0000">#TLFormat(evaluate('total_#kk_ind#_#p_index#'),0)#</font>
        </td> 
    </cfloop>
</cfloop>

et la sortie de la somme de la colonne:

<cfloop list="#month_list#" index="kk">
 <td align="center">
   <cfset satis_oran= evaluate('total2_#kk#_#p_index#')>
     #evaluate(satis_oran)#
 </td>
</cfloop>

Je sais que je n'ai pas bouclé la sortie de la colonne par ID de produit, car une fois que je l'ai bouclé, il génère beaucoup de <td>'S, ce qui signifie beaucoup de données non pertinentes. Quelle peut être l'erreur ici?

Était-ce utile?

La solution

C'est très difficile à suivre.

Quelques suggestions....

Essayez de le faire dans une instruction SQL

Vous pourrez peut-être simplement utiliser une instruction de groupe pour résumer toutes ces valeurs. Quelque chose comme...

select productindex
    , datepart('yyyy', datecolumn) as year
    , datepart('mm', datecolumn) as month
    , sum(valcolumn) as valcolumnsum
from productinfo
group by productindex, datepart('yyyy', datecolumn), datepart('mm', datecolumn)

Sinon, tous les mois ou produits sont en fait dans la requête retournée, c'est OK. Vous pouvez toujours boucler sur les produits et des mois plus tard.

N'utilisez pas d'évaluation

Je crois comprendre que CF compile littéralement à la volée, ce qui est très lent. Si vous devez référencer un nom de variable, utilisez dynamiquement une portée et des supports. Si vous enregistrez réellement des déclarations à évaluer plus tard, il existe probablement des alternatives

N'utilisez pas de balises de police

Je n'ai pas utilisé d'étiquette de police depuis les 6 dernières années. Sauf si travailler sur un code hérité en dépendant, la balise de police ne doit pas être utilisée.

Autres conseils

Si vous avez une colonne dans votre requête et que vous pouvez vous assurer que chaque valeur sera numérique, vous pouvez également faire:

<cfset sum = arraySum(queryname['column'])>

S'il rencontre cependant des valeurs non numériques, cela entraînera une erreur, vous devez donc probablement mettre une déclaration de fusion autour de ce champ ou quelque chose pour vous assurer que des valeurs nulles sont converties en zéro.

Selon le type de données de la colonne de table, essayez ceci pour les anciennes versions CF:

<cfset theSum = ArraySum(ListToArray(ValueList(queryName.column))) />
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top