Среднее не нулевых значений

отредактировано 05:47 Раздел: FastReport 3.0
Здравствуйте!
Такая проблема: при подсчете среднего функцией AVG сумма значений делится просто на количество строк, а мне нужно, что бы сумма делилась на кол - во не пустых строк. Как это сделать?
Заранее спасибо.

Комментарии

  • отредактировано 05:47
    Считайте в скрипте
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано December 2005
    scrutinizer написал:
    Здравствуйте!
    Такая проблема: при подсчете среднего функцией AVG сумма значений делится просто на количество строк, а мне нужно, что бы сумма делилась на кол - во не пустых строк. Как это сделать?
    Заранее спасибо.
    Сумму по полю делите на количество строк с непустым значением поля
    [SUM(<DataSet1."FieldName">, MasterData1) / SUM(IIF(<DataSet1."FieldName"> = nil,0,1), MasterData1)] 

    и в свойствах отчета установите EngineOptions.ConvertNulls=false.
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано 05:47
    написал:
    Считайте в скрипте
    В СУБД кстати так и происходит, при расчете среднего значения по полю учитываются только не NULL значения. Выходит очень нехорошо, когда разработчик запросом к БД получает одно среднее значение, а при расчете в FastReport - другое. Так что, наверное, все-таки стоит задуматься о введении доп. параметра в ф-ции AVG, в котором можно задавать метод подсчета - с учетом NULL или без учета NULL значений.
  • отредактировано 05:47
    EngineOptions.ConvertNulls установить False не помогает?
  • Andrew_ShAndrew_Sh г.Минск
    отредактировано December 2005
    Stranger написал:
    EngineOptions.ConvertNulls установить False не помогает?
    Само по себе отключение ConvertNulls абсолютно не помогает.
  • отредактировано 05:47
    Всем Спасчибо!
    Сделал вот так:
    [IIF(SUM(IIF(<RepUserDate."BreachExit"> = nil,0,1), MasterData1)=0,0,SUM(<RepUserDate."BreachExit">, MasterData1) / SUM(IIF(<RepUserDate."BreachExit"> = nil,0,1), MasterData1))]
    Но работает достачно медленно, возможно через скрипт будет быстрее.
  • отредактировано 05:47
    Поправил в исходниках.

Оставить комментарий