powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012 калк мембер
11 сообщений из 11, страница 1 из 1
SSAS 2012 калк мембер
    #39449435
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Wello World!

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

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

3 А также калк мембер [Days Count 2]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
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] вообще не учитывает этот фильтр.

Подскажите, как это побороть?
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39449511
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Провел небольшей экспиремент. Профайлером отловил скрипт формируемый excel-ем.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
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

Затем немного упростил
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
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

Подскажите, почему в первом случаи получаются такие цифры?
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39449657
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

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

Код: sql
1.
2.
3.
4.
5.
6.
CREATE DYNAMIC SET [Selected Days] as ( 
    [Sale Date].[Calendar].[Date] 
) 
CREATE MEMBER CURRENTCUBE.[Measures].[Days Count 3] as ( 
    count([Selected Days]) 
)



обратите внимание, что existing в этом случае не требуется. при использовании подселекта на всех осях в запросе и всех именованные наборах (включая динамические) выполняется autoexist.
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39450680
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorYagrus2,

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

Измерение [Sale Date] содержит дни, которые еще не наступили. А с помощью INTERSECT я пытаюсь ограничить набор дней текущей датой минус 1 день.
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39450699
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgor,
Перенес в динамический набор все, что под интерсектом . Вроде все заработало. Спасибо!
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39450777
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

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

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

Зачем Вам LAG? у Вас пропуски в датах? если нет, стройте сразу требуемую дату.
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39460474
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorВы и так его уже ограничили указав границу справа, зачем повторно получать тот же ограниченный набор через пересечение с полным набором?
Наконец понял, что вы имели ввиду. Оказываеся INTERSECT не нужен. Для того, чтобы ограничить измерение [Sale Date], достаточно вот этого:
Код: sql
1.
2.
CREATE DYNAMIC SET [Days Count 3] as 
{NULL : StrToMember("[Sale Date].[Date].[Date].&[" + Format(Now(), "yyyyMMdd") + "]").LAG(1)}; 

ShIgor Зачем Вам LAG? Чтобы ограничиваться не текущей датой, а предыдущей.
ShIgorYagrus2,
попробуйте найти вариант, который не будет использовать StrToMember и Format - очень медленные функции для работы с динамическими наборами. Единственно что приходит в голову - это реализовать на физическом уровне
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39460541
ShIgor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

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

заменить StrToMemeber и Format можно атрибутами, например Сегодня или Прошлое/Будущее... придумайте
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39460599
Фотография Yagrus2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ShIgorвместо LAG можно день вычесть из Now() Заменил на DATEADD("D",-1,NOW())
ShIgorзаменить StrToMemeber и Format можно атрибутами, например Сегодня или Прошлое/Будущее... придумайте
Можете пояснить?
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39461270
Владимир Штепа
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Yagrus2,

Озвучу такой вариант решения. Добавьте в таблицу измерения колонку с 1 для всех дат в прошлом и постройте на ней меру типа сумма
...
Рейтинг: 0 / 0
SSAS 2012 калк мембер
    #39461389
Фотография StarikNavy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владимир Штепа колонку с 1 для всех дат в прошлом и постройте на ней меру типа сумма
+1
а еще можно такую же колонку "1/0" для рабочих дней
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / SSAS 2012 калк мембер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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