|
|
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
Добрый день, имеется иерархия: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Как подсчитать нарастающий итог по "measure" с применением фактора (measure * faktor)? Фактор нужно применять при isleaf = 0. Затем итог выражения SUM(measure) * faktor использовать дальше для подсчета нарастающего итога следующих элементов. При подсчете нарастающего итога двигаться нужно от isleaf = 1 к root. Попытался в Excel отразить пример подсчета. Также прилагаю скрипты с примерами. Заранее спасибо! Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2017, 14:46 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
Привел иерархию в более упрощенный вид, тем что агрегировал последние элементы с предпоследними, т.к. фактор в последних элементах не учитывается: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. Проблема в томе что, никак не могу получить сумму предыдущих элементов по иерархии. P.S. В настоящей задачи дополнительно к выражению (measure * faktor) прибавляются еще пару констант, поэтому вынос faktor "за скобку" не будет работать. Результат в Ехcel: ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 11:30 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
Что-то типа: Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 15:37 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
SY, спасибо!!! Круто!!! Сейчас буду разбираться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 15:45 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
Hans Christian Andersen, Дедовский метод со вложенной деревяшкой. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. Еще можно self join по like если вычислить path с произведением факторов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2017, 20:28 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
Спасибо Вам dbms_photoshop, но я использую решение SY, т.к. вместо faktor нужно применять формулу. Для опыта, ваше решение очень полезно! P.S. Спасибо SY за решение. Я протестировал с маленьким количеством данных - все работает. Буду пробовать запрос с большим количеством элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 01:39 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopДедовский метод со вложенной деревяшкой. Не слишком эффективно, так-как число строимых иерархий равно числу строк таблицы, когда нам нужна одна иерархия и рекурсивное вычисление вверх от листа. MODEL можно заменить на recursive subquery factoring. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 14:07 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
SYНе слишком эффективноСпору нет, было написано просто для полноты картины. Модель здесь лучше, потому что учитывает уже посчитанное. Но если мы гонимся за перфомансом, то думаю PL/SQL решение уделает модель на порядки. SYMODEL можно заменить на recursive subquery factoring.С обходом снизу вверх? Тут возникает проблема, что если для узла несколько детей, то мы приходим в него несколько раз и, возможно, на разных уровнях. Поэтому вместо тривиального обхода от листьев к корню надо немного извернуться. Код: plsql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. Или есть вариант попроще? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 15:56 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
dbms_photoshopС обходом снизу вверх? Да нет, я же сказал "MODEL можно заменить на recursive subquery factoring", а иерархию всерху-вниз кончно не трогаем. SY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 17:22 |
|
||
|
Нарастающий итог (агрегированные суммы) по иерархии с применением фактора
|
|||
|---|---|---|---|
|
#18+
SYdbms_photoshopС обходом снизу вверх? Да нет, я же сказал "MODEL можно заменить на recursive subquery factoring", а иерархию всерху-вниз кончно не трогаем. SY.Если присмотреться, я использовал hier#, которую ввел автор как раз как иерархию от корня. Потом на основании ёё идет агрегация к корню с помощью rec with. Все это требует хитрого соединения в рекурсивном члене по OR и пару других трюков. Вопрос был, есть ли идеи для более простого решения. Выражение "можно заменить" ну никак не проясняет подход. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.09.2017, 17:43 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39518788&tid=1885277]: |
0ms |
get settings: |
9ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
224ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 564ms |

| 0 / 0 |
