Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Такой запрос выполняется без проблем. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. а этот возвращает #Error Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Почему? p.s. Рассмотрение под лупой указывает на UInt32.max :-( хотя эксперименты проводятся на 64-битной машине. AS2005CellOrdinal 0 VALUE #Error Der Ausdruck enthält eine Funktion, die nicht für eine Menge mit mehr als 4.294.967.296 Tupeln ausgeführt werden kann. FORMATTED_VALUE #Error Der Ausdruck enthält eine Funktion, die nicht für eine Menge mit mehr als 4.294.967.296 Tupeln ausgeführt werden kann. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 00:04 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Маньяк хватит ошибки на немецком слать :-)....... А если так прикинуть то сколько ячеек вернет это перемножение? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 13:14 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Что-то смахивает на то, будто бы возникает бесконечная рекурсия. NonEmpty ведь без Measure не имеет смысл, а в данном случае (в случае ошибки) Measures.CurrentMember - это и есть сам measures.mymember Владислав Беляев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.01.2006, 16:04 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Спасибо г-ну Беляеву - действительно current measure это и есть calculated measure и казалось бы должна быть бесконечная рекурсия. Но AS2005 умеет бороться с такой рекурсией когда цикл рекурсии всего одно звено. Ошибка из-за другого - поскольку есть вычисления наложенные поверх Non Empty, то QO приходится итерировать по всему сету, а там действительно много туплов. Эту ошибку я вставил как предохранитель, чтобы не сидели пользователи часами и ждали пока проитерирует по такому количеству туплов. А вот не было бы вычисления, QO этот бы запрос разделал бы быстро и легко. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 08:40 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Тогда как объяснить, что запрос с меньшим сетом Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. уводит сервер в тяжкие раздумия? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 09:22 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Так я как раз именно это и обьяснил в предыдущем посте ! Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 09:50 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Т.е. сколько в этом сете туплов. А для каждого, придется повторить это же самое вычисление, т.к. current measure не поменялось. Достаточно посмотреть на perfmon counter или на trace на количество NON EMPTY operations - и станет ясно почему это так долго работает. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 10:06 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
Хорошо, ваши объяснения кое как понятны. Но мне не понятно, что должен возвращать? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Он возвращает 11201304 за 1:37 В то время как Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. возвращает за 6173656 0:47 и Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. возвращает 6173656 за 0:40 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 10:25 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
MoshaСпасибо г-ну Беляеву - действительно current measure это и есть calculated measure и казалось бы должна быть бесконечная рекурсия. Но AS2005 умеет бороться с такой рекурсией когда цикл рекурсии всего одно звено. Ошибка из-за другого - поскольку есть вычисления наложенные поверх Non Empty, то QO приходится итерировать по всему сету, а там действительно много туплов. Эту ошибку я вставил как предохранитель, чтобы не сидели пользователи часами и ждали пока проитерирует по такому количеству туплов. А вот не было бы вычисления, QO этот бы запрос разделал бы быстро и легко. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights Мне кажется, что AS должен в данном случае возвращать ошибку infinite recursion, а не пытаться с ней побороться. Ну хотя бы это должно настраиваться. Я не прав? Владислав Беляев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 11:39 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
БеляевМне кажется, что AS должен в данном случае возвращать ошибку infinite recursion, а не пытаться с ней побороться. Ну хотя бы это должно настраиваться. Я не прав? Я с Вами согласен. Проблема в том как AS может определить когда автоматическое разрешение рекурсии надо делать, а когда нет. Например, в таком примере: Код: plaintext мы не хотим давать ошибку (как это было в АS2000). Идея была в том, что пользователи будут использовать рекурсию на самого себя когда это действительно имеет смысл, а не тогда когда в этом смысла нет. Я понимаю, что backfire сделал свой пример исключительно в целях тестирования, никакой реальной проблемы его запрос не решает. Дать возможность настройки - звучит как хорошая идея, но кто этой настройкой будет пользоваться ? Ведь те кто обычно попадает в бесконечную рекурсию, вряд ли об этом догадываются - иначе зачем бы они писали формулы которые заведомо должны дать ошибку... backfireНо мне не понятно, что должен возвращать? Это тоже все обьяснимо. Когда Вы создаете named set, то он считается статически один раз и с координатой по мерам которая DefaultMeasure. Поэтому и результат такой и считает он очень быстро. И нет разницы между NonEmpty и NonEmptyCrossJoin, т.к. для DefaultMeasure нет в AdventureWorks никаких вычислений. А вот в первом запросе, NonEmptyCrossJoin должна работать при текущей координате в мерах - calculated measure. И кому как не Вам знать что тогда происходит - мы ведь в SP4 даже чинили такой баг по Вашей наводке :) Надо пройти по всем measure groups - и это занимает больше времени и результат тоже больше. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.01.2006, 20:41 |
|
||
|
AS2005. Где ошибка в MDX?
|
|||
|---|---|---|---|
|
#18+
MoshaПроблема в том как AS может определить когда автоматическое разрешение рекурсии надо делать, а когда нет. Например, в таком примере: Код: plaintext мы не хотим давать ошибку (как это было в АS2000). Идея была в том, что пользователи будут использовать рекурсию на самого себя когда это действительно имеет смысл, а не тогда когда в этом смысла нет. Красивая формула... Как мы уже говорили, за красоту надо платить. А что если сделать какое-то свойство у Calculated members типа Solve_order, которое разрешало бы вот такое, как в приведенном Вами примере, разрешение рекурсии и в скриптах тоже свойство какое-то. По умолчанию Infinite recursion запрещена и выдается ошибка, но поменяв значение данного свойства можно определить максимально разрешенное число итераций и добится эффекта как в примере. Mosha Дать возможность настройки - звучит как хорошая идея, но кто этой настройкой будет пользоваться ? Ведь те кто обычно попадает в бесконечную рекурсию, вряд ли об этом догадываются - иначе зачем бы они писали формулы которые заведомо должны дать ошибку... Так вот ведь и получается что ошибки может и не возникнуть, и будем ломать голову что же происходить, почему неверные данные лезут. А это не так просто бесконечную рекурсию выявить в MDX, где существует текущий контекст и прочие разные умолчания. Что собственно backfire и показал Владислав Беляев ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.01.2006, 12:24 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=33474040&tid=1870668]: |
0ms |
get settings: |
10ms |
get forum list: |
17ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 265ms |
| total: | 430ms |

| 0 / 0 |
