Функция Order сортирует кортежи в множестве в соответствии с значением выражения, указанного во втором параметре функции. Пример: отсортировать магазины по значениям суммы продаж select order ([Магазин].members, [Measures].[Сумма продаж],BDESC) on columns from mycube В этом запросе будет проигнорирована иерархичность множества. Для сохранения иерархичности указывается ключевое слов DESC. +---+--+----+----+----+--+---+---+ |Укр|Од|Киев|Херс|Молд|РФ|Кур|Лип| +---+--+----+----+----+--+---+---+ |100|70|20 |10 |80 |60|40 |20 | +---+--+----+----+----+--+---+---+ Неопределённые значения (неопределённые члены) Сервер использует неопределённое значение для координат, выходящих за пределы куба, и для кортежей, которые содержат хотя бы один неопределённый член. select {[All],[All].Parent} on columns from mycube +----+ |All | +----+ |1234| +----+ Существуют комбинации элементов из разные иерархий членов измерений, в которых существуют комбинации элементов из разных иерархий членов измерений, которые просто не существуют в таблице измерений или в кубе. Например, кортеж ([Клиент].[Ирина Петрова], [Клиент].[Пол].[М]). Если MDX ссылается на кортеж несуществующего измерения, происходит его преобразование в неопределённый кортеж. Несуществующие элементы из результирующего множества удаляются благодаря режиму автоматической проверки существования. Пример: select {[Ирина Петрова],[Василий Иванов]}*[Клиент].[Пол].[М] on columns from MyCube where [Measures].[КолПродаж] {(-Петр,М-),(Ив,М)} +--------+ |Вас Иван| +--------+ | М | +--------+ | 1234 | +--------+ Сервер не выполняет проверку автоматического существования между осями, но выполняет для множеств, спроецированных на оси, и множеств, заданных предложением where. Функция Exists: принимает в качестве параметра два множества и возвращает множество кортежей из первого множества, которое существует хотя бы для одного кортежа из второго множества Пример: получить сведения о продажах для покупателей, которые работают менеджерами. select [Measures].[КолПрод] on columns, Exists([Клиент].members, [Клиент].[Должность].[Менеджер]) on rows Вывести сведения о должностях покупателей, которые сделали покупки в магазинах разных стран в 2013 году select [Клиент].[Должность].members on columns, [Магазин].[Страна].members on rows from mycube where ([Measures].[Сумма Продаж],[Время].[Дата].[2013]) |Дир |Менед|Програм| ----+----+-----+-------+ Молд|null|null |null | ----+----+-----+-------+ Укр |345 |567 |891 | ----+----+-----+-------+ РФ |null|null |null | ----+----+-----+-------+ Чтобы удалить подобные координаты из результирующего множества, используется оператор non empty. select [Клиент].[Должность].members on columns, non empty [Магазин].[Страна].members on rows from mycube where ([Measures].[Сумма Продаж],[Время].[Дата].[2013]) |Дир |Менед|Програм| ----+----+-----+-------+ Укр |345 |567 |891 | ----+----+-----+-------+ non empty удаляет кортежи, в которых все ячейки пустые, т. е. non empty действует на верхнем уровне запроса. Есть случаи, когда производительность может оказаться значительно выше, если пустые значения удалить заранее. Пусть использована функция-фильтр для фильтрации очень большого множества и пространство куба очень разрежено. select filter([Клиент].members * [Магазин].[Страна].members, [measures].[Кол Прод]>100) on columns from mycube where [measures].[Кол Прод] Функция nonempty удалит пустые кортежи до фильтрации множества select [Время].[Год].[2013] on columns, nonempty([Магазин].Страна.members) on rows from mycube +----+----+ |Молд|null| |РФ |null| |Укр |234 | +----+----+ select [Время].[Год].[2013] on columns, non empty [Магазин].[Страна].members on Rows from mycube +---+---+ |Укр|234| +---+---+ Функция nonempty вычисляется, когда вычисляется множество, помещаемое на rows, и это вычисление происходит независимо от множества, помещаемого на columns, т. е. в момент вычисления nonempty время представлено [All], поэтому результирующее значение не является пустым за счёт других годов, но в момент вычисления фактических значений результирующего множества уже учитывается 2013 год, поэтому образуются пустые значения. Оператор non empty принимает во внимание кортежи всех осей, поэтому вычисление происходит уже в контексте 2013 года.