Текущий архив: 2009.12.13;
Скачать: CL | DM;
ВнизПодсчет среднего значения с нулевыми числами Найти похожие ветки
← →
kyn66 © (2009-10-23 12:33) [40]
> Проще и правильней поставить на форму кнопулю, включающую/отключающую
> фильтрацию НД на предмет включения/исключения из avg-расчетов
> позиций, имеющих нуль в поле, участвующем в расчете.Тогда
> и коверкать чужой компонент не придется)
Это самое лучшее было бы решение, только как эту кнопульку связать с компонентом? Это типа если бы у компонента было дополнительное свойство "Учитывать нулевые значения". А с временной доработкой компонента конечно не выход, я согласен. Мало ли придется переустанавливать с архивов и т.д.
← →
Сергей М. © (2009-10-23 12:42) [41]
> как эту кнопульку связать с компонентом?
С каким ?
← →
Юрий Зотов © (2009-10-23 12:42) [42]Если я правильно понял задачу, то вот псевдокод:
Sum1 := 0;
Sum2 := 0;
N := 0;
DataSet.First;
while not DataSet.Eof do
if DataSet.Field[2].AsInteger <> 0 then
begin
Inc(Sum1, DataSet.Fields[1].AsInteger);
Inc(Sum2, DataSet.Fields[2].AsInteger);
Inc(N)
end;
if N <> 0 then
begin
Average1 := Sum1 / N;
Average2 := Sum2 / N
end
else
begin
Average1 := 0;
Average2 := 0
end;
← →
Юрий Зотов © (2009-10-23 12:43) [43]Или в select добавить условие: where Field2 <> 0.
← →
kyn66 © (2009-10-23 12:44) [44]
> С каким ?
Ну мы вроде речь о DBGridEh ведем...
← →
Сергей М. © (2009-10-23 12:45) [45]
> Юрий Зотов © (23.10.09 12:42) [42]
Ему надо
> задействовав стандартный механизм компонента
← →
kyn66 © (2009-10-23 12:46) [46]
> Или в select добавить условие: where Field2 <> 0.
Я уже писал, что приприменении SQl проблем небыло бы. Здесь нужно управиться средствами самого компонента.
← →
Сергей М. © (2009-10-23 12:48) [47]
> мы вроде речь о DBGridEh ведем
А он данные откуда берет ? Не с луны же они в него падают)
Берет он их из НД, который у тебя, очевидно, формируется в рез-те скуль-запроса.
Так что же мешает добавить в текст скуль-запроса соответствующую WHERE-статью, если кнопуля нажата, и убрать эту статью, если отжата ? Ну и соотв-но переоткрыть НД ?
← →
Сергей М. © (2009-10-23 12:51) [48]
> Здесь нужно управиться средствами самого компонента
В ТЗ прямо так и написано ?
Т.е. любое обращение к объекту Grid.DataSource.DataSet сурово карается по закону ТЗ-пИсца ?
← →
kyn66 © (2009-10-23 12:55) [49]
> В ТЗ прямо так и написано ?
а ТЗ-пИсцу без разницы как это будет реализовано. Я больше за фейс программы отвечаю. Чтобы наглядно все видно было юзеру на экране.
http://yurec66.narod.ru/Vopros/rez2.jpg
← →
sniknik © (2009-10-23 12:56) [50]> Ну и соотв-но переоткрыть НД ?
а зачем? просто наложить фильтр на уже полученные данные.
← →
kyn66 © (2009-10-23 12:57) [51]
> Берет он их из НД, который у тебя, очевидно, формируется
> в рез-те скуль-запроса.
Если я отфильтрую нулевые данные по одному столбцу, то в другом пропадут строки с ненулевыми данными. Если по товару небыло реализации, то это не значит, что по нему небыло прихода.
← →
kyn66 © (2009-10-23 13:04) [52]Через SQl я буду формировать окончательные групповые отчеты по всем отделениям(на картинке инфа по одному отделению). А это рабочая информация. Строки содержат как вх. остаток, получено, реализовано и исх. остаток вот в рабочем порядке они и заполняются данными.
← →
Сергей М. © (2009-10-23 13:06) [53]
> kyn66 © (23.10.09 12:57) [51]
И что ?
Напиши на форме, мол, это отчет по таким-то товарам за такой-то период, имевшим движение в течение отч.периода
← →
Сергей М. © (2009-10-23 13:15) [54]Вот хоть убей - ума не приложу, кому и зачем может понадобиться среднее арифметическое суммы прихода и/или расхода..
Или у тебя в заказчиках бизнес-аналитики ?)
← →
Sergey13 © (2009-10-23 13:19) [55]> [36] kyn66 © (23.10.09 12:11)
> (хотя может это и протеворечит математической логике, не
> я ставлю задачи, руководство)
Могу посоветовать сообщить руководству (лучше письменно), что противоречие отчетности математике - прямой путь на допрос в прокуратуру.
Потому, что руководство может сказать в прокуратуре, что "мы акаедмиев не кончали и у нас по цифирям главный kyn66, к нему и вопросы".
← →
kyn66 © (2009-10-23 13:23) [56]
> Вот хоть убей - ума не приложу, кому и зачем может понадобиться
> среднее арифметическое суммы прихода и/или расхода..
МЫ сейчас начнем обсуждать другую тему... Как видно из картинки, в списке гофроящик. Они могут быть одного номинала(типоразмер) но с разной розничной ценой. Все зависит от закупки. Поэтому руководство и интересует средняя сумма на разные виды ящиков. Так понятно?
← →
Сергей М. © (2009-10-23 13:24) [57]
> Sergey13 © (23.10.09 13:19) [55]
Угу. В прокуратуре тоже люди далеко не больные на голову, и под цифирью в графе "ИТОГО" подразумевают именно "ИТОГО", а не какое-то там хитромудрое среднеарифметическое)
← →
kyn66 © (2009-10-23 13:27) [58]В превом столбце указана розничная цена на все типоразмеры ящиков. А в течение месяца не по всем была реализация. Вот и интересует на какую среднюю сумму реализовано гофроящиков.
← →
Сергей М. © (2009-10-23 13:31) [59]
> руководство и интересует средняя сумма на разные виды ящиков
А что, руководство разве не интересует общая сумма поставок и реализаций за период тех самых картинных гофроящиков ящиков, коль скоро тебе была дана команда на размещение в форме в графе "ИТОГО" среднеарифметического вместо суммы ?
← →
Sergey13 © (2009-10-23 13:32) [60]Плюсом к [55] Sergey13 © (23.10.09 13:19)
Если ты один раз продал вагон чего то, то по твоей отчетности выдет, что ты весь год продавал по вагону в месяц, и тем самым скрыл от государства 11/12 налогов. Статья лет на 10 наверное тянет, а то и более. 8-)
← →
Сергей М. © (2009-10-23 13:33) [61]
> интересует на какую среднюю сумму реализовано гофроящиков
Ну и оформи этот отчет в виде отдельной формы !
Зачем пихать на одну и ту же форму отчеты в различных разрезах ?
← →
kyn66 © (2009-10-23 13:50) [62]
> оманда на размещение в форме в графе "ИТОГО" среднеарифметического
> вместо суммы ?
Вот далось тебе это слово ИТОГО. Представь, что нет его там
← →
kyn66 © (2009-10-23 13:53) [63]
> Зачем пихать на одну и ту же форму отчеты в различных разрезах
> ?
Пока об отчетах речь не идет. Изначально на форму был положен компонент DBgridEh для предоставления данных по определенному критерию и использована функция этого грида показывать в футоре суммы и средние значения. И все
Кстати, поля кол-во - суммируются, а лишь по суммам идуд средние значения.
← →
Сергей М. © (2009-10-23 13:54) [64]
> Представь, что нет его там
А что там тогда вместо него будет ?)
← →
Сергей М. © (2009-10-23 13:56) [65]
> Пока об отчетах речь не идет
То что ты продемонстрировал на картинке - это тот же самый отчет, только интерактивный.
← →
kyn66 © (2009-10-23 14:40) [66]
> То что ты продемонстрировал на картинке - это тот же самый
> отчет, только интерактивный.
Я бы так не сказал, это просто данные в том виде, в котором юзер должен видеть на своем экране монитора, чтобы вносить дополнения в список, редактировать и т.д.
← →
Сергей М. © (2009-10-23 14:54) [67]По барабану где и в каком виде он должен их видеть, все равно это отчет.
> вносить дополнения в список, редактировать и т.д.
Это и есть то что подразумевается под интерактивным отчетом.
← →
kyn66 © (2009-10-23 15:04) [68]Связался с атором компонента. Он посоветовал вот что:
В DataSet"e можно создать калькулируемое поле в котором для нулей
устанавливать значение Null. И по нему подсчитывать.
Я так и сделал, однако появилась ошибка http://yurec66.narod.ru/Vopros/erobor.jpg .Полю OborotTblFNotNull присвоен тип Variant
← →
kyn66 © (2009-10-23 15:16) [69]Вот отсюда идет ошибка
goAvg:
begin
if (FDataSet.FieldByName(Item.FieldName).IsNull = False) then
Inc(Item.FNotNullRecordCount);
Item.FSumValueAsSum := Item.FSumValueAsSum +
FDataSet.FieldByName(Item.FieldName).AsFloat;
Т.е. получается противоречие. Спtрва проверяется что значение поля не Null. Если истинно, счетчик увеличивается. И идет далее, где это Null-поле приводится к типу Float.
← →
Anatoly Podgoretsky © (2009-10-23 15:27) [70]> kyn66 (23.10.2009 15:04:08) [68]
Ты что творишь, полю типа Double пытаешься присвоить NULL
← →
kyn66 © (2009-10-23 15:30) [71]
> Ты что творишь, полю типа Double пытаешься присвоить NULL
ДА не Double оно совсем, а Variant(+ калькулируемое). А Variant потому, что будет принимать 2 значения и Null и Double
← →
Anatoly Podgoretsky © (2009-10-23 15:47) [72]> kyn66 (23.10.2009 15:30:11) [71]
Я сообщения читать умею.
← →
Amoeba © (2009-10-23 17:36) [73]
> brother © (23.10.09 10:40) [14]
>
> имхо автор партизан... и шифрами говорит...)
Так это завсегда с ним было ... И чего тут нового ...
← →
kyn66 © (2009-10-23 17:40) [74]
> Так это завсегда с ним было ... И чего тут нового ...
У кого есть желание - тот поймет!
ВЫяснилось новое обстоятельство, что скорее всего проблема в ADS, поля таблицы не хотят принимать значение Null. Может кто работает с ADS?
← →
kyn66 © (2009-10-23 18:16) [75]Уважаемые коллеги. В конце концов решение найдено с подсказки автора компонента. Если вдруг кто сталкнется с такой ситуацией:
1) Использование DBGridEh
2) Поиск среднего значения среди ненулевых чисел, в списке которых есть нули
Решение:
т.к. грид осекает при подсчете среднего значения поля со значением Null, то нужно создать Calculated поле, с типом данных таким как и основное и присвоить ненулевые значения. В футоре в качестве параметра FieldName указать это созданное поле.
Проверено, все работает. Всем спасибо, вопрос закрыт.
Страницы: 1 2 вся ветка
Текущий архив: 2009.12.13;
Скачать: CL | DM;
Память: 0.61 MB
Время: 0.007 c