Я создаю кубы служб Analysis Services в Visual Studio BIDS и у меня возник вопрос о суммировании в вычисляемых членах.
Данные касаются сделок с коммерческой недвижимостью. Я хочу суммировать квадратные футы строительной площади, участвующей в торговых сделках для каждого региона. Я собираюсь использовать этот результат в средневзвешенном расчете. Однако я хочу только суммировать квадратные футы транзакций, которые имеют ненулевые значения для соответствующего члена нормы капитализации здания (предельная ставка).
Вот развертка к Афинам в браузере кубов:
Обратите внимание, что в Афинах есть 15 значений для квадратных футов, но только 5 значений для максимальной скорости, отражая мой источник реляционных данных, как показано здесь:
Итак, я хочу суммировать только пять квадратных футов, которые имеют связанные значения предела скорости. Делая математику с приведенным выше результатом реляционного запроса, вы можете увидеть, что это должно привести к сумме чуть более 900 КБ, а не к сумме 2 миллиона +, показанной на скриншоте BIDS.
Моя попытка этого расчета:
sum(
descendants(
[Property].[Property by Region].CurrentMember,
[Property].[Property by Region].[Metro Area]
),
iif([Measures].[Cap Rate] is null or [Measures].[Sq Ft] is null, 0,
[Measures].[Sq Ft])
)
в конечном итоге включает значения в квадратных футах, которые не имеют соответствующих предельных значений, поэтому я все равно получаю значение в 2 миллиона.
Почему мое предложение iff () работает не так, как следовало ожидать?