powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / olap вычисляемая мера
8 сообщений из 8, страница 1 из 1
olap вычисляемая мера
    #39809647
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Прошу помощи с такой задачей:
есть две группы мер: Unique Articles, в которой мера Articles Unique Count с функцией агрегирования DistinctCount и группа мер Unique Companies, в которой есть мера Companies Unique Count также с функцией агрегирования DistinctCount. Необходимо реализовать вычисляемую меру: уникальное количество артикулов, для которых уникальное количество компаний больше двух. Сколько я не пытался реализовать вычисления используя только эти две меры Articles Unique Count и Companies Unique Count, у меня ничего не вышло. Получилось решить задачу только добавлением в источник-запрос поля, в котором для каждого артикула проставлен флаг, существует ли для него две и более уникальных компаний, плюс добавил измерение с двумя элементами 0 и 1, следующее вычисление отображает верный результат:
Код: sql
1.
2.
3.
4.
5.
6.
CREATE MEMBER CURRENTCUBE.[Measures].[Articles PCS Companies gt 2]
AS 
    ([Measures].[Articles Unique Count], [Is Company Count gt 2].[Is Company Count gt 2].&[1]), 
FORMAT_STRING = "#,#0", 
VISIBLE = 1 ,
ASSOCIATED_MEASURE_GROUP = 'Prices';


тут не сложно.
Подскажите пожалуйста, а как можно решить эту задачу более красиво, без использования такого дополнительного служебного измерения?
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39810012
PassedBI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно через измерение товаров посчитать, типа такого
Код: sql
1.
2.
3.
4.
sum
(Articles.ArticleKey.ArticleKey.members
,iif([Measures].[Unique Companies]>2, 1, null)
)


ну и плюс тут всякие финты для оптимизации еще, типа доп.условия not isEmpty, Non empty behaviour, суррогатных ключей на товарах итд.
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39810377
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PassedBI, это работает, но когда добавил в код строчку except([Bpg Companies].[Company].[Company].members, [Bpg Companies].[Company].&[0])

запрос начал просто "висеть", пока не знаю почему:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
with
member measures.[Articles PCS Companies gt 2] as 
sum(
		(
			except([Bpg Companies].[Company].[Company].members, [Bpg Companies].[Company].&[0]), --запрос висит при наличии этой строчки
			[Product].[Article Number].[Article Number].members
		),
        iif([Measures].[Companies Unique Count] >= 2, 1, null)
	)
SELECT
	{[Calendar].[Y-M-D Hierarchy].[Calendar Date].&[20190506]} on 0,
	measures.[Articles PCS Companies gt 2] on 1
from
	[Prices];
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39810381
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
точнее так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE MEMBER CURRENTCUBE.[Measures].[Articles PCS Companies gt 1]
AS 
    sum(
        (
            except([Bpg Companies].[Company].[Company].members, [Bpg Companies].[Company].&[0]),
            [Product].[Article Number].[Article Number].members
        ),
        iif([Measures].[Companies Unique Count] >= 1, 1, null)
    ), 
FORMAT_STRING = "#,#0", 
VISIBLE = 1 ,
ASSOCIATED_MEASURE_GROUP = 'Prices';
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39810391
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
так тоже не работает:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
CREATE MEMBER CURRENTCUBE.[Measures].[Articles PCS Companies gt 1]
AS 
    (
		sum(
			(
				[Product].[Article Number].[Article Number].members
			),
			iif([Measures].[Companies Unique Count] >= 1, 1, null)
		), 
		except([Bpg Companies].[Company].[Company], [Bpg Companies].[Company].&[0])
	)
FORMAT_STRING = "#,#0", 
VISIBLE = 1 ,
ASSOCIATED_MEASURE_GROUP = 'Prices';
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39810396
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пришла идея сделать except([Bpg Companies].[Company].[Company], [Bpg Companies].[Company].&[0]) элементами атрибута у измерения по умолчанию
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39810606
PassedBI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вам надо исключить одну компанию из расчета?
Если это возможно, исключите ее из таблицы фактов.
Если нет, то можно так переписать, но, боюсь, это будет не очень быстро работать
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE MEMBER CURRENTCUBE.[Measures].[Articles PCS Companies gt 1]
AS 
    (
		sum(
			[Product].[Article Number].[Article Number].members
		       ,iif
                         (  aggregate
                               (except([Bpg Companies].[Company].[Company], [Bpg Companies].[Company].&[0])
                               ,[Measures].[Companies Unique Count] >= 1
                               )
                        , 1
                        , null
                        )
		), 		
FORMAT_STRING = "#,#0", 
VISIBLE = 1 ,
NON_EMPTY_BEHAVIOR = { [Measures].[Companies Unique Count] }; 
ASSOCIATED_MEASURE_GROUP = 'Prices';



Еще можно сделать искусственный атрибут в измерении компаний, типа флага Участвует в расчетах (1/0) и переписать условие в формуле через него, так должно быть быстрее.
Код: sql
1.
iif(  ([Measures].[Companies Unique Count], [Участвует в расчетах].&[1]) >= 1, 1, null)
...
Рейтинг: 0 / 0
olap вычисляемая мера
    #39811344
rsolanov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PassedBI, спасибо за помощь, буду разбираться, но я пока уже изначально сделал через измерения, кстати такой вариант работает
быстрее чем если делать подобные расчетные меры.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / OLAP и DWH [игнор отключен] [закрыт для гостей] / olap вычисляемая мера
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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