|
|
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток! Есть SQL-таблица прайсов, в которой цены устанавливаются на определенный товар в какой-то день. И эти цены действуют до очередного изменения, которое может произойти в любой день. Соответственно, в этой таблице накапливаются только даты установки прайсов. Вопрос: есть ли возможность отразить в CM (Analysis2000) на каждый день последнюю цену до следующего изменения? Соответственно, как только состоялось новое изменение, отражается именно оно до следующего и т.д.? Или выход только в заполнении SQL-таблицы ценами на каждый день, у которых дата равна или более даты изменения цены и менее, чем дата следующего изменения этой цены? В кубе измерение времени "Дата" имеет иерархию: Год - Месяц - Декада - День. Большое спасибо заранее! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 07:51 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
nextTyro, Если над ценами не нужно вычислять какие-либо агрегированные показатели (средняя цена по направлению и т.д.), то в SSAS 2005 для обычных мер есть AggregationFunction = LastNonEmpty, при ее использовании по каждому товару как раз будет показываться последняя выставленная по нему цена. К сожалению, при снятии цены по группе товаров AS не будет вычислять последнюю цену по каждому товару, он возьмет только цены за последнюю дату изменения цен в этой группе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.04.2009, 10:21 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
У меня в параллели работает и SSAS2005, нo Standart Edition. И из семиаддитивных функций доступна только LastChild. На форуме прочла, что достаточно присвоить мере "Price" в ее свойствах AggregateFunction - LastChild. И где-то в фактах указать значение - "показывать последний день". Где - не могу найти. А сейчас все сворачивается на начальную дату измерения "Time". Не подскажете? Или где прочитать про варианты установок ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2009, 13:09 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Или это как-то решается через СМ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2009, 08:20 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Так как у вас нет в распоряжении функции LastNonEmpty то придется писать руками MDX для CM Благо на форуме примеров не мало. Если возникнут трудности в инерпретации, дайте знать, поможем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.05.2009, 14:23 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Измерение Time.Дата (в AS2005) имеет иерархию Year-Quarter-Month-Decade-Id. База обрезана (с 31.12.2008 года), соответственно измерение Time.Дата включает в себя период с 31.12.2008 г. по 31.12.2009 г. Но в таблице Prices цены на товар с 01.01.2002 года, и по сей день они меняются. Запуталась с датами. Читаю: --дотягиваем последнее значение "до конца" времени ([Calendar].[Date].&[20070522] : NULL, [Amount End]) = [Calendar].[Date].&[20070521]; У меня это, видимо, до конца года? .... Не могу понять, что за даты ставятся и почему разница в один день. --Потом она копируется в calculated measure. CREATE [Display Amount End] = [Amount End]; --потом пишется простой SCOPE, который обнуляет этот calculated measure на тех месяцах где надо: ([Calendar].[Date].&[20070522] : NULL, [Display Amount End]) = NULL; ([Calendar].[Month].&[200706] : NULL, [Display Amount End]) = NULL; ([Calendar].[Quarter].&[200703] : NULL, [Display Amount End]) = NULL; ([Calendar].[Year].&[2008] : NULL, [Display Amount End]) = NULL; У меня: ([Time].[Дата].[ID].&[.......]: NULL, [PriceLCh]) = NULL; ([Time].[Дата].[Decad].&[.......] : NULL, [PriceLCh]) = NULL; ([Time].[Дата].[Month].&[.......] : NULL, [PriceLCh]) = NULL; ([Time].[Дата].[Quarter].&[.......] : NULL, [PriceLCh]) = NULL; ([Time].[Дата].[Year].&[.......] : NULL, [PriceLCh]) = NULL; Опять же не могу определиться с датами... Жалуется на невозможность преобразовать строку "20020101" в тип date. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 12.05.2009, 15:19 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Натолкните на мысль, пожалуйста. Что-то я абсолютно расстраиваюсь с SSAS2005 Standart Edition. Проштудировала топики, все, что нашла по поиску в форуме, вариаций делала массу - но результат нулевой. Есть мера Price с разреженными данными с 01.01.2002 года. В свойствах она LastChild. Далее в ScriptView: ([Time].[Id].&[2009-05-14T00:00:00] : NULL, [Price]) = [Time].[Id].&[2009-05-13T00:00:00]; CREATE [PriceLCh] = [Price]; ну - пока без Володиных оптимизаций. И в итоге - пустота. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 09:35 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
nextTyro, LastChild агрегирует невдумчиво. Если в фактах для каких-то дней есть дырки, они будут заброшены наверх. Вы готовы каждый день менять дату [Time].[Id].&[2009-05-14T00:00:00]? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 10:43 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
А выход? Может как-то убирать пустышки? И есть ли вообще такая возможность? Владимир Штепа как-то вышел из ситуации не менять даты каждый день. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 11:07 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Пустышки ведь можно убирать прямо в фактах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 11:34 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Вы хотите сказать, что в фактах надо вплоть до очередного изменения цены тупо проставлять предыдущую цену? Так я именно этого и пытаюсь избежать. Я только одного не могу понять. Откуда появляются в LastChild пустышки, если он должен тянуть последнюю цену в прайсе, например, выставленную 28 апреля 2003 года до сего дня, если не было изменений? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 12:32 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
LastChild ничего тянуть не должен. Вы избегаете ежедневных snapshot'ов цен? А что здесь такого? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 12:51 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Порядка 20 тыс. номенклатуры в приблизительно 60 филиалах ну и в разрезе дней нескольких лет. Там уже миллиардами пахнет. А разве я неправильно пытаюсь применить к своему случаю LastChild? (См. Алексей Кудинов, Владимир Штепа) Алексей КудиновnextTyro, Если над ценами не нужно вычислять какие-либо агрегированные показатели (средняя цена по направлению и т.д.), то в SSAS 2005 для обычных мер есть AggregationFunction = LastNonEmpty, при ее использовании по каждому товару как раз будет показываться последняя выставленная по нему цена. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 13:07 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Вы бы правильно применяли к своему случаю LastChild, если бы в фактах был ежедневный shapshot. Но теперь понятно, что это слишком накладно. Можно было бы попробовать избавиться от пустышек так: Код: plaintext но вряд ли это будет работать быстро. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 13:59 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Спасибо большое - сейчас попробую адаптировать к своему случаю, посмотреть скорость работы. А насчет ежедневных snapshots - я как раз с этого и начинала: nextTyro Вопрос: есть ли возможность отразить в CM (Analysis2000) на каждый день последнюю цену до следующего изменения? Соответственно, как только состоялось новое изменение, отражается именно оно до следующего и т.д.? Или выход только в заполнении SQL-таблицы ценами на каждый день, у которых дата равна или более даты изменения цены и менее, чем дата следующего изменения этой цены? Мне интересно решение этого вопроса, так же, и в AS2005, так как эта система у меня тоже работает и нравится все больше и больше. Но .... досадный Standart Edition. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.05.2009, 14:24 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
А еще факты можно заполнять изменениями цен. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2009, 06:58 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Да, я так и сделала вчера в конце концов. И все-таки интерес к LastChild остался. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2009, 09:51 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
То есть Вы от LastChild отказались? Каким образом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2009, 10:02 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Я пока сделала это в AS2000. Пришлось прибегнуть к CM, тупо вычислять разницу в новом прайсе по отношению к старому, ну а потом собирать, как остатки по известной формуле: sum(Ascendants([Дата].CurrentMember),(sum([Дата].FirstSibling :[Дата].CurrentMember ,[Measures].[Прайсы]))-[Measures].[Прайсы])+[Measures].[Прайсы] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2009, 13:18 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Кажется я придумал, как можно относительно быстро дотягивать последние непустые значения в SSAS 2005. Изложение идеи на Adventure Works: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.05.2009, 18:27 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Fec un TuesКажется я придумал, как можно относительно быстро дотягивать последние непустые значения в SSAS 2005. Изложение идеи на Adventure Works Это очень рискованное решение, оно опирается на то что DataID используется как индех уровня attribute hierarchy. А это совсем никак не гарантировано, и любая операция processing может это нарушить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2009, 19:20 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Моша, спасибо за замечание. Так должно быть безопаснее: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2009, 21:03 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Да, так безопаснее, но к сожалению медленнее. StrToMember и динамическое построение строки к сожалению всё будут сильно тормозить. Моша ---------------------------------------------------- This posting is provided "AS IS" with no warranties, and confers no rights ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2009, 21:08 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Может быть для 2008 это и так, но в 2005 SP2 второй запрос отработал быстрее. Кстати, именно страх StrToMember завел меня на зыбкую тропку DataID. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.07.2009, 21:30 |
|
||
|
Прайсы. Заполнение значениями до следующего изменения.
|
|||
|---|---|---|---|
|
#18+
Если кому интересно, на днях Крис Веб предложил, на мой взгляд, более корректный вариант: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. См. http://cwebbbi.wordpress.com/2011/03/24/last-ever-non-empty-a-new-fast-mdx-approach/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 01.04.2011, 13:39 |
|
||
|
|

start [/forum/topic.php?fid=49&fpage=26&tid=1858053]: |
0ms |
get settings: |
9ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 10ms |
| total: | 136ms |

| 0 / 0 |

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