Scope Statement Альтернатива медленному счетчику CrossJoin MDX - PullRequest
0 голосов
/ 18 января 2019

Приведенный ниже MDX работает для моей цели, но очень медленно. Есть ли заявление об объеме? По сути, я хочу подсчитать оставшиеся перекрестные комбинации контактов / покупок, в которых сумма составляет $> 5000.

Суммарный продукт состоит из 290 миллионов строк, но я не уверен, как по-разному структурировать его для повышения производительности. Спасибо за любую помощь.

 CREATE HIDDEN STATIC SET [Over 5K Plus Test 2] 
 AS NONEMPTY (([Contact].[Contact ID].[Contact ID],[Fund Sold].[Fund Sold ID].[Fund Sold ID]),
[Measures].[FA And Team Gross Sales with FAs Including All Vehicles]); 

CREATE MEMBER CURRENTCUBE.[Measures].[FA and Team Product Count]
AS COUNT(EXISTING((Filter([Over 5K Plus Test 2], [Measures].[FA And Team Gross Sales with FAs Including All Vehicles] >= 5000)))),

1 Ответ

0 голосов
/ 20 января 2019

Попробуйте это, избегая фильтра:

CREATE MEMBER CURRENTCUBE.[Measures].[FA and Team Product Count]
AS SUM(
 Existing [Contact].[Contact ID].[Contact ID].Members
 * Existing [Fund Sold].[Fund Sold ID].[Fund Sold ID].Members,
 IIF([Measures].[FA And Team Gross Sales with FAs Including All Vehicles] >= 5000, 1, Null)
);

Если это все еще медленно, то разместите вычисление за FA And Team Gross Sales with FAs Including All Vehicles

Более эффективный способ выполнить это требует немного больше усилийно будет работать лучше, потому что избегает функции Existing.Сначала вы должны создать столбец в DSV, который является вычисляемым столбцом в таблице фактов, используя это выражение:

CAST(null as int)

Затем создайте новую меру под названием «Количество продуктов FA и Team» в этом столбце.Разверните привязку столбца и выберите NullHandling = Сохранить.Это должна быть физическая мера, а не расчетная мера, потому что только совокупные назначения для физических мер агрегируются.

Затем добавьте следующую инструкцию в скрипт MDX (вместо расчетной меры, упомянутой вверху):

([Measures].[FA and Team Product Count],
 [Contact].[Contact ID].[Contact ID].Members,
 [Fund Sold].[Fund Sold ID].[Fund Sold ID].Members) =
 IIF([Measures].[FA And Team Gross Sales with FAs Including All Vehicles] >= 5000, 1, Null);
...