Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / OLAP и DWH Новый топик    Ответить
 SSAS 2012 калк мембер  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 672
Wello World!

1 Есть измерение [Дата](Sale Date), которое строится по таблице view_Dim_Date. Гранулянтность - ДЕНЬ

2 По этой же таблице строится мера [Days Count], которая определяется агр. функ Count of rows.

3 А также калк мембер [Days Count 2]
CREATE MEMBER CURRENTCUBE.[Measures].[Days Count 2]
AS COUNT
(
INTERSECT
	(
		EXISTING([Sale Date].[Date].[Date].MEMBERS)
		,{NULL : StrToMember("[Sale Date].[Date].[Date].&[" + Format(Now(), "yyyyMMdd") + "]").LAG(1)} 
	)
)


При просмотре отчета не могу обосновать полученный результ.
На скрине видно, если установить фильтры на самом нижнем уровне(т.е. отобрать нескольно дней), то [Days Count 2] вообще не учитывает этот фильтр.

Подскажите, как это побороть?

К сообщению приложен файл. Размер - 130Kb
5 май 17, 14:38    [20460815]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 672
Провел небольшей экспиремент. Профайлером отловил скрипт формируемый excel-ем.

SELECT {[Measures].[Days Count],[Measures].[Days Count 2]} ON COLUMNS  
FROM 
    (SELECT ({[Sale Date].[Calendar].[Date].&[20160301],
	    [Sale Date].[Calendar].[Date].&[20160302],
	    [Sale Date].[Calendar].[Date].&[20160303],
	    [Sale Date].[Calendar].[Date].&[20160304],
	    [Sale Date].[Calendar].[Date].&[20160305],
	    [Sale Date].[Calendar].[Date].&[20160306],
	    [Sale Date].[Calendar].[Date].&[20160307]}
	    ) ON COLUMNS  
     FROM [Cube]) 
 WHERE ([Sale Date].[Year].[All],[Sale Date].[Month Year].[All],[Sale Date].[Month].[All])  


[Days Count][Days Count 2]
74273


Затем немного упростил
select 
	{[Measures].[Days Count],[Measures].[Days Count 2]} ON COLUMNS  
from	[cube]
where  {[Sale Date].[Calendar].[Date].&[20160301],
	[Sale Date].[Calendar].[Date].&[20160302],
	[Sale Date].[Calendar].[Date].&[20160303],
	[Sale Date].[Calendar].[Date].&[20160304],
	[Sale Date].[Calendar].[Date].&[20160305],
	[Sale Date].[Calendar].[Date].&[20160306],
	[Sale Date].[Calendar].[Date].&[20160307]} 


В итоге получил, то что надо.
[Days Count][Days Count 2]
77


Подскажите, почему в первом случаи получаются такие цифры?
5 май 17, 16:06    [20461342]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1955
Yagrus2,

потому что existing не знает что есть подселект. подселект невидим для CurrentMember и EXISTING.
решение - использовать для таких целей динамический именованный набор
(я не вник зачем Вам нужен intersect, поэтому пример попроще)

CREATE DYNAMIC SET [Selected Days] as ( 
    [Sale Date].[Calendar].[Date] 
) 
CREATE MEMBER CURRENTCUBE.[Measures].[Days Count 3] as ( 
    count([Selected Days]) 
)


обратите внимание, что existing в этом случае не требуется. при использовании подселекта на всех осях в запросе и всех именованные наборах (включая динамические) выполняется autoexist.
5 май 17, 22:25    [20461988]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 672
ShIgor
Yagrus2,

(я не вник зачем Вам нужен intersect, поэтому пример попроще)

Измерение [Sale Date] содержит дни, которые еще не наступили. А с помощью INTERSECT я пытаюсь ограничить набор дней текущей датой минус 1 день.
10 май 17, 12:02    [20468485]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 672
ShIgor,
Перенес в динамический набор все, что под интерсектом . Вроде все заработало. Спасибо!
10 май 17, 12:34    [20468629]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1955
Yagrus2,

Вы и так его уже ограничили указав границу справа, зачем повторно получать тот же ограниченный набор через пересечение с полным набором?

попробуйте найти вариант, который не будет использовать StrToMember и Format - очень медленные функции для работы с динамическими наборами.

Зачем Вам LAG? у Вас пропуски в датах? если нет, стройте сразу требуемую дату.
10 май 17, 13:48    [20469048]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 672
ShIgor
Вы и так его уже ограничили указав границу справа, зачем повторно получать тот же ограниченный набор через пересечение с полным набором?

Наконец понял, что вы имели ввиду. Оказываеся INTERSECT не нужен. Для того, чтобы ограничить измерение [Sale Date], достаточно вот этого:
CREATE DYNAMIC SET [Days Count 3] as 
{NULL : StrToMember("[Sale Date].[Date].[Date].&[" + Format(Now(), "yyyyMMdd") + "]").LAG(1)}; 
ShIgor
Зачем Вам LAG?
Чтобы ограничиваться не текущей датой, а предыдущей.
ShIgor
Yagrus2,
попробуйте найти вариант, который не будет использовать StrToMember и Format - очень медленные функции для работы с динамическими наборами.
Единственно что приходит в голову - это реализовать на физическом уровне
26 май 17, 14:44    [20515047]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
ShIgor
Member

Откуда: Нижний Новгород
Сообщений: 1955
Yagrus2,

вместо LAG можно день вычесть из Now()

заменить StrToMemeber и Format можно атрибутами, например Сегодня или Прошлое/Будущее... придумайте
26 май 17, 15:59    [20515440]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
Yagrus2
Member

Откуда: Москва
Сообщений: 672
ShIgor
вместо LAG можно день вычесть из Now()
Заменил на DATEADD("D",-1,NOW())
ShIgor
заменить StrToMemeber и Format можно атрибутами, например Сегодня или Прошлое/Будущее... придумайте

Можете пояснить?
26 май 17, 17:21    [20515717]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
Владимир Штепа
Member

Откуда: Hannover
Сообщений: 6001
Yagrus2,

Озвучу такой вариант решения. Добавьте в таблицу измерения колонку с 1 для всех дат в прошлом и постройте на ней меру типа сумма
29 май 17, 09:40    [20519049]     Ответить | Цитировать Сообщить модератору
 Re: SSAS 2012 калк мембер  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 1624
Владимир Штепа
колонку с 1 для всех дат в прошлом и постройте на ней меру типа сумма

+1
а еще можно такую же колонку "1/0" для рабочих дней
29 май 17, 11:50    [20519518]     Ответить | Цитировать Сообщить модератору
Все форумы / OLAP и DWH Ответить