Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX. Странное поведение CM. / 25 сообщений из 39, страница 1 из 2
18.12.2008, 11:01:27
    #35721734
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Доброго времени суток.

Есть корректно работающий MDX.

Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
with 

set ppA as toppercent(nonempty([Goods].[Goods].members) - [Goods].[Goods].[All],  80 ,[Measures].[Quantity])
set ppB as toppercent(nonempty([Goods].[Goods].members) - [Goods].[Goods].[All],  90 ,[Measures].[Quantity])-ppA

member [Measures].ABC as
'iif([Measures].[Quantity]>=min(ppA,[Measures].[Quantity]),"A",
iif([Measures].[Quantity]>=min(ppB,[Measures].[Quantity]),"B",
iif(IsEmpty([Measures].[Quantity]),"o","C")
))'


SELECT 

{[Measures].[Quantity],[Measures].[ABC]} DIMENSION PROPERTIES PARENT_UNIQUE_NAME ON COLUMNS , 

NON EMPTY Hierarchize({DrilldownLevel({[Goods].[Goods].[All]})}) DIMENSION PROPERTIES PARENT_UNIQUE_NAME,

[Goods].[Goods].[Goods].[Cod Firm],
[Goods].[Goods].[Goods].[Departs],
[Goods].[Goods].[Goods].[Departs - Name],
[Goods].[Goods].[Goods].[G Groups],
[Goods].[Goods].[Goods].[G Groups - Name],
[Goods].[Goods].[Goods].[Name Firm],
[Goods].[Goods].[Goods].[Name_],
[Goods].[Goods].[Goods].[S Groups],
[Goods].[Goods].[Goods].[S Groups - Name],
[Goods].[Goods].[Goods].[Size] ON ROWS  
FROM [SalesDynamic] 

WHERE (
	[Time Day].[Hierarchy].[Year].&[ 2008 ].&[Квартал  4 ].&[ 11 ],
	[Goods].[S Groups - Name].&[Пиво в ПЭТ],
	[Shops].[Shops].&[ 101 ]) CELL PROPERTIES VALUE, FORMAT_STRING, LANGUAGE, BACK_COLOR, FORE_COLOR, FONT_FLAGS


Селект вырван профайлером из excel 2007.

Я создаю следующие CM:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
CREATE SET CURRENTCUBE.[ppA]
 AS toppercent(nonempty([Goods].[Goods].members),  80 ,[Measures].[Quantity]) ;   
CREATE SET CURRENTCUBE.[ppB]
 AS toppercent(nonempty([Goods].[Goods].members),  90 ,[Measures].[Quantity])-ppA ;   
CREATE MEMBER CURRENTCUBE.[MEASURES].ABC
 AS iif([Measures].[Quantity]>=min(ppA,[Measures].[Quantity]),"A",iif([Measures].[Quantity]>=min(ppB,[Measures].[Quantity]),"B",iif(IsEmpty([Measures].[Quantity]),"o","C"))), 
VISIBLE =  1   ; 

Беру тот же самый запрос а получаю чушь! Везде стоит значение "А" кроме empty элементов(там стоит "о" как и должно быть).

Пожалуйста, подскажите в чем проблема.
...
Рейтинг: 0 / 0
18.12.2008, 11:12:48
    #35721768
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Причем сами set'ы неправильные(хотя и при не правильных должны были быть все группы: и "А" и "Б" и "С" и "o")
Ниже set'ы ppA и ppB:
...
Рейтинг: 0 / 0
18.12.2008, 11:17:41
    #35721783
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
...
Рейтинг: 0 / 0
18.12.2008, 12:15:43
    #35721963
Fec un Tues
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
SerLightБеру тот же самый запрос а получаю чушь!
Не вникая в детали предположу, что результат расходится с Вашим ожиданием по той причине, что множества вычисляются в разных контекстах: соответственно с where и без where.
...
Рейтинг: 0 / 0
18.12.2008, 14:01:16
    #35722323
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Fec un Tues, может быть я неправильно понял о каком "where" вы говорите, но если о том, что стоит в select'е , то и в MDX скрипте и в запросе посылаемом excel'ем он один и тот же. Собственно я из экселя запрос и вытянул.

Кстати, пробовал в mdx и с подзапросами - работает.
...
Рейтинг: 0 / 0
18.12.2008, 14:04:00
    #35722333
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Блин. Понял о чем Вы!
...
Рейтинг: 0 / 0
24.12.2008, 15:44:33
    #35732707
Evgenych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Создаю в Visual Studio два именованных множества
[ABC Валовая прибыль A]
Код: plaintext
1.
2.
3.
4.
5.
{TopPercent(
		[Товар].[Наименование].[Наименование].members
		, 75 
		,[Measures].[Валовая прибыль]
	)}
[ABC Валовая прибыль B]
Код: plaintext
1.
2.
3.
4.
5.
{TopPercent(
		[Товар].[Наименование].[Наименование].members
		, 95 
		,[Measures].[Валовая прибыль]
	)}
И вычисляемый член
[ABC Валовая прибыль]
Код: plaintext
1.
2.
3.
4.
5.
case
	when rank([Товар].[Наименование].currentmember, [ABC Валовая прибыль A]) >  0  then  0 
	when rank([Товар].[Наименование].currentmember, [ABC Валовая прибыль B]) >  0  then  1 
        else  2 
	end
Как сделать чтобы сводная таблица excel вычисляла эти множества в контексте своих фильтров, а не по всем товарам (например, пользователь выбрал в фильтре конкретного производителя)?
...
Рейтинг: 0 / 0
24.12.2008, 17:45:57
    #35733212
Evgenych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
(В дополнение к предыдущему посту)
Такой запрос очень сильно тормозит - 6 минут
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
with
member [ABC Валовая прибыль] as
	case
		when
			rank(
				[Товар].[Наименование].currentmember
				,TopPercent(
					[Товар].[Наименование].[Наименование].members
					, 75 
					,[Measures].[Валовая прибыль]
				)
			) >  0  then  0 
		when
			rank(
				[Товар].[Наименование].currentmember
				,TopPercent(
					[Товар].[Наименование].[Наименование].members
					, 95 
					,[Measures].[Валовая прибыль]
				)
			) >  0  then  1 
		else  2 
	end
select
	{
		[Валовая прибыль]
		,[ABC Валовая прибыль]
	} on  0 
	,order(nonEmpty([Товар].[Наименование].[Наименование].members, [Валовая прибыль])
		,[Валовая прибыль], desc) on  1 
from [БизнессПро]
where (
	[Текущая дата].item( 0 ).parent.lag( 2 ):[Текущая дата].item( 0 ).parent.lag( 1 )
	,[Товар].[Производитель - Товар].[atmel]
);

против 2-х секунд с именованными наборами (SSMS)
Код: 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.
25.
26.
27.
28.
29.
30.
31.
32.
with 
	set [ABC Валовая прибыль A] as
		{TopPercent(
			[Товар].[Наименование].[Наименование].members
			, 75 
			,[Measures].[Валовая прибыль]
		)}
	set [ABC Валовая прибыль B] as 	
		{TopPercent(
			[Товар].[Наименование].[Наименование].members
			, 95 
			,[Measures].[Валовая прибыль]
		)}
	member [ABC Валовая прибыль] as	
		case
			when rank([Товар].[Наименование].currentmember, [ABC Валовая прибыль A]) >  0  then  0 
			when rank([Товар].[Наименование].currentmember, [ABC Валовая прибыль A]) >  1  then  1 
			else  2 
		end
select
	{
		[Валовая прибыль]
		,[ABC Валовая прибыль]
	} on  0 
	,order(nonEmpty([Товар].[Наименование].[Наименование].members, [Валовая прибыль])
		,[Валовая прибыль], desc) on  1 
from [БизнессПро]
where (
	[Текущая дата].item( 0 ).parent.lag( 2 ):[Текущая дата].item( 0 ).parent.lag( 1 )
	,[Товар].[Производитель - Товар].[atmel]
);

Т.е. такой вычисляемый член для использования в excel не подойдет.
...
Рейтинг: 0 / 0
26.12.2008, 14:14:37
    #35737139
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Поднимаю тему. Несмотря на то что причина неработоспособности моих CM понятна, проблему так и не удалось обуздать. А так как у Evgenych такая же проблема, то все таки прошу помощи уже Нам)
...
Рейтинг: 0 / 0
26.12.2008, 16:28:56
    #35737515
Fec un Tues
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Код: 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.
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.
with
	member [_minA] as
		(
			Tail(
				TopPercent(
					[Товар].[Наименование].Children
					, 75 
					,[Measures].[Валовая прибыль]
				)
			)(  0  )
			,[Measures].[Валовая прибыль]
		)
		
	member [_minB] as
		(
			Tail(
				TopPercent(
					[Товар].[Наименование].Children
					, 95 
					,[Measures].[Валовая прибыль]
				)
			)(  0  )
			,[Measures].[Валовая прибыль]
		)
		
	member [minA] as ( [Товар].[Наименование].Parent, [_minA] )
	
	member [minB] as ( [Товар].[Наименование].Parent, [_minB] )
	
	member [ABC Валовая прибыль] as
		Iif(
			[Measures].[Валовая прибыль] >= [minA]
			,"A"
			,Iif(
				 [Measures].[Валовая прибыль] >= [minB]
				,"B"
				,"C"
			)
		)
		
select
	{
		[Валовая прибыль]
		,[ABC Валовая прибыль]
	} on  0 
	,order(nonEmpty([Товар].[Наименование].[Наименование].members, [Валовая прибыль])
		,[Валовая прибыль], desc) on  1 
from [БизнессПро]
where (
	[Текущая дата].item( 0 ).parent.lag( 2 ):[Текущая дата].item( 0 ).parent.lag( 1 )
	,[Товар].[Производитель - Товар].[atmel]
)

Попробуйте так. Только это будет ABC относительно всех товаров, без учета тех атрибутов товара, которые выставлены в where. Впрочем, в эталонных запросах с set то же самое, потому что не используется Existing.
...
Рейтинг: 0 / 0
29.12.2008, 12:59:08
    #35739585
Evgenych
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Fec un Tues, попробовал использовать функцию existing.
Код: 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.
25.
26.
27.
28.
29.
30.
CREATE SET [БизнессПро].[ABC Валовая прибыль A]
 AS {TopPercent(
		existing([Товар].[Наименование].[Наименование].members)
		, 75 
		,[Measures].[Валовая прибыль]
	)};                
CREATE SET [БизнессПро].[ABC Валовая прибыль B]
 AS {TopPercent(
		existing([Товар].[Наименование].[Наименование].members)
		, 95 
		,[Measures].[Валовая прибыль]
	)};                
CREATE MEMBER [БизнессПро].[MEASURES].[ABC Валовая прибыль]
 AS
case
		when rank([Товар].[Наименование].currentmember, [ABC Валовая прибыль A]) >  0  then  0 
		when rank([Товар].[Наименование].currentmember, [ABC Валовая прибыль B]) >  0  then  1 
        else  2 
	end
go
select
	{
		[Measures].[Валовая прибыль]
		,[MEASURES].[ABC Вал]
	}
	on  0 
	,Order([Товар].[Наименование].[Наименование].Members, [Measures].[Валовая прибыль], desc) on  1 
from [БизнессПро]
where {[Товар].[Вид товара].&[00001w000D]}

Та же проблема.
Как заставить функцию TopPercent "заглянуть" в Where? (когда она используется в контексте сессии, а не запроса)
...
Рейтинг: 0 / 0
29.12.2008, 14:38:13
    #35739876
Fec un Tues
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Я с Existing ошибся, TopPercent и так вычисляет с учетом where (когда в контесте запроса).
...
Рейтинг: 0 / 0
27.01.2009, 11:44:55
    #35779489
SerLight
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Есть!!! Задача решена!))

Решена на SSAS 2008.
В 2005ом можно было использовать только статические сеты которые считаются 1 раз на всю сессию!
Теперь же в 2008ом есть возможность создавать динамические сеты, которые определяются для каждого запроса заново.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE dynamic SET CURRENTCUBE.[ppA]
 AS toppercent(nonempty([goods].[goods].members) - [goods].[goods].[All], 80 ,[Measures].[Quantity]) ;

CREATE dynamic SET CURRENTCUBE.[ppB]
 AS toppercent(nonempty([goods].[goods].members) - [goods].[goods].[All], 90 ,[Measures].[Quantity])-ppA;

CREATE MEMBER CURRENTCUBE.[Measures].ABC
 
AS iif(IsEmpty([Measures].[Quantity]),"o", 

iif([Measures].[Quantity]>=min(ppA,[Measures].[Quantity]),"A",

iif([Measures].[Quantity]>=min(ppB,[Measures].[Quantity]),"B","C"))), 

VISIBLE =  1 ; 
Работает шустро и правильно)
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
09.02.2011, 13:42:59
    #37106636
Voyager_lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
SerLight,
SSAS 2008 R2.
Столкнулся с "зависанием" ВСЕГО куба: проблема в использовании в кубе динамических сетов на предложенном решении, при том, что их можно и не использовать (строю отчет без них). Выборка любого элемента измерения в фильтре Excel может занять 5-10 сек.
Без динамических сетов все работает шустро (как должно, собственно). В дин. сете используется атрибут на ~60 тыс.элементов для ABC. Теперь проблема с тем, как решить эту задачку. CU не спасли пока.
...
Рейтинг: 0 / 0
23.03.2011, 13:18:10
    #37179042
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
SerLightЕсть!!! Задача решена!))

Решена на SSAS 2008.
В 2005ом можно было использовать только статические сеты которые считаются 1 раз на всю сессию!
Теперь же в 2008ом есть возможность создавать динамические сеты, которые определяются для каждого запроса заново.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE dynamic SET CURRENTCUBE.[ppA]
 AS toppercent(nonempty([goods].[goods].members) - [goods].[goods].[All], 80 ,[Measures].[Quantity]) ;

CREATE dynamic SET CURRENTCUBE.[ppB]
 AS toppercent(nonempty([goods].[goods].members) - [goods].[goods].[All], 90 ,[Measures].[Quantity])-ppA;

CREATE MEMBER CURRENTCUBE.[Measures].ABC
 
AS iif(IsEmpty([Measures].[Quantity]),"o", 

iif([Measures].[Quantity]>=min(ppA,[Measures].[Quantity]),"A",

iif([Measures].[Quantity]>=min(ppB,[Measures].[Quantity]),"B","C"))), 

VISIBLE =  1 ; 
Работает шустро и правильно)
Попробовал Ваш метод - действительно он не привязан к фильтрам и почти правильно формирует эти списки (в ppA входит 80% и 80,01% почемуто но уже не так важно), но есть одна проблема - когда я выполняю его на 300 записях то работает нормально, но когда стал пробовать на 65Гб хранилище то ждал 10 минут и отменил.

Пробовал добавить еще 2 динамических набора вида
Код: plaintext
1.
2.
[src]CREATE dynamic SET CURRENTCUBE.[minA]
min(ppA,[Measures].[Quantity])
чтобы не пересчитывались для каждого мембера минимальное значение ррА, но такой подход не работает. В самом Excel уже пишет "Функция ожидает для аргумента выражение набора кортежей. Было использовано строчное или числовое выражение".

Я практически не знаю MDX, и может этот сет можно доделать както.
Господа прошу вашей помощи.
...
Рейтинг: 0 / 0
23.03.2011, 14:19:44
    #37179190
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Заменил

Код: plaintext
1.
CREATE dynamic SET CURRENTCUBE.[minA]
min(ppA,[Measures].[Quantity])
на
Код: plaintext
1.
CREATE dynamic SET CURRENTCUBE.[minA]
tail(ppA)
т.к после TOPPERCENT сет уже упорядочен

но когда я пишу

Код: plaintext
iif([Measures].[Quantity]>=minA,"A",

то Excel ругается.
Как сделать ссылку в minA на его же поле [Measures].[Quantity] ?
...
Рейтинг: 0 / 0
23.03.2011, 17:54:29
    #37179755
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Вобщем мое решение для БОООЛЬШИХ кубов:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
CREATE hidden DYNAMIC SET CURRENTCUBE.[ppA] AS
TOPPERCENT(NONEMPTY([Item].[Item Name].MEMBERS-[Item].[Item Name].[Все]), 80 ,[Measures].[Amount]);   

CREATE hidden DYNAMIC SET CURRENTCUBE.[ppB] AS
TOPPERCENT(NONEMPTY([Item].[Item Name].MEMBERS-[Item].[Item Name].[Все]), 90 ,[Measures].[Amount])-ppA;

CREATE hidden DYNAMIC SET CURRENTCUBE.[mA]
 AS  tail(ppA);  
 
CREATE hidden DYNAMIC SET CURRENTCUBE.[mB]
 AS  tail(ppB); 

CREATE MEMBER CURRENTCUBE.[Measures].[ABC реализация] AS 
iif(ISEMPTY([Measures].[Amount]),null,
   iif([Measures].[Amount]>sum(mA,[Measures].[Amount]),"A",
      iif([Measures].[Amount]>sum(mB,[Measures].[Amount]),"B","C"))), 
VISIBLE =  1 ;

Причем если сеты сравнивать через MIN
Код: plaintext
1.
iif([Measures].[Quantity]>=min(ppA,[Measures].[Quantity]),"A",
то время обработки вырастает с 1.9 сек до 2.1 сек по сравнению с SUM (тестил на ХД 160 Мб)

Владимир Штепа предлагал использовать через RANK без динамических сетов
Код: plaintext
1.
iif(rank(Product.CurrentMember, toppercent([Product].[Brand Name].members,  80 ,([Store].[All Stores].[USA].[WA], [Measures].CurrentMember))) >  0 , "A", 
и должен с ним не согласится, т.к. время обработки выростает с 1.9 до 11.3 сек.

ИТОГО

когда я воодрузил решение на ХД 107 Гб то получил время обработки запроса 3.4 сек!!!!
Господа это очень хороший результат!!
...
Рейтинг: 0 / 0
24.03.2011, 14:39:36
    #37181064
Fec un Tues
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
mihamiВладимир Штепа предлагал использовать через RANK без динамических сетов
Ну, скажем, когда он это предлагал, еще и динамических сетов не было...

mihamiкогда я воодрузил решение на ХД 107 Гб то получил время обработки запроса 3.4 сек!!!!
То, что ХД 107 Гб - это мало о чем говорит. Важен размер иерархии в элементах. На измерении Customer из Adventure Works Ваш вариант действительно гораздо быстрее (на моей древней около 15 секунд), чем тот, на котором остановился SerLight, и, тем не менее, думаю, можно сделать еще быстрее, если немного переписать решение, которое я приводил выше ( 6626346 ).
...
Рейтинг: 0 / 0
24.03.2011, 14:45:19
    #37181078
Voyager_lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
mihamiВобщем мое решение для БОООЛЬШИХ кубов:

Нужно не для для больших кубов, а для больших измерений. Попробуйте свой пример на 100 - 150 тыс. элементах...
...
Рейтинг: 0 / 0
24.03.2011, 15:25:10
    #37181155
Fec un Tues
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Fec un Tuesдумаю, можно сделать еще быстрее, если немного переписать решение, которое я приводил выше ( 6626346 ).
Вот так:
Код: 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.
Create hidden dynamic set [setA] as TopPercent(
	 [Customer].[Customer].[Customer]
	, 80 
	,[Internet Sales Amount]
);

Create hidden dynamic set [setB] as TopPercent(
	 [Customer].[Customer].[Customer]
	, 90 
	,[Internet Sales Amount]
);

Create hidden [_minA] = ( Tail( [setA] )(  0  ), [Internet Sales Amount] );
Create hidden [_minB] = ( Tail( [setB] )(  0  ), [Internet Sales Amount] );
Create hidden [minA] = ( [Customer].[Customer].Parent, [_minA] );
Create hidden [minB] = ( [Customer].[Customer].Parent, [_minB] );

Create [Customer Sales ABC];

( [Customer].[Customer].[Customer], [Customer Sales ABC] ) = Case
	when IsEmpty( [Internet Sales Amount] ) then null
	when [Internet Sales Amount] >= [minA] then "A"
	when [Internet Sales Amount] >= [minB] then "B"
	else "C"
end;

Динамические сеты здесь нужны для того, чтобы реагировать на фильтр (в where или subselect), в котором может оказаться какая-нибудь иерархия из Customer.

Но есть проблема, о которой раньше говорил Voyager_lan. Эти динамические сеты замедляют работу Excel. Например, при определении фильтров.
...
Рейтинг: 0 / 0
25.03.2011, 15:13:50
    #37182712
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Voyager_lanmihamiВобщем мое решение для БОООЛЬШИХ кубов:

Нужно не для для больших кубов, а для больших измерений. Попробуйте свой пример на 100 - 150 тыс. элементах...
В том разрезе товаров что я делал чуть больше 80 тыс. наименований
...
Рейтинг: 0 / 0
25.03.2011, 15:30:30
    #37182757
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Fec un TuesFec un Tuesдумаю, можно сделать еще быстрее, если немного переписать решение, которое я приводил выше ( 6626346 ).
Код: plaintext
1.
2.
3.
4.
Create hidden [_minA] = ( Tail( [setA] )(  0  ), [Internet Sales Amount] );
Create hidden [_minB] = ( Tail( [setB] )(  0  ), [Internet Sales Amount] );
Create hidden [minA] = ( [Customer].[Customer].Parent, [_minA] );
Create hidden [minB] = ( [Customer].[Customer].Parent, [_minB] );

Динамические сеты здесь нужны для того, чтобы реагировать на фильтр (в where или subselect), в котором может оказаться какая-нибудь иерархия из Customer.

Но есть проблема, о которой раньше говорил Voyager_lan. Эти динамические сеты замедляют работу Excel. Например, при определении фильтров.
Разница между моим и Вашим кодом в использовании ( [Customer].[Customer].Parent, [_minA] ) вместо sum на наборе из 1го элемента. Так работает быстрее? (по идее должно быть так) Я просто пока начинающий в этом деле ))

Вопрос с задержкой при выборе фильтров присутствует, но не в таких временных диапазонах как говорил Voyager_lan. Но заметил интересную особенность: эти задержки в 2010 Excel больше чем в 2007 (как это ни странно!) и в 2007 они есть только при первом обращении к фильтру, а при последующих их нет вообще.
...
Рейтинг: 0 / 0
25.03.2011, 15:46:30
    #37182789
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Господа.

Подкажите идею решения задачи: приведенная выше задача АВС анализа должна иметь продолжение только не по фильтрам которые выбирает пользователь, а выполнить АВС анализ для каждого элемента в списке (производитель напр.) и после некоторых манипуляций с данными залить их в таблицу на сервер.

Строить прямые MDX запросы для куба я толком не понял как, да и не могу выбрать все поля что мне надо.
Пробовал через SSIS используя ADO.NET подлючение к Analysis Services как источник с запросом:

Код: plaintext
1.
2.
3.
select [Measures].[ABC реализация] on columns,
[Item].[Item Name].MEMBERS on rows
from [SalesCube]
where ([Date Key].[Year Mounth].&[Г2011 Январь],[Apteki].[Apteka Name].&[Ахматової (Київ)])
но я не могу понять как можно пройтись списком по [Apteka Name] и + к этому изменить запрос в источнике вроде нельзя.

Пока остановился на таком решении:
в Excel написал макрос (VBA) который меняет фильтры в таблице и записывает данные на другой лист. Потом подлючаюсь через SSIS
к книге Excel и работаю с ней. Время выполнения задачи в Excel'ле 34-35 сек, но не устраивает то, что всеравно необходима ручная работа (открыть книгу, запустить макрос, сохранить книгу, запустить SSIS пакет).

Господа, есть ли идеи?
...
Рейтинг: 0 / 0
25.03.2011, 15:58:22
    #37182813
Fec un Tues
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
Это уже даже не off-topic, а off-off-topic.
...
Рейтинг: 0 / 0
18.05.2011, 13:12:47
    #37267023
mihami
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
MDX. Странное поведение CM.
SerLightЕсть!!! Задача решена!))

Решена на SSAS 2008.
В 2005ом можно было использовать только статические сеты которые считаются 1 раз на всю сессию!
Теперь же в 2008ом есть возможность создавать динамические сеты, которые определяются для каждого запроса заново.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE dynamic SET CURRENTCUBE.[ppA]
 AS toppercent(nonempty([goods].[goods].members) - [goods].[goods].[All], 80 ,[Measures].[Quantity]) ;

CREATE dynamic SET CURRENTCUBE.[ppB]
 AS toppercent(nonempty([goods].[goods].members) - [goods].[goods].[All], 90 ,[Measures].[Quantity])-ppA;

CREATE MEMBER CURRENTCUBE.[Measures].ABC
 
AS iif(IsEmpty([Measures].[Quantity]),"o", 

iif([Measures].[Quantity]>=min(ppA,[Measures].[Quantity]),"A",

iif([Measures].[Quantity]>=min(ppB,[Measures].[Quantity]),"B","C"))), 

VISIBLE =  1 ; 
Работает шустро и правильно)

Реализовал у себя подобный вариант (выше писал его особенности), все работает нормально. Кидаю в строки товары, после кидания в фильтр нар. "магазин" то перечень товаров уменьшается, что говорит о том что динамический сет пашет правильно. Добавляю в фильтр дату - все ОК.

Но, возникла необходимость добавить в фильтр например "группа товара" и начинаются траблы. Когда я выбираю группу товара в которой около 45 позиций - то сет уже не пересчитывается. Да и он вообще никак не реагирует на фильтр "группа товара". Пробовал также с нуля ставить сначало группу товара и потом все остальное - реакции никакой.

Честно говоря сижу в раздумии.... или надо дописать че в MDX или неправильно сделано измерение "группа товара", хотя продажи сожно смотреть нормально и как бы практика в этом есть.

Может есть у кого идеи или куда хоть смотреть?
...
Рейтинг: 0 / 0
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / MDX. Странное поведение CM. / 25 сообщений из 39, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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