Configurando o DataSourceQuery para trazer uma coluna calculada com a média ponderada

Data de postagem: Jun 23, 2010 8:23:36 PM

O DataSourceQuery suporta o cálculo de médias ponderadas das suas colunas. Segue um exemplo.

Suponha que você tenha a seguinte definição de DataSource:

{ includes: [ -1897036629 /* /products/INTEQengine/library/iquery/IQuery.ijs */ ], help: "Help do DataSource", availableFilters: [ { classKey: -2008879000 /* Pedidos ou Provisões */, prefix: "PED", options: {} } ], availableColumns: [ { classKey: -2008879000 /* Pedidos ou Provisões */, prefix: "PED" } ], //Chamado após a construção do DataSource. onCreate: function Exemplo000_onCreate(dataSource) { var flt = dataSource.filters.filter("PED_EMISSAO_START"); flt.help = "Data de Emissão Inicial"; var flt = dataSource.filters.filter("PED_EMISSAO_END"); flt.help = "Data de Emissão Final"; }, onGetQuery: function Exemplo000_onGetQuery(dataSource, filters, columns) { var flts = filters.getIQueryFilters("PED_*", "and"); var cols = columns.getIQueryColumns("PED_*"); var iquery = IQuery.from(-2008879000/* Pedidos ou Provisões */) .where(flts) .column(cols) return iquery.toSql(); } }

Na definição do DataSourceQuery, utilize o seguinte código:

{ dataSourceKey: 40108470 /* /datasource/Exemplo 000.ids */, filters: [ {name: "PED_EMISSAO_START"}, {name: "PED_EMISSAO_END"} ], columns: [ {name: "PED_RECURSO.NOME"}, {name: "PED_QUANTIDADE", aggregate: "avg", weight: "PED_UNITARIO" } ], orderby: "PED_RECURSO.NOME" }

No exemplo acima, será calculada a média ponderada do campo QUANTIDADE usando o campo UNITARIO como peso.