powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Прайсы. Заполнение значениями до следующего изменения.
25 сообщений из 26, страница 1 из 2
Прайсы. Заполнение значениями до следующего изменения.
    #35948692
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток!
Есть SQL-таблица прайсов, в которой цены устанавливаются на определенный товар в какой-то день. И эти цены действуют до очередного изменения, которое может произойти в любой день. Соответственно, в этой таблице накапливаются только даты установки прайсов.

Вопрос: есть ли возможность отразить в CM (Analysis2000) на каждый день последнюю цену до следующего изменения? Соответственно, как только состоялось новое изменение, отражается именно оно до следующего и т.д.?
Или выход только в заполнении SQL-таблицы ценами на каждый день, у которых дата равна или более даты изменения цены и менее, чем дата следующего изменения этой цены?

В кубе измерение времени "Дата" имеет иерархию: Год - Месяц - Декада - День.
Большое спасибо заранее!
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35948957
nextTyro,
Если над ценами не нужно вычислять какие-либо агрегированные показатели (средняя цена по направлению и т.д.), то в SSAS 2005 для обычных мер есть AggregationFunction = LastNonEmpty, при ее использовании по каждому товару как раз будет показываться последняя выставленная по нему цена.

К сожалению, при снятии цены по группе товаров AS не будет вычислять последнюю цену по каждому товару, он возьмет только цены за последнюю дату изменения цен в этой группе.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35971717
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня в параллели работает и SSAS2005, нo Standart Edition. И из семиаддитивных функций доступна только LastChild. На форуме прочла, что достаточно присвоить мере "Price" в ее свойствах AggregateFunction - LastChild. И где-то в фактах указать значение - "показывать последний день". Где - не могу найти. А сейчас все сворачивается на начальную дату измерения "Time". Не подскажете? Или где прочитать про варианты установок ...
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35973362
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Или это как-то решается через СМ?
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35974582
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так как у вас нет в распоряжении функции LastNonEmpty
то придется писать руками MDX для CM

Благо на форуме примеров не мало. Если возникнут трудности в инерпретации, дайте знать, поможем.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35980772
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Измерение 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.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35984696
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Натолкните на мысль, пожалуйста. Что-то я абсолютно расстраиваюсь с 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];

ну - пока без Володиных оптимизаций. И в итоге - пустота.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35984881
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
nextTyro,

LastChild агрегирует невдумчиво. Если в фактах для каких-то дней есть дырки, они будут заброшены наверх.

Вы готовы каждый день менять дату [Time].[Id].&[2009-05-14T00:00:00]?
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35984969
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А выход? Может как-то убирать пустышки? И есть ли вообще такая возможность?
Владимир Штепа как-то вышел из ситуации не менять даты каждый день.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35985063
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пустышки ведь можно убирать прямо в фактах.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35985226
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вы хотите сказать, что в фактах надо вплоть до очередного изменения цены тупо проставлять предыдущую цену? Так я именно этого и пытаюсь избежать.
Я только одного не могу понять. Откуда появляются в LastChild пустышки, если он должен тянуть последнюю цену в прайсе, например, выставленную 28 апреля 2003 года до сего дня, если не было изменений?
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35985276
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
LastChild ничего тянуть не должен.

Вы избегаете ежедневных snapshot'ов цен? А что здесь такого?
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35985331
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Порядка 20 тыс. номенклатуры в приблизительно 60 филиалах ну и в разрезе дней нескольких лет. Там уже миллиардами пахнет. А разве я неправильно пытаюсь применить к своему случаю LastChild? (См. Алексей Кудинов, Владимир Штепа)

Алексей КудиновnextTyro,
Если над ценами не нужно вычислять какие-либо агрегированные показатели (средняя цена по направлению и т.д.), то в SSAS 2005 для обычных мер есть AggregationFunction = LastNonEmpty, при ее использовании по каждому товару как раз будет показываться последняя выставленная по нему цена.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35985499
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вы бы правильно применяли к своему случаю LastChild, если бы в фактах был ежедневный shapshot. Но теперь понятно, что это слишком накладно.

Можно было бы попробовать избавиться от пустышек так:

Код: plaintext
( [Date].[Date].[Date], [Price] ) = Iif( IsEmpty( [Price] ), [Date].[Date].PrevMember, [Price] );

но вряд ли это будет работать быстро.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35985569
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо большое - сейчас попробую адаптировать к своему случаю, посмотреть скорость работы. А насчет ежедневных snapshots - я как раз с этого и начинала:
nextTyro
Вопрос: есть ли возможность отразить в CM (Analysis2000) на каждый день последнюю цену до следующего изменения? Соответственно, как только состоялось новое изменение, отражается именно оно до следующего и т.д.?
Или выход только в заполнении SQL-таблицы ценами на каждый день, у которых дата равна или более даты изменения цены и менее, чем дата следующего изменения этой цены?

Мне интересно решение этого вопроса, так же, и в AS2005, так как эта система у меня тоже работает и нравится все больше и больше. Но .... досадный Standart Edition.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35987080
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А еще факты можно заполнять изменениями цен.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35987264
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, я так и сделала вчера в конце концов. И все-таки интерес к LastChild остался.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35987292
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
То есть Вы от LastChild отказались? Каким образом?
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35988012
nextTyro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока сделала это в AS2000. Пришлось прибегнуть к CM, тупо вычислять разницу в новом прайсе по отношению к старому, ну а потом собирать, как остатки по известной формуле:

sum(Ascendants([Дата].CurrentMember),(sum([Дата].FirstSibling :[Дата].CurrentMember ,[Measures].[Прайсы]))-[Measures].[Прайсы])+[Measures].[Прайсы]
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #35988938
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кажется я придумал, как можно относительно быстро дотягивать последние непустые значения в 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.
with
	member FirstID as DataID( [Date].[Date].[Date].Item(  0  ) )
	
	member CurrentID as
		 Iif( IsEmpty( [Internet Sales Amount] ), null, DataID( [Date].[Date] ) )
		,Non_Empty_Behavior = [Internet Sales Amount]
		
	member LastID as Max( null : [Date].[Date], CurrentID )
	
	member LastNonEmpty as
		Iif(
			 LastID < FirstID
			,null
			,(
				 [Date].[Date].[Date].Item( LastID - FirstID )
				,[Internet Sales Amount]
			)
		)
		
select 
	 Head( [Date].[Date].[Date],  50  ) on  0 
	,non empty [Product].[Product].[Product] on  1 
from [Adventure Works]
where LastNonEmpty
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #36092050
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fec un TuesКажется я придумал, как можно относительно быстро дотягивать последние непустые значения в SSAS 2005. Изложение идеи на Adventure Works
Это очень рискованное решение, оно опирается на то что DataID используется как индех уровня attribute hierarchy. А это совсем никак не гарантировано, и любая операция processing может это нарушить.
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #36092164
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Моша, спасибо за замечание. Так должно быть безопаснее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
with
	member CurrentKey as
		 Iif( IsEmpty( [Internet Sales Amount] ), null, [Date].[Date].Member_Key )
		,Non_Empty_Behavior = [Internet Sales Amount]
		
	member LastKey as Max( null : [Date].[Date], CurrentKey )
	
	member LastNonEmpty as
		Iif(
			 IsEmpty( LastKey )
			,null
			,(
				 StrToMember( "[Date].[Date].&[" + LastKey + "]", Constrained )
				,[Internet Sales Amount]
			)
		)
		
select 
	 Head( [Date].[Date].[Date],  50  ) on  0 
	,non empty [Product].[Product].[Product] on  1 
from [Adventure Works]
where LastNonEmpty
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #36092168
Mosha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, так безопаснее, но к сожалению медленнее. StrToMember и динамическое построение строки к сожалению всё будут сильно тормозить.

Моша
----------------------------------------------------
This posting is provided "AS IS" with no warranties, and confers no rights
...
Рейтинг: 0 / 0
Прайсы. Заполнение значениями до следующего изменения.
    #36092185
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Может быть для 2008 это и так, но в 2005 SP2 второй запрос отработал быстрее. Кстати, именно страх StrToMember завел меня на зыбкую тропку DataID.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Прайсы. Заполнение значениями до следующего изменения.
    #37194241
Fec un Tues
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если кому интересно, на днях Крис Веб предложил, на мой взгляд, более корректный вариант:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
WITH
	MEMBER MEASURES.DAYSTODATE AS
		COUNT(NULL:[Date].[Date].CURRENTMEMBER)- 1 
	
	MEMBER MEASURES.HADSALE AS
		IIF([Measures].[Internet Sales Amount]= 0 , NULL, MEASURES.DAYSTODATE)
		
	MEMBER MEASURES.MAXDATE AS
		MAX(NULL:[Date].[Date].CURRENTMEMBER, MEASURES.HADSALE)
		
	MEMBER MEASURES.LASTSALE AS
		IIF(ISEMPTY(MEASURES.MAXDATE), NULL,
			([Measures].[Internet Sales Amount],
			[Date].[Date].[Date].MEMBERS.ITEM(MEASURES.MAXDATE)))

См. http://cwebbbi.wordpress.com/2011/03/24/last-ever-non-empty-a-new-fast-mdx-approach/
...
Рейтинг: 0 / 0
25 сообщений из 26, страница 1 из 2
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / Прайсы. Заполнение значениями до следующего изменения.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]