Истинная мощь MDX проявляется, когда вы начинаете комбинировать эти функции для создания сложных отчетов, отвечающих конкретным бизнес-требованиям.
Пример 7: Топ-5 самых прибыльных продуктов AdventureWorks в Европе за последний квартал 2007 года, с фильтрацией по количеству заказовЭто уже более сложный сценарий, демонстрирующий гибкость MDX.
SELECT
-- Ось COLUMNS: Меры
{[Measures].[Profit], [Measures].[Order Quantity]} ON COLUMNS,
-- Ось ROWS: Топ-5 продуктов, отфильтрованных по количеству заказов
NON EMPTY
TopCount(
Filter(
[Product].[Product].[Product Name].Members,
([Measures].[Order Quantity], [Date].[Calendar Quarter].&[Q4 CY 2007], [Geography].[Sales Territory].[Sales Territory Group].&[Europe]) > 5
),
5,
([Measures].[Profit], [Date].[Calendar Quarter].&[Q4 CY 2007], [Geography].[Sales Territory].[Sales Territory Group].&[Europe])
) ON ROWS
FROM
[Adventure Works]
WHERE
-- Слайсер: Последний квартал 2007 года и регион 'Europe'
([Date].[Calendar Quarter].&[Q4 CY 2007], [Geography].[Sales Territory].[Sales Territory Group].&[Europe])
Пошаговый разбор:1.
FROM [Adventure Works]: Начинаемскуба Adventure Works.
2.
WHERE ([Date].[Calendar Quarter].&[Q4 CY 2007], [Geography].[Sales Territory].[Sales Territory Group].&[Europe]): Устанавливаемглобальныйконтекстдлязапроса: 4-йквартал 2007 годаирегион 'Europe'. Все меры будут вычисляться в этом контексте.
3.
Ось COLUMNS:
○ {[Measures].[Profit], [Measures].[Order Quantity]}: Мы хотим видеть две меры: прибыль и количество заказов.
4.
Ось ROWS:
○ NON EMPTY: Гарантируем, что будут показаны только те продукты, для которых есть данные в заданном контексте.
○ TopCount(...): Мы хотим получить топ-5 продуктов.
■ Внутри TopCount сначала идет Filter(...):
■ Filter([Product].[Product].[Product Name].Members, ...): Берем всех продуктов и фильтруем их.
■ ([Measures].[Order Quantity], [Date].[Calendar Quarter].&[Q4 CY 2007], [Geography].[Sales Territory].[Sales Territory Group].&[Europe]) > 5: Условиефильтрации – количествозаказовдолжнобытьбольше 5 в 4-мквартале 2007 годавЕвропе. Только такие продукты будут переданы в TopCount.
■ Затем 5: Мы хотим получить 5 верхних элементов.
■ Затем ([Measures].[Profit], [Date].[Calendar Quarter].&[Q4 CY 2007], [Geography].[Sales Territory].[Sales Territory Group].&[Europe]): Критерий для TopCount – прибыль в том же контексте.
○ Таким образом, мы сначала отбираем продукты по минимальному количеству заказов, а затем из этого отфильтрованного списка выбираем 5 самых прибыльных.
- Этот запрос демонстрирует, как MDX позволяет строить многослойную логику фильтрации и сортировки,
- что крайне важно для получения точных и значимых аналитических отчетов.