Примеры функций MDX

Функция/Атрибут Комментарий Пример
Caption Заголовок [dim_period].[period_h].CurrentMember.Caption
Name Значение [dim_period].[period_h].CurrentMember.Level.Name
UniqueName Уникальное имя [dim_period].[h_period].CurrentMember.UniqueName="[dim_period].[h_period].[2021]"
MEMBER_TYPE атрибут со значениями
1- листовые элементы
2- элемент уровня Все
3- Мера
4- Расчетный элемент
[dim_period].[period_h].CurrentMember.Properties(MEMBER_TYPE)
Ordinal Возвращает начинающееся с нуля порядковое значение, связанное с уровнем. [dim_period].[period_h].CurrentMember.Ordinal

Функции элементов

Группа Пример Комментарий Альтернатива
Элемент Адресация {[dim_period].[period_h].[2020].[1].[1]}
Элемент по умолчанию {[dim_period].[period_h].DefaultMember } Возвращает элемент по умолчанию для измерения или иерархии.
Элемент Все элементы {[dim_period].[period_h].[All period_hs]}
Вертикальная навигация Родитель и дочерний элемент {[dim_period].[period_h].[2020].[1].[1].Parent } Возвращает родительский элемент заданного элемента.
{Ancestor([dim_period].[period_h].[2020].[1].[1],2)}

{Ancestor([dim_period].[period_h].[2020].[1].[1],[dim_period].[period_h].[year_l])}
Возвращает предка элемента на указанном уровне или расстоянии.
{[dim_period].[period_h].[2020].[1].FirstChild} Возвращает первого потомка элемента.
{[dim_period].[period_h].[2020].[1].LastChild} Возвращает последний дочерний элемент указанного элемента.
Смежные {ClosingPeriod([dim_period].[period_h].[month_l],[dim_period].[period_h].[2020])} Возвращает последний элемент среди потомков указанного элемента на указанном уровне. Tail(Descendants(), 1)
{OpeningPeriod([dim_period].[period_h].[month_l],[dim_period].[period_h].[2020])} Возвращает первый элемент с общим родителем из потомков заданного уровня, необязательно заданного элемента.
{[dim_period].[period_h].[2020].[1].LastSibling } Возвращает последний дочерний элемент родителя указанного элемента.
{[dim_period].[period_h].[2020].[1].FirstSibling } Возвращает первого потомка предка заданного элемента.
{[dim_period].[period_h].[2020].[1].Siblings} Возвращает элементы, имеющие общего родителя с указанным элементом, включая сам элемент.
Горизонтальная навигация Предыдущий и следующий элемент {[dim_period].[period_h].[2020].[1].[1].Prevmember} Возвращает предыдущий элемент уровня, содержащего указанный элемент.
{[dim_period].[period_h].[2020].[1].[1].NextMember } Возвращает следующий элемент уровня, содержащего заданный элемент.
{[dim_period].[period_h].[2020].[1].[1].Lead(1)}

{[dim_period].[period_h].[2020].[1].[1].Lag(-1)}
Возвращает элемент, который следует за заданным элементом через указанное число позиций в измерении элемента.
{[dim_period].[period_h].[2020].[1].[1].Lead(-1)}

{[dim_period].[period_h].[2020].[1].[1].Lag(1)}
Возвращает элемент, который находится на указанное количество позиций ранее заданного элемента на его уровне.
Другие [dim_period].[period_h].[2020].[1].Children.Item(1) Возвращает элемент указанного кортежа.
{Cousin([dim_period].[period_h].[2020].[1].[1],[dim_period].[period_h].[2019])} Возвращает дочерний элемент, позиция которого относительно родительского элемента совпадает с позицией заданного дочернего элемента.

Функции наборов

Пример Комментарий
{[dim_reg].[reg_h].AllMembers} Возвращает набор, содержащий все элементы (включая вычисляемые) заданного измерения, иерархии или уровня.
{[dim_reg].[reg_h].Levels('reg_l').Members} Возвращает уровень, положение которого в измерении или иерархии указано числовым выражением или имя которого указано строковым выражением.
Уровни {[dim_reg].[reg_h].Levels(1).Members}
{Ancestors([dim_period].[period_h].[2020].[2].[4],2)} Функция, возвращающая набор предков заданного элемента на заданном уровне или заданном расстоянии от элемента.
{Ascendants ([dim_period].[period_h].[2020].[2].[4])} Возвращает набор родителей указанного элемента, включая его самого.
{Descendants ([dim_period].[period_h].[2020])} Возвращает набор потомков элемента на указанном уровне или расстоянии, по желанию включая или исключая потомков на других уровнях.
Descendants([dim_period].[period_h].[2020],1)
{DrilldownLevel([dim_period].[period_h].[2020])} Детализирует углублением элементы набора на один уровень ниже
DrilldownLevelTop([dim_period].[period_h].[2020], 2, [dim_period].[period_h].[year_l])
DrilldownLevelBottom([dim_period].[period_h].[2020], 2, [dim_period].[period_h].[year_l])
DrilldownMember(<Set1>, <Set2>) Детализирует элементы указанного набора, присутствующие во втором указанном наборе. Например, DrilldownMember({[tst_period].[ymd_lvl].[2020].[1], [tst_period].[ymd_lvl].[2021]}, [tst_period].[ymd_lvl].[year_lvl].Levels(1).Members) вернет элемент первого уровня [tst_period].[ymd_lvl].[2021] с дочерними элементами и отдельно [tst_period].[ymd_lvl].[2020].[1]
DrilldownMember(<Set1>, <Set2>, RECURSIVE, INCLUDE_CALC_MEMBERS) (с версии 5.2) Детализирует элементы указанного набора, присутствующие во втором указанном наборе, при этом опциональный параметр обеспечивает добавление в результат дочерних расчетных элементов при разворачивании элемента иерархии, по которой выполняется drillDown. Например, DrilldownMember([tst_period].[ymd_lvl].[2021], [tst_period].[ymd_lvl].[year_lvl].Levels(1).Members, INCLUDE_CALC_MEMBERS) вернет элемент первого уровня [tst_period].[ymd_lvl].[2021] с дочерними элементами в т.ч. с его расчетными потомками на втором уровне.
Подмножества {Head ([dim_period].[period_h].[year_l].Members,3 )} Возвращает указанное количество первых элементов набора, сохраняя повторяющиеся элементы.
{Tail([dim_period].[period_h].Members, 2)} Возвращает подмножество из конца набора.
{TopCount([dim_reg].[reg_h].[fo].Members, 3,[Measures].[births_cnt])} Сортирует набор по убыванию и возвращает заданное число элементов с самыми высокими значениями.
{BottomCount ([dim_period].[period_h].Levels(1).Members,2, [Measures].[births_cnt])} Сортирует набор в порядке возрастания и возвращает указанное число кортежей набора с минимальными значениями.
{BottomPercent ([dim_reg].[reg_h].Levels(1).Members,50, [Measures].[births_cnt])} Сортирует набор по возрастанию и возвращает набор кортежей с наименьшими значениями, совокупное значение которых больше или равно заданному проценту.
Пересечения {Except ([dim_period].[period_h].[year_l].Members,{[dim_period].[period_h].[2020],[dim_period].[period_h].[2021]} )} Обрабатывает два набора и удаляет кортежи из первого набора, существующие во втором наборе, сохраняя при необходимости одинаковые элементы.
{Exists ([dim_period].[period_h].[year_l].Members,{[dim_period].[period_h].[2020],[dim_period].[period_h].[2021]} )} Возвращает набор кортежей первого указанного набора, которые один или более раз встречаются во втором наборе.
{Intersect ( head ([dim_period].[period_h].[year_l].Members,3 ), {[dim_period].[period_h].[2020], [dim_period].[period_h].[2022] })} Возвращает пересечение двух входных наборов, при необходимости сохраняя повторяющиеся элементы.
Другое Union() Возвращает набор, порожденный объединением двух наборов, по желанию сохраняя повторяющиеся элементы.
filter ([dim_period].[period_h].levels(3).Members,
[dim_period].[period_h].[month_l].CurrentMember.Properties(date)<DateSerial(2020,1,1))
Возвращает элементы 3-го уровня, у которых атрибут типа Дата меньше 01.01.2020
IIf () Возвращает одно из двух значений, исходя из логического условия. С версии 5.3 поддерживаются аргументы типа Datetime, например, IIF([dim1].[hier1].CurrentMember.Properties('CHILDREN_CARDINALITY') > 0, min([dim1].[hier1].CurrentMember.Children, [Measures].[date_min]), [Measures].[date_min])
Order() Упорядочивает элементы указанного набора, по выбору сохраняя или нарушая иерархию.
AddCalculatedMembers({}) По умолчанию в языке многомерных выражений вычисляемые элементы исключаются при вычислении функций набора. Функция AddCalculatedMembers проверяет выражение набора, указанное в Set_Expression, и включает вычисляемые элементы, которые являются одноуровневыми элементами, содержащимися в области этого выражения набора.

Функции работы с периодами

Пример Комментарий
{ParallelPeriod([dim_period].[period_h].[year_l], 1,[dim_period].[period_h].[2020].[2])} Возвращает элемент предыдущего периода, расположенный в той же относительной позиции, что и заданный элемент.
  • Cousin(Member_Expression
  • Ancestor(Member_Expression, Level_Expression)
  • .Lag(Numeric_Expression))
{[dim_period].[period_h].[2020].[1].[1]:[dim_period].[period_h].[2020].[2].[5]} Возвращает набор элементов в интервале
{LastPeriods(3,[dim_period].[period_h].[2020].[1].[1])} Возвращает набор элементов до указанного элемента включительно.
{PeriodsToDate([dim_period].[period_h].[year_l],[dim_period].[period_h].[2020].[3].[7])} Возвращает набор элементов с общим родителем, находящихся на том же уровне, что и данный элемент, начиная с первого такого элемента и заканчивая данным элементом, в соответствии с ограничениями заданного уровня в измерении Time.
{Mtd([dim_period].[period_h].[2020].[3].[7])}

{Qtd([dim_period].[period_h].[2020].[3].[8])}

{Ytd ([dim_period].[period_h].[2020].[3].[8])}
Возвращает набор элементов с общим родителем, находящиеся на том же уровне, что и заданный элемент, начиная с первого элемента того же уровня и заканчивая данным элементом, в соответствии с ограничением уровня месяца/квартала/года в измерении времени.

Даты

Функция Пример Комментарий
Now() Now() Текущие дата и время в соответствии с системной датой, формат по умолчанию "[dd.mm](http://dd.mm/).yyyy hh:mm:ss"
DatePart DatePart('m', now()) Обозначения форматов для типа Дата-время:
  • yyyy - Четырехзначное обозначение года (100-9999)
  • yy - Последние две цифры года (00-99)
  • y - День года (1-366)
  • q - Номер квартала (1-4)
  • mmmm - Полное название месяца (январь - декабрь)
  • mmm - Сокращённое название месяца (янв. - дек.)
  • mm - Месяц года с нулем (01-12)
  • m - Номер месяца без нуля в начале (1–12)
  • ww - Номер недели года без нуля; неделя 1 начинается 1 января (1–53)
  • w - День недели, начиная с воскресенья = 1 (1–7)
  • dd - День месяца с нулем (01-31)
  • d - День месяца без нуля в начале (1-31)
  • hh - Час дня с нулем (00–23)
  • h - Час дня без нуля (0–23)
  • nn - Минуты часа с нулем (00-59)
  • n - Минуты часа без нуля (0–59)
  • mm - Минуты часа с нулем (00-59)
  • m - Минуты часа без нуля (0–59)
  • ss - Секунды минуты с нулем (00-59)
  • s - Секунды минуты без нуля (0–59)
  • ttttt - Время как полное время (включая часы, минуты и секунды, формат h:mm:ss)
  • Day(date)
  • Month((date)
  • Year((date)
  • Hour(time)
  • Minute(time)
  • Second(time)
  • Day(now())
  • Month(now())
  • Year(now())
  • Hour(now())
  • Minute(now())
  • Second(now())
  • целое число от 1 до 31 включительно, обозначающее день месяца
  • целое число от 1 до 12 включительно, обозначающее месяц года
  • целое число, обозначающее год
  • целое число от 0 до 23 включительно, обозначающее час дня
  • целое число от 0 до 59 включительно, обозначающее минуты часа
  • целое число от 0 до 59 включительно, представляющее секунду минуты
DateSerial(year, month, day) DateSerial(2020,1,1) Дата для указанного года, месяца и дня
DateAdd(interval, number, date)
  • DateAdd("m",1,now())
  • format (DateAdd("m",1,now()), "[yyyy.mm](http://yyyy.mm/).d")
Дата-время после добавления к исходному значению указанного интервала времени (при number<0 выполняется вычитание).
Где Interval задается согласно спецификации:
  • yyyy - Четырехзначное обозначение года (100-9999)
  • yy - Последние две цифры года (00-99)
  • y - День года (1-366)
  • q - Номер квартала (1-4)
  • mmmm - Полное название месяца (январь - декабрь)
  • mmm - Сокращённое название месяца (янв. - дек.)
  • mm - Месяц года с нулем (01-12)
  • m - Номер месяца без нуля в начале (1–12)
  • ww - Номер недели года без нуля; неделя 1 начинается 1 января (1–53)
  • w - День недели, начиная с воскресенья = 1 (1–7)
  • dd - День месяца с нулем (01-31)
  • d - День месяца без нуля в начале (1-31)
  • hh - Час дня с нулем (00–23)
  • h - Час дня без нуля (0–23)
  • nn - Минуты часа с нулем (00-59)
  • n - Минуты часа без нуля (0–59)
  • mm - Минуты часа с нулем (00-59)
  • m - Минуты часа без нуля (0–59)
  • ss - Секунды минуты с нулем (00-59)
  • s - Секунды минуты без нуля (0–59)
  • ttttt - Время как полное время (включая часы, минуты и секунды, формат h:mm:ss)
DateDiff('m',now(),dateserial(2022,1,1)) Где interval:
  • yyyy - Количество полных лет (Year)
  • y - Количество дней (Day of year)
  • d - Количество дней (Day)
Для всех значений Interval, кроме года и дня, вычисляется разница между относительными значениями компонентов дат, а не абсолютными, т.е. для месяца разница между 01.05.2020 и 01.01.1970 будет равна 5-1 = 4.
MonthName(month, abbreviate) MonthName(10, 1<0) Полное либо сокращенное наименование месяца по номеру, где:
  • month - целое число в диапазоне 1-12, номер месяца
  • abbreviate - булевый признак получения сокращенного или полного названия месяца, для получения булевого значения в выражении можно использовать 1>0 (true) и 1<0 (false).
WeekdayName(weekday, abbreviate, firstdayofweek) WeekdayName(7, 1<0, 2) Наименование дня недели, где:
  • weekday - целое число в диапазоне 1-7, номер дня недели
  • abbreviate - булевый признак получения сокращенного или полного названия дня недели, для получения булевого значения в выражении можно использовать 1>0 (true) и 1<0 (false)
  • firstdayofweek - целое число в диапазоне 1-7, номер дня недели, который считается первым. По умолчанию 1-Вск … 7-Сб
DateValue(date) DateValue(now()) Получение дата/дата-время к началу дня
IsDate(varname) IsDate(${par}) Логическое значение, указывающее является ли аргумент датой

Числовые функции

Функция Пример Комментарий
Rank() Rank([dim_period].[period_h].CurrentMember, [dim_period].[period_h].Members) Возвращает позицию, начиная с единицы, заданного кортежа в указанном множестве.
.Ordinal [dim_period].[period_h].CurrentMember.Ordinal Возвращает начинающееся с нуля порядковое значение, связанное с уровнем.
Count() Count({[dim_period].[period_h].[2020],[dim_period].[period_h].[2021]}) Count(<Set>)
.Count [dim_period].[period_h].CurrentMember.Дочерние.Count <Set>.Count

Агрегирующие функции

Функция Пример Комментарий
max()
  • max([dim_period].[period_h].CurrentMember.Children,[Measures].[births_cnt])
  • max([dim1].[hier1].CurrentMember.Children, [Measures].[date_max])
  • max([dim1].[hier1].CurrentMember.Children,IIF([dim1].[hier1].CurrentMember.Properties('date') is null, DateSerial(1970,1,1),[dim1].[hier1].CurrentMember.Properties('date')))
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
  • max(setArg, dateTimeArg)
  • max(setArg, stringArg)
min()
  • min([dim_period].[period_h].CurrentMember.Children,[Measures].[births_cnt])
  • min([dim1].[hier1].CurrentMember.Children, [Measures].[date_min])
  • min([dim1].[hier1].CurrentMember.Children,IIF([dim1].[hier1].CurrentMember.Properties('date') is null, DateSerial(1970,1,1),[dim1].[hier1].CurrentMember.Properties('date')))
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
  • min(setArg, dateTimeArg)
  • min(setArg, stringArg)
aggregate()
  • aggregate([dim_period].[period_h].CurrentMember.Children,[Measures].[births_cnt])
  • aggregate([dim1].[hier1].CurrentMember.Children, [Measures].[date_min])
  • aggregate([dim1].[hier1].CurrentMember.Children,IIF([dim1].[hier1].CurrentMember.Properties('date') is null, DateSerial(1970,1,1),[dim1].[hier1].CurrentMember.Properties('date')))
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
  • aggregate(setArg, dateTimeArg)
  • aggregate(setArg, stringArg)/li>

Строковые функции

Функция Пример Комментарий
InStr([start, ]stringcheck, stringmatch[, compare]) InStr([tst_service].[service].CurrentMember.Caption, "ic") Индекс, определяющий позицию первого вхождения подстроки
InStrRev(stringcheck, stringmatch[, start[, compare]]) InStrRev([tst_service].[service].CurrentMember.Caption, "ic") Индекс последнего вхождения подстроки
LCase(string) LCase([tst_service].[service].CurrentMember.Caption) Строка, преобразованная в нижний регистр
LTrim(string) LTrim(${par}) Указанная строка без пробелов в начале
RTrim(string) RTrim(${par}) Указанная строка без пробелов справа
Trim(string) Trim(${par}) Указанная строка без начальных и конечных пробелов
Left(string, length) Left(${par}, 5) Указанное количество символов с левой стороны строки
Right(string, length) Right(${par},3) Указанное количество символов с правой стороны строки
Mid(value, beginIndex[, length]) Mid(${par},5,3) Указанное количество символов из строки, подстрока заданной длины начиная с указанной позиции
Replace(expression, find, replace[, start[, count[, compare]]]) Replace(${par}, '02', '',1,3) Строка, в которой указанная подстрока была заменена другой подстрокой указанное количество раз
StrReverse(string) StrReverse(${par}) Строка, в которой порядок символов изменен на обратный
Str(number) Str(4) Преобразование числа в строку
TypeName(varname) TypeName(${par}) Типа указанной переменной
Chr(charcode) Chr(8634) Принимает целое число - номер символа в таблице Юникода, возвращает соответствующий символ: 100+ Юникод символов, которые можно использовать в HTML/CSS/JS/PHP

Приведение типов

Функция Пример Комментарий
StrToMember {StrToMember ('[dim_period].[period_h].[2020].['||\'2'||\']')} Возвращает элемент, заданный строкой в формате многомерных выражений.
StrToSet StrToSet('{[dim_period].[period_h].[2019],[dim_period].[period_h].[2020]}', [dim_period].[period_h]) Возвращает набор элементов одной иерархии, заданный строкой в формате многомерных выражений. Вторым аргументом является UniqueName иерархии.

В качестве Set_Specification (обозначающего набор строкового выражения) может выступать не только UniqueName элементов, но и часть значения элементов, по которому получится однозначно идентифицировать элементы иерархии в рамках всего куба, например, StrToSet('{[2019].[1],[2019].[2]}', [dim_period].[period_h]).

При необходимости выполнить дальнейшие расчеты на основе вычисленного элемента, лучше использовать StrToSet().item(0) вместо StrToMember().
StrToTuple {StrToTuple(
"("||${Классификация-Партнер}||")",
[dim_partner_classification].[hier_cls],
[dim_partner].[hier_partner]).Item(1)
}
Возвращает кортеж, заданный строкой в формате многомерных выражений. Все последующие аргументы после Tuple_Specification (задающего кортеж строкового выражения) - это UniqueName иерархий в кортеже в соответствующей последовательности.

В примере:
- {Классификация-Партнер} - это переменная типа “Строка”, содержит значения вида [dim_partner_classification].[hier_cls].[5],[dim_partner].[hier_partner].[774]
- [dim_partner_classification].[hier_cls] и [dim_partner].[hier_partner] - UniqueName иерархий в кортеже
- Item(1) - элемент какого из иерархий кортежа необходимо вернуть, начиная с 0
format {StrToMember([dim_period].[period_h].[||format(now(),yyyy)||\].[||\format(now(),q)||].[||format(now(),m)||])} Форматирует число или дату в строку
Cast IIF([dim_period].[period_h].[year_l].CurrentMember.Ordinal>0,
Cast([dim_period].[period_h].[year_l].CurrentMember.Name as numeric), 0)
Варианты:
BOOLEAN
NUMERIC
DECIMAL
STRING
FORMAT_STRING ([Measures].[births_cnt]+0), FORMAT_STRING = IIF([Measures].[births_cnt]>0, #,0,'-')

Другие

Функция Пример Комментарий
GENERATE Generate(${Регионы}, [dim_reg].[reg_h].CurrentMember.Caption, '|\') Применяет набор к каждому элементу другого набора и соединяет результирующие наборы. В качестве альтернативы эта функция также возвращает сцепленную строку, созданную путем вычисления строкового выражения по набору.
matches
  1. filter (<br>[dim_country].[part_country].Members, [dim_country].[part_country].CurrentMember.Name matches generate(${страны}, [dim_country].[h_country].CurrentMember.Name, '|'))
  2. filter ([tst_service].[service].Levels(2).Members,[tst_service].[service].CurrentMember.Заголовок matches "текст 2|текст 3")
  1. При сопоставлении текста со списком свойств элементов массива (через цикл generate)
  2. Аналог in при работе со строкой, где разделителем будет ‘|’, например, если заголовок должен быть одним из 2х значений.
IsEmpty IsEmpty([Measures].[births_cnt])
NonEmpty([Measures].[births_cnt])
in filter([dim].[hier].Levels(1).Members, [dim].[hier].CurrentMember in {[dim].[hier].[1],[dim].[hier].[3]}) При работе с элементами, вычисление элементов, входящих в сет

Кейсы

Задача Пример как не стоит Рекомендация
Вывести весь набор в развернутом виде Явно выбраны все ФО

[dim_reg].[reg_h].[Дальневосточный федеральный округ],
[dim_reg].[reg_h].[Приволжский федеральный округ],
[dim_reg].[reg_h].[Северо-Западный федеральный округ],
[dim_reg].[reg_h].[Северо-Кавказский федеральный округ],
[dim_reg].[reg_h].[Сибирский федеральный округ],
[dim_reg].[reg_h].[Уральский федеральный округ],
[dim_reg].[reg_h].[Центральный федеральный округ],
[dim_reg].[reg_h].[Южный федеральный округ]
Использование функций наборов вместо явного выбора множества элементов

[dim_reg].[reg_h].DefaultMember.Children
Исключить несколько значений из всего набора Явно выбраны все, кроме 1 элемента

[dim_reg].[reg_h].[Дальневосточный федеральный округ],
[dim_reg].[reg_h].[Северо-Западный федеральный округ],
[dim_reg].[reg_h].[Северо-Кавказский федеральный округ],
[dim_reg].[reg_h].[Сибирский федеральный округ],
[dim_reg].[reg_h].[Уральский федеральный округ],
[dim_reg].[reg_h].[Центральный федеральный округ],
[dim_reg].[reg_h].[Южный федеральный округ]
except([dim_reg].[reg_h].Levels(1).Элементы,[dim_reg].[reg_h].[Приволжский федеральный округ])
Фильтрация периода filter ([dim_period].[period_h].Levels(3).Элементы,[dim_period].[period_h].CurrentMember.Properties(date)>=${От} and [dim_period].[period_h].CurrentMember.Properties(date)<= ${До}) union(
union(
filter(
[dim_period].[period_h].Levels(1).Members,
[dim_period].[period_h].CurrentMember.Properties("year")> year(${От})
and
[dim_period].[period_h].CurrentMember.Properties("year")<year(${До})),
union (
filter(
StrToMember('[dim_period].[period_h].['||format(${От}, 'yyyy')||']').Children,
[dim_period].[period_h].CurrentMember.Properties("quarter")>datepart('q',${От})
),
filter(
StrToMember('[dim_period].[period_h].['||format(${До}, 'yyyy')||']').Children,
[dim_period].[period_h].CurrentMember.Properties("quarter")< datepart('q',${До})
)
)
),
union (
filter(
StrToMember('[dim_period].[period_h].['||format(${От}, 'yyyy')||'].['||format(${От}, 'q')||']').Children,
[dim_period].[period_h].CurrentMember.Properties("date")>=${От}
),
filter(
StrToMember('[dim_period].[period_h].['||format(${До}, 'yyyy')||'].['||format(${До}, 'q')||']').Children,
[dim_period].[period_h].CurrentMember.Properties("date")<= ${До}
)
)
)
Явное получение элемента иерархии Периода по переменной дате с отдельным вычислением соответствующего значения для каждого уровня StrToMember('[tst_period].[ymd_lvl].['||format(${переменная дата}, 'yyyy')||'].['||format(${переменная дата}, 'm')||'].['||format(${переменная дата}, 'd')||']')
Явное получение Set по иерархии Периода по переменной дате StrToSet('[tst_period].[ymd_lvl].['||format(${переменная дата}, 'yyyy')||'].['||format(${переменная дата}, 'm')||'].['||format(${переменная дата}, 'd')||']', [tst_period].[ymd_lvl])
Фильтрация года по имени элемента, где формат для переменной даты надо задать такой же как у имени элемента filter(
[tst_period].[ymd_lvl].Levels(1).Members,
[tst_period].[ymd_lvl].CurrentMember.Name=format(${переменная дата}, 'yyyy'))
Фильтрация года по имени элемента c приведением к числу и получением года из переменной даты filter(
[tst_period].[ymd_lvl].Levels(1).Members,
cast([tst_period].[ymd_lvl].CurrentMember.Name as numeric)=year(${переменная дата}))
Фильтрация по атрибуту типа дата в простом случае, когда на фильтруемом уровне есть соответствующий атрибут filter(
[tst_period].[ymd_lvl].Levels(3).Members,
[tst_period].[ymd_lvl].CurrentMember.Properties("date")=${переменная дата})
Сортировка по условиям на разных уровнях 2 разные иерархии order([dim_reg].[reg_h].Members,
iif([dim_reg].[reg_h].CurrentMember.Ordinal = 1,
rank([dim_reg].[reg_h].CurrentMember,
[dim_reg].[reg_h].Levels(1).Members),
[Measures].[births_cnt]),
asc
)
Сортировка с расчетным элементом Для применения правила сортировки Order к расчетному элементу следует обернуть сортируемый набор элементов в функцию AddCalculatedMembers, далее указывать правило сортировки:
  1. сортировка по явно заданному порядку в сете, где целевая последовательность указывается через RANK

    Order(
    AddCalculatedMembers({[dim_reg].[reg_h].[Итог],
    ${Регионы} })
    ,
    rank ([dim_reg].[reg_h].CurrentMember,
    {[reg_h].[Итог],
    ${Регионы} }
    ), asc)

  2. сортировка по заголовку элементов, в т.ч. с добавлением в список расчетных элементов

    Order(
    AddCalculatedMembers({
    [dim_reg].[reg_h].[ Итого общий], // расчетный элемент № 3
    [dim_reg].[reg_h].[Дальневосточный федеральный округ +], // расчетный элемент № 1
    [dim_reg].[reg_h].[Северо - Западный федеральный округ +], // расчетный элемент № 2
    [dim_reg].[reg_h].levels(1).Members // Элементы иерархии
    }),
    [dim_reg].[reg_h].CurrentMember.Caption,
    BASC
    )
Получить максимум из набора кортежей sum (Head(
Order([dim_reg].[reg_h].[fo].Members,
[Measures].[births_cnt]
, BDESC),
1),
[Measures].[births_cnt])
max([dim_reg].[reg_h].Levels(1).Members,
[Measures].[births_cnt])
Нарастающий итог SUM(PeriodsToDate([dim_period].[period_h].DefaultMember, [dim_period].[period_h].CurrentMember), [Measures].[births_cnt])
2 лайка