Раздел WHERE

Многие программисты используют WHERE как конструкцию, с помощью которой можно указать меру, которая должна быть представлена в наборе результатов. Такое применение WHERE в MDX-запросах является вполне корректным и традиционным для этого достаточно купить бу сервер, но подобный подход скрывает истинное назначение этого раздела: определять критерии отбора для всех измерений куба.

На первый взгляд это противоречит логике. Например, в разделе WHERE указывается необходимая мера, однако в нем отсутствуют какие-либо фильтры или условия отбора, а измерения вообще не упоминаются. Однако с формальной точки зрения раздел WHERE определяет именно критерии отбора по измерению. Чтобы убедиться в этом, необходимо понять, что понимается под мерами в языке MDX и как используются элементы измерений по умолчанию.

Проще говоря, с точки зрения языка MDX куб состоит только из измерений и данных. Вместо того, чтобы рассматривать меры в качестве самостоятельных сущностей куба, язык MDX определяет меру как элемент плоской иерархии специального измерения с именем Measures. Именно поэтому выражение «MeasuresJ/Total Sales» в разделе WHERE является критерием отбора — по сути, вы сообщаете ядру MDX, что следует ограничиться анализом элемента Total Sales измерения Measures. Поскольку для всех остальных измерений куба критерий отбора не задан, MDX-запрос возвращает содержимое всех участвующих измерений.
Если вы хотите указать в запросе более «правдоподобное» условие отбора, добавьте в раздел WHERE соответствующий критерий.