|
|
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
Коллеги, подскажите пожалуйста. Руководство хочет сэкономить известную сумму - на разнице между Enterprise и Standart версиями. Мигрируем с 2008/R2 на 2017. Способности этой версии всех заинтересованных лиц устраивают (и про SQL и про OLAP) , кроме нехватки ряда полуаддитивных мер. Среди тех, что нам нужна , но которую я не понимаю, как эмулировать - FIRSTchild. Возможно ли ее эмулировать MDX-запросом? Если да, то подскажите пожалуйста, как именно, или где посмотреть. Сильно ли просядет производительность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 18:18 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, Фактически Last/FirstChild , First/LastNonEmpty и ByAccount это функции иерархий. Эмулируется в скрипте запросто - ставишь уровень иерархии (выше листового) / .currentmember и на него .FirstChild Работает естественно немного медленнее. Насколько - зависит от структуры куба и тяжести данных, в том числе размера измерений. Если пользователю нужно в отчёте показать 10 простых строк - то в принципе разницы заметно и не будет, если там на заднем плане анализ простыней по несколько миллионов ячеек и потом расчёты над ними - то вполне может дополнительно просесть так что будет сильно заметно. Всё проверяется/тестируется по конкретным сценариям имеющейся архитектуры куба/данных и их свойств. Так что замена вполне элементарна, без особых выкрутасов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.10.2018, 19:17 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
vikkiv, Не получается :( если так (хочу увидеть этот самый текущий элемент) Код: sql 1. или так Код: sql 1. то возвращает NULL если пишу так: Код: sql 1. то получаю "Функция CURRENTMEMBER ожидает для аргумента 1 выражение иерархии. Было использовано выражение элемента." Ну это хоть ожидаемо, - но почему в предыдущем случае NULL ? так тоже NULL : Код: sql 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 15:00 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, хрустальный шар подсказывает что ошибка скорей всего в остальной - невидимой части запроса (или в искомых координатах действительно нет данных) вот работающий пример из Adventure Works 2014 на первое число каждого месяца 2013-го года Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.10.2018, 17:03 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
vikkiv, Спасибо Вам и хрустальному шару! Все заработало. В моем примере не хватало вызова member_name, и в итоге NULL сбивал с толку , и мне казалось , что "ничего не работает" :) В невидимой части запроса было все нормально. -- Но вот еще вопрос: правильно ли я понимаю, что для вычисляемых таким образом мер невозможно построить предагрегаты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 12:51 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, верно, вычисляемые меры вычисляются во время выполнения запроса, в то время как материальные - просто считываются (из агрегаций или партиций с данными) вычисляемые меры обычно рассчитываются на основе материальных мер (хотя смотря что считать, можно материальные вообще не привлекать) есть ещё вариант когда и те и другие берутся из кэша (на основе предыдущих запросов) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 11.10.2018, 16:25 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
vikkiv, Может, еще поможете? вот пока что получилось : Код: sql 1. 2. 3. НО! ведь иерархий то в измерении - несколько! И оказывается, что для других иерархий это уже не срабатывает , что, собственно, ожидаемо, - т.к. она тут указана явно. Если бы вместо [Год-Месяц-День] была бы функция CurrentHierarhy - то , видимо, вопрос бы решился :) Но вот я ее не нашел. Может, плохо искал? Или пятью (а при добавлении в измерение еще чего-то - и больше) вложенными IIF-ами определять , какая иерархия сейчас активна (сравнивать с именем члена на равенство ALL или на пустоту) - и уже ее подсовывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2018, 21:23 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, такого действительно нет, но иерархии состоят из одноуровневых (сам-себе иерархия) атрибутов (часто из одних и тех-же) делай scope и в снизу вверх по пирамиде иерархии прописывай уровень за уровнем параллельно для каждой иерархии отдельно (при том что на остальные иерархии в scope ставить [All] чтобы переназначение их не трогало) иначе если порядок нарушить то freeze придётся использовать, что не рекомендуется, ну в общем чтобы вытаскивать правильно назначенные (прописанные) элементы более низкого уровня например для двух иерархий [день-неделя-год] и [день-месяц-квартал-год] пишем сначала неделя, потом месяц, потом квартал и наконец год, бывают конечно более интересные случаи с разными иерархиями (календарная, фискальная, налоговая, финансовая и т.д.) - но там обычно верхние атрибуты разные можно попробовать напрямую атрибут за атрибутом писать так-же снизу вверх по связям между атрибутами без иерархий через head(exists(..)), хотя для иерархий своё хранилище, не помню уже.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2018, 22:14 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
Уважаемый vikkiv, опять беда :) Вроде разобрался , как и что надо вписывать , посмотрел, как обращение к элементам зависит от выбранной иерархии/фильтра , как это работает в окне запросов, и собрался уже смотреть в кубе... , но вот не получается вписать :( А именно : Вот такое в Calculate ( в режиме Script View ) вписывается нормально (два мембера чисто для иллюстрации) : Код: 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. (Ну и вокруг много еще чего, понятно). а если откомментировать участок со скоупами, - то выдает синтаксическую ошибку. подчеркивает - первое же слово SCOPE. Что же ему не нравится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 17:35 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, в принципе Visual Studio проверка не всегда правильно работает (т.е. обращает внимание на в принципе правильные конструкции, иногда не распознаёт неправильные), я часто подчёркивания игнорирую, в подавляющем большинстве случаев всё прекрасно работает (стоит просто выгрузить на сервер, если не грузит на сервер - то да, нужно копать), но бывает действительно серьёзные ошибки/описки помогает найти.. 1) скобки тупла для одной позиции не обязательны 2) точки с запятой после четвёрки не хватает - хотя судя по "(Ну и вокруг много еще чего, понятно)." - просто потерялось на пути в форум 3) легче всего экспериментировать на Adventure Works (полной или урезанной до пары измерений и групп мер версии с выкинутыми скриптами, в которых так-же и есть примеры) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 19:15 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
vikkiv, Вот уж точно, как говорится - незамыленный взгляд! Именно п.2. ! (ничего не потерялось. я именно дословно все скопипастил с обрамлением , и оказалось - не зря :) ) Огромное спасибо! Ну а дальше, - да, подсвечивает не ошибки, а непонятно что... Это-то знакомо, так что чисто на "подсветку" я бы и не жаловался , дело в том, что именно " не грузил на сервер ", - я это пробовал , я не останавливался на "ах, он мне подчеркнул!... Что же теперь делать!?..." :) -- P.S. Но вот что мне стало "вдруг" интересно: а что, неужели, при неоднократном упоминании отличий версии STD от ENTERPR , - реально никто не эмулировал FirstChild на урезанной версии? - я сужу по кол-ву откликов на мой топик. Но это не к Вам, vikkiv, это "ко всем" :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.10.2018, 20:51 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, ну мало-ли почему, была эта тема уже несколько раз (в т. ч. переход от LastChild который в Standard помнится работал к First..), да и статей в сети довольно много как это делать, может поэтому никому и не интересно отвечать было, да и рынок MD кубов сжимается понемногу с выходом гибких мощностей облаков, MPP, фреймворков и прочих альтернатив.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.10.2018, 04:55 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
vikkiv, получилось почти все :) Но не все :( Не понятно, как обработать ситуацию, когда в фильтре выбрано несколько дочерних элементов в разных родителях , и выводятся результаты с промежуточными итогами. Например: "по нескольку дней в каждом месяце", и смотрим итоги помесячно. В этом случае цепляется мера из последнего дня предыдущего месяца, а не предыдущего по отношению к первому выбранному в этом месяце дню. вот так вот это выглядит : Код: plaintext 1. 2. 3. 4. 5. 6. 7. Итог за июнь берется не зеленое 1862, а голубое 6371. Все строго по формуле, только формула пока что хромает. Как в формуле выбрать "первого потомка из выбранных в фильтре"? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 19:16 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
binro, что там что и откуда, какие агрегации/расчёты, где формулы? смешались в кучу люди, кони.. неплохо-бы расписать, т.к. маловероятно кто копаться будет в десятке постов (а часто и больше - по нескольку страниц). Всё решаемо, вопрос в организации логики (хоть часто и не так как удобно или хотелось) С мультиселектом - известная проблема, если идёт в Where - то можно подобрать контекст, если закопано в From то увы, только с бубном. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 20:06 |
|
||
|
Эмуляция FIRSTchild в Standard редакции
|
|||
|---|---|---|---|
|
#18+
vikkiv, Так проблема не в том, что я не понимаю , как работает то, что я накропал :) Проблема в том, что я не знаю, как сделать то, что я пока не умею :( Формула-то вот: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. В тех скоупах, что в ней вписаны, - она меня устраивает и мне вроде все понятно. Спасибо за инструкции :) А что надо сделать для этого : vikkivС мультиселектом - известная проблема, если идёт в Where - то можно подобрать контекст, если закопано в From то увы, только с бубном. Нашел тут на эту тему вот такие подсказки: Код: sql 1. Но еще не успел это опробовать. Не понимаю пока, что дальше с этим набором делать. Так вычисляется набор выбранных в фильтре дней и его надо засунуть в THIS ? Мультиселект возникает в клиенте (Екселе) - Ексель что, иногда строит запрос с такими фильтрами на уровне From ? ну допустим, это мы реализовать не стремимся... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.10.2018, 20:27 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=39720144&tid=1857741]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
166ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
1ms |
| others: | 251ms |
| total: | 507ms |

| 0 / 0 |

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