Текущее время: Ср, июл 30 2025, 18:23

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 9 ] 
Автор Сообщение
 Заголовок сообщения: Учет нулей на фоксе.
СообщениеДобавлено: Ср, ноя 10 2010, 12:23 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 09 2009, 15:15
Сообщения: 14
Пол: Мужской
Есть два столбца данных A и B. Значения во втором рассчитываются как B_i=(A_i-A_min)/(A_max-A_min), где A_min и A_max минимальное и максимальное значение в первом столбце. Казалось бы пара циклов на фоксе и никаких проблем. Но не тут-то было. Если в столбце А оказывается хотя бы одна пустая ячейка, то фокс присваивает A_min = 0. А мне необходимо, чтобы минимум выбирался только из тех данных, которые есть в наличии. Ставить проверку условия A_i>0 не подходит, так как среди данных могут оказаться и нули. Тогда ноль должен браться как минимум. Кто знает как обойти проблему?


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Ср, ноя 10 2010, 12:40 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
Reddy написал:
Если в столбце А оказывается хотя бы одна пустая ячейка, то фокс присваивает A_min = 0.


А как именно вы это реализуете? Код фокса в студию!

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Ср, ноя 10 2010, 15:07 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 18 2008, 07:37
Сообщения: 256
Может нужно так:
Code:
FOREACH A.
IF NOT A IS INITIAL.
B_i =(A_i-A_min)/(A_max-A_min)
  ENDIF.
ENDFOR.

_________________
The extent of reliability of the data affect on the quality of resource allocation.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Ср, ноя 10 2010, 15:44 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 09 2009, 15:15
Сообщения: 14
Пол: Мужской
to ken: Вы не поняли проблему. Необходимо найти именно A_min. С остальным проблем нет.
Code:
FOREACH MEAS.
  MAX_MEAS = {ZQTY, MEAS, 0003}. " изначально принимаю за минимум и за максимум значение в срезе с первым L_ZMO
  MIN_MEAS = {ZQTY, MEAS, 0003}.

FOREACH L_ZMO.
     IF {ZQTY, MEAS, L_ZMO} > MAX_MEAS.
         MAX_MEAS = {ZQTY, MEAS, L_ZMO}.
     ENDIF.
     IF  {ZQTY, MEAS, L_ZMO} < MIN_MEAS.
          MIN_MEAS = {ZQTY, MEAS, L_ZMO}.
     ENDIF.
  ENDFOR.

  FOREACH L_ZMO.
       IF (MAX_MEAS <> MIN_MEAS).
          {0DBPOTSCORE, MEAS, L_ZMO} = ({ZQTY, MEAS, L_ZMO}-MIN_MEAS)/(MAX_MEAS-MIN_MEAS).
       ENDIF.
ENDFOR.
ENDFOR.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Ср, ноя 10 2010, 17:08 
Старший специалист
Старший специалист
Аватара пользователя

Зарегистрирован:
Вт, янв 30 2007, 17:10
Сообщения: 488
Увы, фокс не отличает отсутствие значений в данном показателе от нуля в этом показателе. А нельзя создать еще один показатель типа "флаг" (со значениями 0 и 1) и через него уже определять отсутствует значение или же там 0?

_________________
Карма - это суперпозиция граблей, на которые мы уже успели наступить, но которые еще не долетели...


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Чт, ноя 11 2010, 08:44 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 18 2008, 07:37
Сообщения: 256
Reddy написал:
to ken: Вы не поняли проблему. Необходимо найти именно A_min. С остальным проблем нет.

Может стоит воспользоваться формулой Min(arg1, arg2)?
Уточните пожалуйста какого рода таблицу с данными вы хотите обработать формулой. Мне не совсем понятна ситуация, когда в одних ячейках одного показателя были бы нули, а в других ячейках этого же показателя пустые значения. Что это за пустые значения?
Если для совокупности признаков у показателя нету значения, то и самих данных в кубе не должно быть, которые бы возможно было обработать формулой. Для начала работы со статичной таблицей, в которой имеются не заполненные значениями показатели, нужно генерировать нулевые значения с помощью стандартной функции планирования generate combination, которая показатели заполняет нулями. При добавлении строк в динамической таблице, не заполненные показатели автоматически заполняются нулями.

_________________
The extent of reliability of the data affect on the quality of resource allocation.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Чт, ноя 11 2010, 11:40 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 09 2009, 15:15
Сообщения: 14
Пол: Мужской
Таблица, насколько я понимаю, динамическая, потому что она формируется запросом QueryDesigner'a и представлена через web-шаблон. Видимо, придется действительно делать "флаг". ken, а вам спасибо, что напомнили о стандартных функциях min и max. :)
ken написал(а):
Мне не совсем понятна ситуация, когда в одних ячейках одного показателя были бы нули, а в других ячейках этого же показателя пустые значения. Что это за пустые значения?

Природа данных, такова, что их получают от районных отделений. Иногда отдельные районы не предоставляют данных по некоторым показателям. Вот и получаются пустые ячейки.


Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Чт, ноя 11 2010, 14:30 
Почетный гуру
Почетный гуру
Аватара пользователя

Зарегистрирован:
Чт, дек 18 2008, 07:37
Сообщения: 256
Динамической, таблица может быть, только если у неё снизу есть строка для ввода в режиме планирования.
ken написал(а):
Природа данных, такова, что их получают от районных отделений. Иногда отдельные районы не предоставляют данных по некоторым показателям. Вот и получаются пустые ячейки.

Возможно, что признак остаётся на присвоенным (#), а не показатель. А показатель в динамической таблице после переноса, в любом случае заполнится нулевым значением.
Вот вам пример кода накатал, на основе моих сумбурных представлений о вашей ситуации. Возможно вам предстоит ещё многое переделать. На моём кубе, на основе одного показателя и одного признака, он работал находя минимальное значение показателя, и игнорируя нули, но не игнорируя отрицательные значения.
Code:
FOREACH MEAS, L_ZMO.
*Если переменная пустая, то первый раз заполняем её первым значением показателя,
*это делается для того, чтобы она смогла обрабатываться в дальнейшем в сравнении.
    IF MIN_MEAS IS INITIAL.
        MIN_MEAS = {ZQTY, MEAS, L_ZMO}.
    ENDIF.
*Сохраняем значение показателя по каждой итерации во вторую переменную, чтобы с ней потом сравнивать.
    MIN_MEAS2 = {ZQTY, MEAS, L_ZMO}.
*теперь цикл в цикле =)
    FOREACH MEAS, L_ZMO.
*Если текущее значение не равно значению внешнего цикла,
*то вычисляем минимальное значение из текущего внутреннего цикла и минимального значения от
*предыдущего минимального значения и значения внешнего цикла.
        IF {ZQTY, MEAS, L_ZMO} <> MIN_MEAS2.
            MIN_MEAS = MIN( {ZQTY, MEAS, L_ZMO}, MIN( MIN_MEAS, MIN_MEAS2)).
        ENDIF.
    ENDFOR.
ENDFOR.


Update: исправил код :)

_________________
The extent of reliability of the data affect on the quality of resource allocation.


Последний раз редактировалось ken Пт, ноя 12 2010, 06:08, всего редактировалось 1 раз.

Принять этот ответ
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Учет нулей на фоксе.
СообщениеДобавлено: Чт, ноя 11 2010, 15:12 
Начинающий
Начинающий
Аватара пользователя

Зарегистрирован:
Чт, июл 09 2009, 15:15
Сообщения: 14
Пол: Мужской
А поясните пожалуйста что за объекты сравниваются в строке IF { ACC_SUMMA, OBJ } <> DELTA2.


Принять этот ответ
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 9 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB