|
|
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Здравствуйте! В кубе есть last value мера: остатки на конец периода. И нужно посчитать на начало периода, для чего я хочу взять эту же меру на предыдущий период. Делаю так Код: sql 1. 2. 3. все считается, но не работает на мультиселекте. Подскажите, пожалуйста, как переписать для мультиселекта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 15:59 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Lia7575, imho: я бы сделал отдельную меру - остаток на начало периода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 16:54 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
user6278, Но у меня в таблице фактов - сумма остатка на конец каждого дня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 17:03 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Lia7575, Записывайте в calculations куба как-то так Код: sql 1. 2. или напрямую задавайте иерархию в SCOPE по которой нужнен мультиселект ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.03.2013, 19:22 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
RioMare, К сожалению, так тоже не получается. На мультиселекте не работает ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 17:31 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Lia7575, А создать ещё 1 вьюху поверх остатков, где отнять от даты один день и засунуть её как новую measure group не подойдёт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 17:34 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
loki1984, Я думала об этом. Но если выбирать несколько месяцев или лет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 20:03 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Lia7575, Как предплолжение - ваш мультиселект не понимает что такое [Дата].[Иерархия времени] .PrevMember Как вариант - посмотрите вот это Ещё лучше если напишите что "не работает" ( MDX ) и как "не работает" ( результат ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 20:26 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
RioMareLia7575, Записывайте в calculations куба как-то так Код: sql 1. 2. или напрямую задавайте иерархию в SCOPE по которой нужнен мультиселект Выбрали в иерархии галочками один квартал и один месяц из другого квартала. Что покажет multiselect? На один подзапрос [Дата].[Иерархия времени].PrevMember укажет предыдущий месяц, на другой подзапрос [Дата].[Иерархия времени].PrevMember укажет предыдущий квартал, и что это даст, будет 2 разные суммы - 10 штук на февраль 2012 и 20 штук на второй квартал 2005, что показывать в отчете, как это суммировать? Не работает multiselect на остатках, и не должен, мера не аддитивная. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.03.2013, 20:54 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, А если, предположим, выбрать период с 1 по 6 марта. Остатки на конец дня 6 марта я увижу. А как посмотреть остатки на начало этого периода? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 12:56 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, Как я понимаю ( но могу и ошибаться ) проблема тут немного другая - для "февраль 2013" LastCHild меры для остатков на "Q1/2013" ещё нет ( как и на "2013 год" ). Однако если выбрать только месяцы, то должно показать и на "февраль 2013" и аггрегированое значение должно быть тоже на "февраль 2013". С прошлым полным периодом должно работать нормально, поскольку на 2012 год все значения определены ( если конечно время не запихивать в фильтр в Екселе ). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 13:05 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Я просто хочу видеть остаток на начало периода и на конец периода. Если я выбираю один день или один месяц, то я вижу эти остатки. А если я выбираю несколько дней подряд или месяцев, то, соответственно, вижу только остаток на конец периода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 13:31 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Lia7575Я просто хочу видеть остаток на начало периода и на конец периода. Если я выбираю один день или один месяц, то я вижу эти остатки. А если я выбираю несколько дней подряд или месяцев, то, соответственно, вижу только остаток на конец периода. Напишите простую формулу [Дата].[Г-М-Д].PrevMember.Properties("Key"). Для одного месяца февраля 2005 она выдаст "200501", для 2007 года выдаст "2006" (ключи соответствующих атрибутов "Месяц" или "Год" ). Теперь выберите фильтр Г-М-Д в фильтр отчета в Excel. Выберите февраль 2006 - работает. А теперь выберите февраль 2006 и март 2006 2 галочками. Не работает. Потому что не должно, мера не аддитивная. И остатки - то же самое. Выбираете март 2005, 1 апреля 2006 и весь 2007 год. Остатки на 2007 год Вам должен показать куб? А если на декабрь 2007 не определено, а на февраль 2005 определена мера - будет выбираться март 2005? Мне кажется, Редмонд специально сделал так, чтобы при множественном выборе подобные формулы не работали. Суммы складываются, а все остальное - не работает. И не должно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 17:05 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, Так а какой тогда выход? Если я не могу с помощью MDX построить остатки на начало периода, то каким образом мне это сделать? Мне не нужно выбирать, предположим, 2007-й год, март 2011-го и 1 января 2013-го. Я всего лишь хочу посмотреть остатки на начало и конец выбранного периода. Т.е., например, с 15 января по 15 февраля. Или с марта по май ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 17:41 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Lia7575Andy_OLAP, Так а какой тогда выход? Если я не могу с помощью MDX построить остатки на начало периода, то каким образом мне это сделать? Мне не нужно выбирать, предположим, 2007-й год, март 2011-го и 1 января 2013-го. Я всего лишь хочу посмотреть остатки на начало и конец выбранного периода. Т.е., например, с 15 января по 15 февраля. Или с марта по май А выхода нет. Вообще. Для одного длинного непрерывного периода можно получить начало формулой Head и хвост формулой Tail, выбра в фильтр дату из второго измерения дат. Далее взяв ключ первого дня периода и ключ последнего дня периода, можно получить месяц первого дня и месяц последнего дня, далее по иерархии Г-М-Д выбрать предыдущий месяц от первого дня периода и остатки на конец этого предыдущего месяца - вот Вам остаток на начало периода. Далее просто остаток на конец периода для последнего выбранного месяца. Ну, допустим, выбрали 1-й квартал 2013, получили остатки на конец декабря 2012 и остатки на конец марта 2013. При этом это 2 РАЗНЫХ показателя, 2 разные формулы. Но если галочками Вы выбрали 2 квартала - вот считается мера остатка на декабрь 2012, мера на март 2013, что в куб возвращать из OLAPа? Ведь это будут 2 подзапроса, которые друг о друге ничего не знают, а сложить как сумму нельзя - мера не аддитивная. Вот в чем загвоздка. Остатки считаются для любого непрерывного периода, одним подзапросом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.03.2013, 17:51 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, А как же работает при мультиселекте FirstChild в качестве свойства меры ( AggregateFunction )? Да и тот же LastChild - он ведь тоже неаддитивен. А ведь она ж работает и на дробных (с разрывами) и на сплошных мультивыбранных элементах. Значит, внутри себя ОЛАП это умеет. Осталось только научиться имитировать это своими calculate-ми. В принципе, если версия не урезанная (т.е. не Стандарт, а Ентерпрайз) , то заявленная проблема может быть решена и без них: во вьюху добавить колонку именно с остатками на предыдущий день , оконной функцией они же легко достаются. Ну или джойнить таблицу на саму себя, если версия скуля старая. Тогда данные при процессинге будут отдаваться "чуток" помедленнее. А в новой мере соотв-щей выставить агрегацию FirstChild. Но сложности начинаются на версии Standart :( Там приходится эмулировать FirstChild при помощи LastChild предыдущего элемента вот такой кусок почти решает задачу: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. И даже на мультиселекте работает, - но неверно работает. вот так вот это выглядит (в мультиселекте выбраны ровно те даты, которые тут показаны): Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. Итог за июнь берется не 1862 (первый в выбранном множестве), а 6371 - последний за МАЙ . А итог за квартал - не запись за 3-е апреля, а запись на конец 1-го квартала. ну и т.д. Andy_OLAP, может, подскажете, как при помощи intersect и existing найти потомков для итоговых строк , чтобы уже среди них брать HEAD? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.10.2018, 22:19 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
binro, У Вас получается, что на дату - ключевой атрибут - Вы переопределяете как prevmember. Но для мультиселекта этот currentmember есть All, а что от него есть prevmember - таки никто не знает. Код: sql 1. 2. 3. 4. 5. 6. Поэтому можно сделать так. Код: sql 1. 2. 3. 4. Но тут возникает вопрос - у Вас пользователь выбрал галочками 1 и 3 января. Физически фильтром в шапке сводной таблицы. Это то, что уходит в where, так? Начальный остаток на 3 января - это конечный остаток на 2 января, который отличается от конечного остатка на 1 января. А у Вас это 2 января отсекается. Поэтому по сути нужно 2 физические меры и 2 scope переопределения сразу. Код: sql 1. 2. Весь смысл функционала enterprise - это явная работа last-non-empty, даже если галочками выбрали несколько дней внутри периода с дырками между выбранными днями. И обходить это с помощью формул - себе дороже, чем купить лицензию. Впрочем, если шекелей нет - можно быть жадным, бедным и находчивым :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 14:33 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, Имелось в виду конечно же Код: sql 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 14:33 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
Andy_OLAP, судя по некоторым изысканиям, текущий элемент при мультиселекте иногда таки определен. Вот смотрите , что получилось: Код: 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. несколько промежуточных членов - для иллюстрации некоторых неожиданностей (для меня) работы некоторых функций. А выглядит результат так : см. картинку. (числа - те же, что в предыдущем примере, - можно увидеть, что "ост на нач" по итогам месяцев, где выбрано несколько дней, стали другими). Осталось прописать другие уровни иерархии (квартал, год, и вариант, когда отдельно месяцы или годы выводятся , без иерархии ГКМД). Шекелей не то чтобы совсем нет, - но поставлена задача их поэкономить :). И также нет возможности считать остаток как сумму движений, т.к. у нас остаток имеет право поменяться без движения. Да, так вот :). Но самое мне непонятное из того, что Вы написали, - а как затрудняет вычисление первого члена наличие "дырок" в последовательности остальных членов? ведь нас интересует только один, самый первый, - что нам с того, что их там - дальше - то ли пять, то ли сто? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.10.2018, 18:30 |
|
||
|
Остатки на предыдущий период и мультиселект SSAS 2008
|
|||
|---|---|---|---|
|
#18+
binroAndy_OLAP, судя по некоторым изысканиям, текущий элемент при мультиселекте иногда таки определен. Вот смотрите , что получилось: Код: sql 1. 2. Вы поймите, набор элементов измерения это [Календарь].[Дата].[Дата], а [Календарь].[Год-Месяц-День].[День] - это набор вариантов нижнего уровня иерархии. Набор уровней нужен, чтобы сделать так - когда стоите на дате, можно получить ее месяц [Календарь].[Год-Месяц-День].CurrentMember.Parent и ее год [Календарь].[Год-Месяц-День].CurrentMember.Parent.Parent, а можно получить ее неделю [Календарь].[Год-Неделя-День].CurrentMember.Parent и понедельник этой недели [Календарь].[Год-Неделя-День].CurrentMember.Parent.FirstValue (если все сделали правильно при назначении типов на атрибуты измерения, которые затем легли в уровни иерархий для месяцев и для недель). Когда Вы пишите [Календарь].[Год-Месяц-День].CurrentMember.Lag(1) - это один день назад для ДАТЫ и один месяц назад для МЕСЯЦА, понимаете? Это зависит от того, где Вы находитесь на иерархии. binroнесколько промежуточных членов - для иллюстрации некоторых неожиданностей (для меня) работы некоторых функций. А выглядит результат так : см. картинку. (числа - те же, что в предыдущем примере, - можно увидеть, что "ост на нач" по итогам месяцев, где выбрано несколько дней, стали другими). Осталось прописать другие уровни иерархии (квартал, год, и вариант, когда отдельно месяцы или годы выводятся , без иерархии ГКМД). Насчет "дырок" - у Вас для месяца мая выбрано 15 и 16 и 18 и 31 мая. Отлично. Вы стоите на мае целиком и получаете внутри набор из 4 элементов, для которых последний и дает окончание мая. Но первый - 15 мая - не дает правильный остаток на начало периода. Это или остаток на 1 мая минус один день вместо 15 мая минус 1 день или мая для 15 мая минус 1 месяц (как остаток на конец всего апреля). А если в апреле тоже дырки, выбраны 2 и 3 апреля - не получится ли остаток на конец апреля как остаток на конец 3 апреля? Вот в чем подвох расчета по existing подсету и item(0) или item(подсет.count-1). Можно, получив внутри апреля набор из 2 и 3 апреля, понять, что остаток на конец и начало апреля нужно показывать, сделать так - [Календарь].[Год-Месяц-День].CurrentMember.Parent.FirstValue для 1 даты месяца и [Календарь].[Год-Месяц-День].CurrentMember.Parent.LastValue для последней даты месяца или [Календарь].[Год-Месяц-День].CurrentMember.Parent.Lag(1).LastValue для последней даты предыдущего месяца (как начальный остаток на этот месяц апрель). Получить точно key нужного элемента, а затем получить дату как StrToMember("[Календарь].[Дата].[Дата].&["+CStr(key нужного дня типа 20180331)+"]"). Пояснять это долго. Проще показать. Но не проще, мне Вам показывать теоретически можно, да только Вам потом понадобится память стереть :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 29.10.2018, 00:42 |
|
||
|
|

start [/forum/topic.php?fid=49&msg=38174939&tid=1857740]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
155ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
43ms |
get tp. blocked users: |
1ms |
| others: | 224ms |
| total: | 464ms |

| 0 / 0 |

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