2015-08-11 3 views
-1

Предположим, у меня есть таблица: 3 портфельных счета, дата и% изменения, т. Е. 5 фактически составляет 5%.R/SQL - Производительность портфолио

Date  Account %Change 
8/1/2015 A   5 
8/1/2015 B   1 
8/1/2015 C   2 
8/2/2015 A   -2 
8/2/2015 B   6 
8/2/2015 C   1 
8/3/2015 A   3 
8/3/2015 B   -4.5 
8/3/2015 C   -3 

Теперь я хочу добавить новый столбец «Score», а также автоматизировать процесс расчета балла на основе на изменение%, скажем, 8/1/2015 это самые ранние данные, то оценка для счета А на 8/1 будет 100 * (1 + 5%) = 105, на 8/2 будет 105 * (1-2%) = 102,9, в основном это как сегодняшний счет = вчерашняя оценка * (1 + %изменение). Пусть 100 - базовая оценка до самой ранней даты.

Date  Account  %Change  Score 
8/1/2015 A   5   105 
8/1/2015 B   1   101 
8/1/2015 C   2   102 
8/2/2015 A   -2   102.9 
8/2/2015 B   6   107.06 
8/2/2015 C   1   103.02 
8/3/2015 A   3   105.99 
8/3/2015 B   -4.5   102.24 
8/3/2015 C   -3   99.93 

У меня есть две проблемы здесь:

  1. Как преобразовать столбец изменения% до фактического процентного типа, как 5 -> 5% или 0,05
  2. Дата + Счет вместе, как первичный ключ, поэтому оценка основана на разных учетных записях за время. Мы не можем просто использовать последнюю строку для вычислить текущую строку, потому что учетная запись из последней строки отличается от текущей строки. Может быть проще отсортировать данные на основе учетной записи, но нам по-прежнему необходимо проверить, какая строка является новой учетной записью после сортировки данных, например, строки 1-3 -> A, строки 4-6 -> B.

После сортировки:

Date  Account  %Change Score 
8/1/2015  A   5  105 
8/2/2015  A   -2  102.9 
8/3/2015  A   3  105.99 
8/1/2015  B   1  101 
8/2/2015  B   6  107.06 
8/3/2015  B   -4.5  102.24 
8/1/2015  C   2  102 
8/2/2015  C   1  103.02 
8/3/2015  C   -3  99.93 

Оригинальный источник данных в SQLServer. Это предварительная обработка данных после получения ожидаемого формата данных, тогда я буду использовать Tableau для данных, а именно. В основном, цель состоит в том, чтобы визуализировать данные, но исходные данные не имеют «оценки», он имеет только изменение%. Кажется, Tableau не подходит для такого рода манипуляций с данными, поэтому мне интересно, могу ли я сделать это в SQLServer или использовать R для расчета.

Если у вас есть какие-либо идеи или предложения, разместите его, спасибо!

+0

Как получить 108,15 за третий экземпляр 'Ā' Это видеть? ms для меня, что 102.9 * (1 + 3%) должно быть 105.987 –

ответ

0

Для преобразования значения в столбце C в проценты, просто разделить на 100. Вы можете сделать это

  • Введите 100 в какой-то пустой ячейке.
  • Edit/Copy
  • Выбор C2: Cn
  • Edit/Paste Special/Divide
  • ESC, чтобы удалить выбранные
  • Вы можете хотеть форматировать в процентном с 1 десятичным, как я сделал на скриншоте ниже.

Предполагая 108.15 для третьего экземпляра A является ошибкой и что ваша таблица начинается с A1 с заголовками столбцов в строке 1, а затем формулой, которая даст вам результаты, которые вы показываете (и не имеет значения, отсортированы ли данные или нет, будет:

D2: =IF(COUNTIF($B$2:B2,B2)=1,100*(1+C2),LOOKUP(2,1/($B$1:B1=B2),$D$1:D1)*(1+C2)) 

enter image description here

Формула Объяснение

enter image description here

+0

спасибо за ваш ответ, это ошибка, она должна быть 105.99, как вы заявили. Кажется, вывод данных для Excel - это самый простой способ решить мою проблему, было бы очень сложно достичь той же цели в SQLServer? – azCats

+0

@JerryLi Я не могу ответить на это. Возможно, кто-то с опытом SQL зазвонит. –

Смежные вопросы