|
|
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! Есть 4 варианта вычисляемых мер в MDX-запросе. Код: sql 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. Выдает такой результат: SKUВычисляемая мера Вариант1Вычисляемая мера Вариант2Вычисляемая мера Вариант3Вычисляемая мера Вариант4SKU1500.22500.22457889500.22457889500.22457889SKU2600.94600.9441800486600.9441800486600.9441800486 1. Корректно считать, что следующие записи из варианта 1 и 2 равносильны? Код: sql 1. 2. 3. И почему в первом варианте в результате короткая дробная часть? 2. Обратите внимание в 3 и 4 варианте, когда добавили проверочное условие,то в результате присутствуют только длинные дробные части. Не как вариант 1 и 2. Почему так? 3. Если запись в субкубе Код: sql 1. заменить на Код: sql 1. , то результат тот же самый. Если в субкубе я задал декабрь 2016, то MDX в кубе все равно вытягивает предыдущий месяц и не показывает ошибку. Почему так? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2017, 11:26 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, 1 - да конечно! потому что у Вас сумма конкретной координаты, а не набора. 2 - почему короткая - не знаю, sql при перемножении/делении тоже увеличивает размерности numeric, например (5,2) станет (10,4) 3 - разжевывали много раз - подселект не влияет на контекст вычислений, это можно даже заметить, что вычисляемый член [Анализируемый месяц] не входит в подселект, это не alias [Время].[Месяц].&[2016-12-01T00:00:00] - это вычисляемый член, поэтому все-равно что Вы поставите в подселекте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.03.2017, 12:42 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
Усложнятся задача. MDX-запрос по каждой SKU выгружает вычисляемую меру. Суть в том, что если выгружаемый месяц является текущим или предыдущим, то расчет по формуле, если месяц позапрошлый или ранее то просто выгружается мера без расчетов. Пытаюсь сообразить как это сделать. Код: sql 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. Нужно условие как то правильно написать, типа Код: sql 1. Хотя по логике CurrentSet нужен, но не существует в MDX. Как правильно написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 09:34 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, Не вникая в задачу... во всех расчетах везде указан конкретный член, поэтому не понимаю 2х вещей, зачем объявлять сеты из одного члена, причем не рекомендованным способом и зачем использовать функцию SUM? (сумма значений массива из одного элемента равна значению этого элемента) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 11:51 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikk, Не вникая в задачу... во всех расчетах везде указан конкретный член, поэтому не понимаю 2х вещей, зачем объявлять сеты из одного члена, причем не рекомендованным способом Потому что это простой пример запроса для понимания сути задачи. На самом деле вычисляемых мер больше и затрагивают другие месяцы. В один сет заталкиваю один месяц как переменную, потом во второй сет как вторую переменную, и т. д., чтобы каждый раз не менять месяцы в других строках MDX-запроса. Получаем несколько мер по разным месяцам. и зачем использовать функцию SUM? (сумма значений массива из одного элемента равна значению этого элемента) Вообще задается период, так как нужны разные месяцы. Возможно что то не учитываю. Если так, то пожалуйста, поправьте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 12:23 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikkВ один сет заталкиваю один месяц как переменную, потом во второй сет как вторую переменную почему сет, а не мембер? ferzmikkВообще задается период, так как нужны разные месяцы. Возможно что то не учитываю. не вижу периода, а в подселекте выяснили уже - не влияет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 13:31 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikkВ один сет заталкиваю один месяц как переменную, потом во второй сет как вторую переменную почему сет, а не мембер? Вот такой MDX-запрос. Код: sql 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. Как тут SET можно заменить на Member? Если заменить, то пишет "Иерархия "Measures" в кортеже появляется более одного раза". ShIgorзачем использовать функцию SUM? (сумма значений массива из одного элемента равна значению этого элемента) В запросе выше, если убрать SUM, то работает не корректно. Или как правильно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2017, 18:35 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikkMDX-запрос по каждой SKU выгружает вычисляемую меру. Суть в том, что если выгружаемый месяц является текущим или предыдущим, то расчет по формуле, если месяц позапрошлый или ранее то просто выгружается мера без расчетов. Пытаюсь сообразить как это сделать. Нужно условие как то правильно написать, типа Код: sql 1. Хотя по логике CurrentSet нужен, но не существует в MDX. Как правильно написать? И с этим разобраться бы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2017, 12:01 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikkВ один сет заталкиваю один месяц как переменную, потом во второй сет как вторую переменную почему сет, а не мембер? Разве в MEMBER можно затолкать только месяц? Насколько я правильно понимаю можно затолкать месяц с какой то мерой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 07:36 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikk, Не вникая в задачу... во всех расчетах везде указан конкретный член, поэтому не понимаю 2х вещей, зачем объявлять сеты из одного члена, причем не рекомендованным способом А рекомендованным способом здесь это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 08:08 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikkВ один сет заталкиваю один месяц как переменную, потом во второй сет как вторую переменную почему сет, а не мембер? Пример. Вот простой MDX-запрос Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Получаю нормальный результат Потом вместо SET пишу MEMBER Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. Получаю результат по всем месяцам Как правильно через меру задавать месяц тогда? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 08:23 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, в сторону: все проблемы от того, что Вы как-то пытаетесь писать запросы MDX не изучая его вообще. тут что-то подсмотрели, там что-то подсказали, получилось - хорошо, не получилось еще попробую, а основ-то не хватает. по сути: членов (member) можно создавать не только в измерении measures (да, да это тоже измерение, как это ни странно) правильный синтаксис with member [dimension.hierarchy.]member, если не указываете измерение и иерархию, то подразумевается measures. отсюда, для второго запроса можно даже написать ...select {[Январь 2017], [Вычисляемая мера]} on 0, т.к. они принадлежат одному измерению. но здесь ошибка в том, что SUM в [Вычисляемая мера] суммирует измерение measures, т.е. [Январь 2017] + [Measures].[Отгрузки шт], а [Январь 2017] раскрывается до ([Время].[Месяц].&[2017-01-01T00:00:00], Measures.CurrentMember), поэтому это отгрузки не за январь, а за все время + что-то лишнее. все вышесказанное приводит к след запросу: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. по все остальным вопросам разжевывать если честно лень - это все (включая этот пост) основы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 10:08 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorчленов (member) можно создавать не только в измерении measures (да, да это тоже измерение, как это ни странно) правильный синтаксис with member [dimension.hierarchy.]member, если не указываете измерение и иерархию, то подразумевается measures. отсюда, для второго запроса можно даже написать ...select {[Январь 2017], [Вычисляемая мера]} on 0, т.к. они принадлежат одному измерению. но здесь ошибка в том, что SUM в [Вычисляемая мера] суммирует измерение measures, т.е. [Январь 2017] + [Measures].[Отгрузки шт], а [Январь 2017] раскрывается до ([Время].[Месяц].&[2017-01-01T00:00:00], Measures.CurrentMember), поэтому это отгрузки не за январь, а за все время + что-то лишнее. Если для Set запись [Январь 2017]. Item(0).Lag(2) работает, то для Меры не работает. Работает, если меру еще так написать [Январь 2017]. Item(0) Получается для меры уже нельзя обратиться к предыдущему периоду. Верно? Или можно обратиться к предыдущему, но по другому надо записывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 13:56 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, 1. не путайте меру (measure) и члена (member)!!! (для измерения measures это допустимо, для других нет) 2. да, Lag не будет работать с вычисляемыми членами, к тому же она работает не с набором (set), а с уровнем иерархии указанного члена. 3. если Вам нравится работать с наборами - пожалуйста, разве кто ограничивает? и сравнение в этом случае вы сделаете просто [Текущий месяц].Item(0) is [Анализируемый месяц].Item(0) да и сумму выкиньте все-равно т.к. SUM([Анализируемый месяц], [Measures].[Мера1]) = ([Анализируемый месяц].Item(0), [Measures].[Мера1]) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.03.2017, 15:09 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorсравнение в этом случае вы сделаете просто [Текущий месяц].Item(0) is [Анализируемый месяц].Item(0) Провожу эксперимент Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. В результате отображаются единицы, а не двойки. Что тут пропущено? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 08:33 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, ищите своих тараканов сами Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вычисляемое поле БазовыйИмя ПредыдущийИмя1 CY 2009 CY 2009 Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Вычисляемое поле БазовыйИмя ПредыдущийИмя2 CY 2009 CY 2008 и научитесь уже ставить правильные скобки в нужных местах, в вашем коде легко не только человеку запутаться. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 09:22 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, это Ваш запрос: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Вычисляемое поле БазовыйИмя ПредыдущийИмя1 (null) (null) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 09:44 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikk, это Ваш запрос: Код: sql 1. Вычисляемое поле БазовыйИмя ПредыдущийИмя1 (null) (null) Период в субкубе неправильно написал и из за этого ошибка. А если надо два элемента сравнивать больше или меньше. Код: sql 1. То надо через Member делать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 13:32 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, почитайте наконец документацию хотя бы. вариантов несколько и все зависит от ситуации. видите же сами, моя рекомендация использовать членов Вам не подошла. здесь ситуация так же. на вскидку - можно сравнивать позицию внутри иерархии, можно значение (member value), а можно наименование в т.ч. приведенное к нужному типу, связанный атрибут, ключ, а может Вам надо сравнивать конкретную меру... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.03.2017, 15:34 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikk, почитайте наконец документацию хотя бы.Читать начал. вариантов несколько и все зависит от ситуации. видите же сами, моя рекомендация использовать членов Вам не подошла. здесь ситуация так же. на вскидку - можно сравнивать позицию внутри иерархии, можно значение (member value), а можно наименование в т.ч. приведенное к нужному типу, связанный атрибут, ключ, а может Вам надо сравнивать конкретную меру... Сразу опишу задачу в целом и не упрощая, чтобы не затягиваться. Хотя MDX-запрос получился очень длинным. И если посмотреть со структуры, то тут ничего сложного нет. Логика тут в том, что анализируемый месяц определяется: является ли текущим месяцем, предыдущим, позапрошлым или еще ранее. Исходя из этого подбирается формула для [Вычисляемая мераM Анализируемый месяцN], где M это номер меры и N это номер месяца. Код: sql 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. 96. 97. 98. 99. 100. 101. 102. 103. 104. 105. 106. 107. 108. 109. 110. 111. 112. 113. 114. 115. 116. 117. 118. 119. 120. 121. 122. 123. 124. 125. 126. 127. 128. 129. 130. 131. 132. 133. 134. 135. 136. 137. 1. Для данной задачи все таки месяцы лучше толкать в Set или в MEMBER? 2. Теперь имея полный код как правильно записать записи для выделенных строк в MDX-запросе? Учитывая, что если, например, сравнивать [Анализируемый базовый месяцN] с позапрошлым или ранее от текущего месяца , то IS не подойдет. 3. Логичнее тут использовать пользовательские функции для [Вычисляемая мераM Анализируемый месяцN], чтобы упростить MDX. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.03.2017, 11:40 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
В общем, удалось написать. Получил нужный результат. Запрос получился насыщенным. Код: sql 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. Хотелось было получить Ваши комментарий по данному MDX-запросу. Как оцениваете идею решения данной задачи, а именно, сравнение анализируемого месяца с текущим месяцем? Что тут лишнее? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 14:52 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ferzmikk, С предыдущего Вашего поста хотел описать но, времени не хватает продемонстрировать, чтоб не быть голословным. Однако все-таки придется.. Если я правильно понял: а. у Вас есть набор анализируемых месяцев (в т.ч. возможно текущий) б. у каждого из них есть еще предыдущий к анализируемому и позапрошлый к анализироемому. в. есть "основная мера" и "мера1", которые участвуют в расчете г. расчет зависит от текущего месяца, предыдущего к текущему и позапрошлого от текущего (главное здесь "текущий", а не анализируемый так?) итог: все сводится к одному набору месяцев и единственной вычисляемой мере. и я так понимаю, Вы просто детализировали каждый шаг вычисления чтоб самому себе было понятнее что к чему. С одной стороны это нормально (при сложных последовательных операциях я тоже так делаю, иначе легко запутаться), с другой стороны, окончательный запрос слишком "жесткий" и поправить в нем что-либо становится проблематичным. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 15:30 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikk, Если я правильно понял: а. у Вас есть набор анализируемых месяцев (в т.ч. возможно текущий) б. у каждого из них есть еще предыдущий к анализируемому и позапрошлый к анализироемому. в. есть "основная мера" и "мера1", которые участвуют в расчете г. расчет зависит от текущего месяца, предыдущего к текущему и позапрошлого от текущего (главное здесь "текущий", а не анализируемый так?) итог: все сводится к одному набору месяцев и единственной вычисляемой мере. В общем, опишу задачу по яснее. Есть Мера1 и Мера2. В кубе эти меры заложены так, что если сейчас Март 2017 г (то есть текущий месяц) и выгружаем за Январь 2017 Меру1, то выгружаем просто фактическую Меру1. Но если выгружать за февраль 2017 или март 2017 (даже если не полный март 2017), то тут надо не фактическую Меру1 выгружать, а расчетную. Аналогично для Меры2. Есть два анализируемых месяца для каждой меры. Каждый анализируемый период заглядывает предыдущий и позапрошлый месяц от анализируемого месяца в зависимости от того, какой текущий месяц. Используются три меры: Мера1, Мера2 и Общая мера. Получаются 4 формулы: [Вычисляемая мера N , Анализируемый месяц M ]. Логика заключается в том, что можно анализировать разные месяцы. Если эти месяцы ранние, то выгружаются просто фактические данные, если это анализируемый месяц является текущим или предыдущим от текущего месяца, то тут расчет проводится по формуле. См. скриншот. Код: sql 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. Похоже тут не обойтись без пользовательской функции, который принимает два параметра: Мера и Анализируемый период. Возможно надо будет еще параметр Общая Мера. Или тут можно попроще написать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 21:57 |
|
||
|
Логика расчета
|
|||
|---|---|---|---|
|
#18+
ShIgorferzmikk, С предыдущего Вашего поста хотел описать но, времени не хватает продемонстрировать, чтоб не быть голословным. Однако все-таки придется.. Если я правильно понял: а. у Вас есть набор анализируемых месяцев (в т.ч. возможно текущий)В данном примере для простоты представлены два анализируемых месяца и текущий месяц для сравнения. А в реальном примере 5 анализируемых месяцев и 4 меры. И причем расчеты немного отличаются для каждой меры, но идентичны для каждого анализируемого месяца. б. у каждого из них есть еще предыдущий к анализируемому и позапрошлый к анализируемому. в. есть "основная мера" и "мера1", которые участвуют в расчетеЕще Мера2г. расчет зависит от текущего месяца, предыдущего к текущему и позапрошлого от текущего (главное здесь "текущий", а не анализируемый так?)Пример, Текущий месяц это Март 2017 год. Анализируемый месяц1 это Ноябрь 2016, а анализируемый месяц2 это Февраль 2017.итог: все сводится к одному набору месяцев и единственной вычисляемой мере.И как это выглядит?и я так понимаю, Вы просто детализировали каждый шаг вычисления чтоб самому себе было понятнее что к чему. С одной стороны это нормально (при сложных последовательных операциях я тоже так делаю, иначе легко запутаться), с другой стороны, окончательный запрос слишком "жесткий" и поправить в нем что-либо становится проблематичным.Почему слишком "жесткий"? Он же структурированный, что не придется ломать весь код. В общем расчет хитрый, но задачка интересная. Возможно для такой задачи можно не усложнять, а попроще написать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2017, 22:15 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39414620&tid=1858286]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 277ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...