Функции для получения значения свойств элементов
| Функция/Атрибут | Комментарий | Пример |
|---|---|---|
| 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 | Атрибут (Properties) элемента, имеющий одно из значений: 1 - Листовой элемент; 2 - Элемент уровня Все; 3 - Мера; 4 - Расчетный элемент |
Атрибут текущего элемента иерархии периодов: [dim_period].[period_h].CurrentMember.Properties("MEMBER_TYPE") |
| Ordinal | Возвращает начинающееся с нуля порядковое значение, связанное с уровнем. | [dim_period].[period_h].CurrentMember.level.OrdinalЕсли настроена натуральная иерархия периодов Год-Месяц-День, то для элементов уровня Год значение = 1, для элементов уровня День = 3. |
Функции элементов
| Группа | Пример | Комментарий | Альтернатива | |
|---|---|---|---|---|
| Элемент | Адресация | {[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 |
| ABS() | ABS([Measures].[value]) |
Возвращает абсолютное значение числового выражения, убирая отрицательный знак, если он есть |
Агрегирующие функции
| Функция | Пример | Комментарий |
|---|---|---|
max() |
|
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
|
min() |
|
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
|
aggregate() |
|
С версии 5.3 помимо числовых поддерживаются аргументы типа Datetime и String, т.е. в качестве второго аргумента может быть любое выражение типа Datetime / String, в том числе мера, значение атрибута элемента иерархии, константа:
|
SUM() |
|
Возвращает сумму значений указанного множества |
MEDIAN() |
|
Функция MEDIAN принимает набор значений (например, результат запроса) и возвращает медиану этих значений. Она работает следующим образом:
|
AVG() |
|
Возвращает среднее арифметическое значение |
COUNT() |
|
Возвращает количество элементов в указанном множестве |
Статистические функции
| Функция | Пример | Комментарий |
|---|---|---|
STDDEV() |
STDDEV([dim1].[hier1].CurrentMember.Children,[Measures].[value]) |
Вычисляется стандартное отклонение (по выборке) |
STDDEVP() |
STDDEVP([dim1].[hier1].CurrentMember.Children,[Measures].[value]) |
Вычисляется стандартное отклонение (по генеральной совокупности) |
VAR() |
VAR([dim1].[hier1].CurrentMember.Children,[Measures].[value]) |
Вычисляется дисперсия (по выборке) |
VARP() |
VARP([dim1].[hier1].CurrentMember.Children,[Measures].[value]) |
Вычисляется дисперсия (по генеральной совокупности) |
CORRELATION() |
Correlation([dim1].[hier1].Members, [Measures].[count_f], [Measures].[sum_f]) |
Используется для вычисления коэффициента корреляции между двумя наборами значений, показывает, насколько тесно связаны два набора данных. CORRELATION(Set_Expression, Numeric_Expression_Y, Numeric_Expression_X), где Set_Expression - набор элементов, Numeric_Expression_Y - выражение для первого набора числовых значений; Numeric_Expression_X - выражение для второго набора числовых значений. Коэффициент корреляции принимает значения от -1 до 1 |
COVARIANCE() |
COVARIANCE([dim1].[hier1]].Members, [Measures].[count_f], [Measures].[sum_f]) |
Используется для вычисления ковариации между двумя наборами числовых значений. Ковариация измеряет, насколько два показателя изменяются вместе. Если они тенденциозно растут или падают одновременно, ковариация будет положительной; если один показатель растет, а другой падает, ковариация будет отрицательной. |
CovarianceN() |
CovarianceN([dim1].[hier1].Members, [Measures].[count_f], [Measures].[sum_f]) |
Вычисляется ковариация, исключая пустые значения (null) из расчета |
LinRegIntercept() |
LinRegIntercept([dim1].[hier1].Members, [Measures].[count_f], [Measures].[sum_f]) |
Используется для вычисления точки пересечения (intercept) линии регрессии с осью Y. Это значение показывает, где линия регрессии пересекает вертикальную ось (Y), когда независимая переменная (X) равна нулю. |
Строковые функции
| Функция | Пример | Комментарий |
|---|---|---|
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) |
Варианты:BOOLEANNUMERICDECIMALSTRING |
| 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]) |