Формулы на основе цены. Хранение в RDBMS и использование на прикладном уровне - PullRequest
3 голосов
/ 22 октября 2008

Я собираюсь войти в 1-й этап разработки приложения для торговли товарами. Основной функцией этого приложения является сбор и оценка информации о ценах. Цены на этом рынке не фиксированы. Обычно это рыночный ориентир +/- премия. Например: (A и B - рыночные ориентиры)

  • Цена = A + $ 1
  • Цена = A + .5 (A-B)

Окончательная цена сделки рассчитывается по формуле ценообразования, применяемой в течение согласованного времени. Например; Окончательная цена может составлять среднее значение + 1 доллар США за предыдущую неделю и неделю после загрузки товара.

В настоящее время трейдеры фиксируют эту деталь в Excel, что позволяет им гибко настраивать необходимые формулы, но эта информация никогда не попадает в наши учетные системы, и электронные таблицы не связаны с живыми предсказаниями рыночных ориентиров, делающими прогнозирование цен. ручная и медленная задача.

Я ищу информацию о том, какие инструменты / методы я могу использовать для ввода, хранения и оценки формул в приложении.

Мы будем использовать SQL Server или Oracle в качестве базы данных, а клиентская платформа еще не исправлена, но вы можете использовать WinForms / WPF, ASP.NET или веб-приложение на Java.

Я знаю, что это довольно широкий вопрос, но мы не достаточно далеко, чтобы более точно определить, какие технологии будут использоваться.

Спасибо

Ответы [ 7 ]

2 голосов
/ 22 октября 2008

Держу пари, что пользователям нравится гибкость ввода формул в Excel, поэтому я бы предложил такой подход: -

  1. Напишите что-нибудь, что позволит им вводить формулы в ваше приложение, используя тип операторов, которые они фактически будут использовать с ключевыми словами для разных базовых цен. Это может быть просто сохранено как строка.
  2. Проверьте это с помощью подхода белого списка (это может быть довольно сложно, может быть, вам придется поискать некоторые алгоритмы синтаксического анализа на основе стека). Вы можете разрешить: + - / * () {числовые константы} {ключевые слова для базовых цен}.
  3. Переведите эти формулы в нечто, понятное вашей базе данных в списке SELECT. Если формулы, которые они вводят, похожи на те, что вы можете сделать в SQL, это может быть не слишком сложно. Ключевые слова превращаются в имена столбцов, а все остальное можно оставить в покое.

Затем вы сможете ВЫБРАТЬ обратно данные, усредняя их по периодам времени и т. Д., Подключив специальную формулярную форму и выполнив ее для ваших исторических данных и / или прогнозов.

В шаге 2 есть несколько хитростей, но все остальное будет легко (и эффективно).

1 голос
/ 22 октября 2008

У меня есть смехотворно простое решение, связанное с предложением Хэнка. Создайте базу данных и смоделируйте ее после ваших таблиц Excel. Экспортируйте данные Excel и импортируйте их в свою базу данных. Создайте соединители ODBC на клиентских компьютерах, чтобы они указывали на базу данных. В Excel вы можете подключиться к источникам данных. Таким образом, у ваших клиентов не будет проблем с изменениями пользовательского интерфейса.

1 голос
/ 22 октября 2008

Рассматривали ли вы интеграцию с Excel? Таким образом, вам не нужно пытаться вытолкнуть Excel из их рук (бизнес-пользователи ADORE Excel), и они смогут использовать все приемы, которые они изучили за эти годы. Вы просто перемещаете данные назад и вперед между вашим приложением и Excel с помощью VBA (или, тем не менее, они говорят людям об интеграции с Excel в эти дни), и вы в значительной степени хороши.

0 голосов
/ 23 октября 2008

Спасибо за ответы.

Пользователи сами хотят уйти от Excel. Они борются с несколькими пользователями, пытающимися ввести и обновить данные. Я мог бы исследовать, какие возможности дает VSTO для встраивания небольших листов Excel в приложения.

Я склоняюсь к использованию встроенного «языка» для хранения и оценки формул.

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

Спасибо

0 голосов
/ 22 октября 2008

Вы можете использовать символический математический пакет, такой как GiNaC , чтобы интерпретировать формулы, которые вы вводите в таблицы.

0 голосов
/ 22 октября 2008

Если данные получены из надежного источника (большой if), вы можете сохранить выражения базы данных в столбце, а затем создать оператор SELECT на лету для его выполнения.

0 голосов
/ 22 октября 2008

Интересный сценарий. ВНИМАНИЕ: Этот ответ основан на некоторых идеях, которые у меня были для решения проблемы, и может не отражать передовой опыт.

Я бы попробовал проверить, можете ли вы свести ваши потенциальные правила формул к более простым конструкциям. Это позволит вам составить ваши правила вместе для создания сложных формул. Затем вам нужно будет иметь возможность хранить правила в базе данных, что можно сделать с помощью DSL или какого-либо файла правил XML.

Похоже, ваш текущий сценарий, формула в Excel, работает довольно хорошо, но имеет несколько икоты. Рассматривали ли вы использование некоторых расширенных макросов или автоматизации Excel? Вероятно, вы могли бы достичь большинства своих целей без того, чтобы ваши клиенты никогда не уходили из Excel.

Удачи.

...