01. Configurando o DataSourceQuery para trazer uma coluna calculada com a média ponderada
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 //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 (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 (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.