Код SQL Server для дублирования вычислений Excel, который включает циклическую ссылку - PullRequest
3 голосов
/ 15 ноября 2010

Есть ли способ дублировать формулу с циклической ссылкой из файла Excel в SQL Server? Мой клиент использует файл Excel для расчета продажной цены. Поле «Цена продажи» (затраты / 1-прогнозируемая маржа) = 6,5224 (1 -6) = 16,3060. Одним из чисел, которые входят в стоимость, является комиссия, которая определяется как SellingPrice, умноженная на комиссионную ставку.

Расходы = 6,5224 Прогнозируемая маржа = 60% Комиссии = 16.3060 (цена продажи) * .10 (ставка комиссии) = 1.6306 (что является частью 6.5224)

Они обходят проблему циклических ссылок в Excel, потому что Excel позволяет им проверять опцию «Включить итеративное вычисление» и останавливает итерации через 100 раз.

Возможно ли это с помощью SQL Server 2005?

Спасибо

Don

Ответы [ 3 ]

2 голосов
/ 16 ноября 2010

Это бизнес-проблема, а не ИТ, поэтому из этого следует, что вам нужно бизнес-решение, а не ИТ-решение. Не похоже, что вы работаете на особо проницательного клиента. По сути, вы возвращаете комиссию обратно в расходы и пересчитываете комиссию 100 раз. Таким образом, продавец зарабатывает комиссионные на основе их комиссии?!? Шутки в сторону? : -)

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

В банках, где я работал, эти затраты часто называют такими вещами, как стоимость (без комиссий или сборов), чистая стоимость (стоимость + комиссия), а затем невероятно чистая чистая стоимость (стоимость + комиссия + сборы). В зависимости от бизнес-модели разбивка затрат может стать довольно интересной.

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

Вариант 1: Если вы собираетесь рассчитать маржу для исключения комиссии, тогда

Цена до комиссии = Стоимость + (Стоимость * (1 - Прогнозируемая маржа))

Цена продажи = Цена до комиссии + (Цена до комиссии * Комиссия)

Вариант 2: Если ваш клиент настаивает на расчете маржи, включающей комиссию (что, как кажется, они могут захотеть), тогда

Себестоимость = Стоимость + (Стоимость * Комиссия)

Прибыль на единицу или вклад на единицу = себестоимость * (1-прогнозируемая маржа)

Цена продажи = Себестоимость + Прибыль за единицу

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

Не принимайте слепо вычисления из электронных таблиц. Продумайте их и не бойтесь спросить своего клиента, чего он пытается достичь. Слишком часто нарушенные бизнес-процессы доходят до ИТ-отдела до того, как его подвергают сомнению. Не бойтесь делать хорошую работу, а это иногда означает оспаривание запросов клиентов, когда они не имеют смысла.

Удачи!

0 голосов
/ 16 ноября 2010

Хотя я согласен с ответом @Sir Wobin, если вы действительно хотите написать какой-нибудь рекурсивный код, вы можете сделать это, используя Рекурсивные выражения общих таблиц :

with RecurseCalc as (
    select CAST(1.5 as float) as Value,1 as Iter
    union all
    select 2 * Value,1+Iter from RecurseCalc where Iter < 100
), FinalResult as (
    select top 1 Value from RecurseCalc order by Iter desc
)
select * from FinalResult option (maxrecursion 100)
0 голосов
/ 15 ноября 2010

Нет, это невозможно

mysql> select 2+a as a;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'

Выражения sql могут ссылаться только на выражения, которые уже существуют. Вы даже не можете написать

mysql> select 2 as a, 2+a as b;
ERROR 1054 (42S22): Unknown column 'a' in 'field list'

Способ просмотра баз данных - это транзакционные механизмы, которые за один шаг переносят данные из одного состояния в другое (с помощью комбинации операторов, которые работают не только со скалярными значениями, но и с наборами).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...