Всего в вычисляемом поле сводной таблицы Excel возвращается неожиданное значение - PullRequest
0 голосов
/ 16 ноября 2009

У меня есть таблица Excel, в которой есть сводная таблица. Сами данные довольно просты: количество единиц и скидка (в процентах от 0 до 100), которые делятся на дату сверху и клиентом вниз по левой стороне. Эти числа прямо из представления SQL, поэтому источник сводной таблицы просто:

SELECT * FROM UnitDiscountView

Все выглядело нормально, пока я не попытался добавить вычисляемое поле TotalCost (каждая единица будет стоить £ 200) в сводную таблицу:

= (200 *NrUnits ) * ((100-Discount)/100)

Сумма внизу была отрицательной, и намного больше, чем я ожидал как число. Если я выберу все ячейки, то сумма, отображаемая в строке состояния внизу, будет такой, как я ожидал, но поле «Общее» внизу более чем в сто раз больше и отрицательно для загрузки.

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

Ответы [ 2 ]

1 голос
/ 16 ноября 2009

Рассчитанные поля будут работать с итогами:

200 * (сумма NrUnits) * ((100 - [Сумма скидки]) / 100)

Таким образом, для вашей общей строки, если сумма скидки больше 100 (сложение всех сумм скидок в сводной таблице), часть вашей формулы (сумма скидок 100) будет возвращать отрицательное число, отсюда и отрицательное значение.

Обычно я добавляю в таблицу еще один столбец справа от значений, возвращаемых запросом. Я добавлю свои формулы туда, а затем сделаю сводную таблицу для таблицы с измененным размером.

Если вы отформатировали возвращенный SQL-запрос в виде таблицы (или списка в Excel 2003), диапазон источника сводной таблицы даже должен измениться сам по себе.

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

Я нашел ответ.

Excel эффективно делал это в общей сложности:

= (200 * sum(NrUnits)) * ((100-sum(Discount))/100)

Что даже близко не к тому, что я хотел:

= sum((200-NrUnits) * ((100-Discount) * 100)))

Я обошел его, изменив SQL с вида:

SELECT *, NrUnits*((100-Discount)*100) AS EffectiveUnits
FROM UnitDiscountView

И вычисляемое поле до:

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