Функция/Атрибут | Комментарий | Пример |
---|---|---|
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])} |
Возвращает элемент предыдущего периода, расположенный в той же относительной позиции, что и заданный элемент. |
|
{[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()) |
Обозначения форматов для типа Дата-время:
|
|
|
|
DateSerial(year, month, day) |
DateSerial(2020,1,1) |
Дата для указанного года, месяца и дня |
DateAdd(interval, number, date) |
|
Дата-время после добавления к исходному значению указанного интервала времени (при number<0 выполняется вычитание). Где Interval задается согласно спецификации:
|
DateDiff('m',now(),dateserial(2022,1,1)) |
Где interval :
Interval , кроме года и дня, вычисляется разница между относительными значениями компонентов дат, а не абсолютными, т.е. для месяца разница между 01.05.2020 и 01.01.1970 будет равна 5-1 = 4. |
|
MonthName(month, abbreviate) |
MonthName(10, 1<0) |
Полное либо сокращенное наименование месяца по номеру, где:
|
WeekdayName(weekday, abbreviate, firstdayofweek) |
WeekdayName(7, 1<0, 2) |
Наименование дня недели, где:
|
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() |
|
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
|
min() |
|
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
|
aggregate () |
|
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
|
Строковые функции
Функция | Пример | Комментарий |
---|---|---|
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 |
|
|
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, далее указывать правило сортировки:
|
|
Получить максимум из набора кортежей | 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]) |