Поделиться через


ROWNUMBER

применяется:вычисляемый столбецвычисляемой таблицыизмерениевизуального вычисления

Возвращает уникальное ранжирование текущего контекста в указанной секции, отсортированного по указанному порядку. Если совпадение не удается найти, строка пуста.

Синтаксис

ROWNUMBER ( [<relation> or <axis>][, <orderBy>][, <blanks>][, <partitionBy>][, <matchBy>][, <reset>] )

Параметры

Термин Определение
relation (Необязательно) Табличное выражение, из которого возвращается выходная строка.
Если указано, все столбцы в orderBy и partitionBy должны поступать из него.
Если опущено:
- orderBy необходимо явно указать.
— все столбцы orderBy и partitionBy должны быть полностью квалифицированы и получены из одной таблицы.
— по умолчанию ALLSELECTED() всех столбцов в orderBy и partitionBy.
axis (Необязательно) Ось в визуальной форме. Доступно только в визуальных вычислениях и заменяет relation.
orderBy (Необязательно) Предложение ORDERBY(), содержащее столбцы, определяющие порядок сортировки каждой секции.
Если опущено:
- relation необходимо явно указать.
— по умолчанию упорядочивается по каждому столбцу в relation, который еще не указан в partitionBy.
blanks (Необязательно) Перечисление, определяющее, как обрабатывать пустые значения при сортировке relation или axis.
Поддерживаемые значения:
  • DEFAULT (значение по умолчанию), где поведение числовых значений является пустыми значениями, упорядочены от нуля до отрицательных значений. Поведение строк является пустым значением, упорядоченным перед всеми строками, включая пустые строки.
  • FIRST, пустые поля всегда упорядочены в начале независимо от возрастания или убывающего порядка сортировки.
  • LAST, пустые всегда упорядочены в конце независимо от возрастания или убывания сортировки.

Примечание. Если параметр blanks и пустые значения в функции ORDERBY() для отдельных выражений указываются, blanks для отдельного выражения orderBy имеет приоритет для соответствующего выражения orderBy, а выражения orderBy без blanks заданы будут учитывать параметр blanks родительской функции.
partitionBy (Необязательно) Предложение PARTITIONBY(), содержащее столбцы, определяющие секционирование relation. Если опущено, relation рассматривается как одна секция.
matchBy (Необязательно) Предложение MATCHBY(), содержащее столбцы, определяющие сопоставление данных и определение текущей строки.
reset (Необязательно) Доступно только в визуальных вычислениях. Указывает, сбрасывается ли вычисление и на каком уровне иерархии столбцов визуальной фигуры. Допустимые значения: ссылка на поле столбца в текущей визуальной форме, NONE (по умолчанию), LOWESTPARENT, HIGHESTPARENTили целое число. Поведение зависит от целочисленного знака:
— если нулевая или опущенная, вычисление не сбрасывается. Эквивалентно NONE.
— если положительный, целое число определяет столбец, начиная с самого высокого, независимо от зерна. HIGHESTPARENT эквивалентно 1.
— если отрицательно, целое число определяет столбец, начиная с самого низкого, относительно текущего зерна. LOWESTPARENT эквивалентно -1.

Возвращаемое значение

Номер строки для текущего контекста.

Замечания

Каждый столбец orderBy, partitionByи matchBy должен иметь соответствующее внешнее значение, чтобы помочь определить текущую строку, с помощью следующего поведения:

  • Если есть ровно один соответствующий внешний столбец, используется его значение.
  • Если соответствующий внешний столбец отсутствует, то:
    • ROWNUMBER сначала определит все orderBy, partitionByи matchBy столбцы, не имеющие соответствующего внешнего столбца.
    • Для каждого сочетания существующих значений для этих столбцов в родительском контексте ROWNUMBER вычисляется ROWNUMBER и возвращается строка.
    • ROWNUMBERконечные выходные данные являются объединением этих строк.
  • Если существует несколько соответствующих внешних столбцов, возвращается ошибка.

Если matchBy присутствует, ROWNUMBER попытается использовать столбцы в matchBy и partitionBy для idenfity текущей строки. Если столбцы, указанные в orderBy и partitionBy, не могут однозначно идентифицировать каждую строку в relation, то:

  • ROWNUMBER попытается найти наименьшее количество дополнительных столбцов, необходимых для уникальной идентификации каждой строки.
  • Если такие столбцы можно найти, ROWNUMBER
    • Попробуйте найти минимальное количество дополнительных столбцов, необходимых для уникальной идентификации каждой строки.
    • Автоматически добавляйте эти новые столбцы в предложение orderBy.
    • Сортируйте каждую секцию с помощью этого нового набора столбцов orderBy.
  • Если такие столбцы не удается найти и функция обнаруживает связь во время выполнения, возвращается ошибка.

reset можно использовать только в визуальных вычислениях и не может использоваться в сочетании с orderBy или partitionBy. Если reset присутствует, axis можно указать, но relation невозможно.

Пример 1— вычисляемый столбец

Следующий запрос DAX:

EVALUATE
ADDCOLUMNS(
    'DimGeography',
    "UniqueRank",
    ROWNUMBER(
    	'DimGeography',
    	ORDERBY(
    		'DimGeography'[StateProvinceName], desc,
    		'DimGeography'[City], asc),
    	PARTITIONBY(
    		'DimGeography'[EnglishCountryRegionName])))
ORDER BY [EnglishCountryRegionName] asc, [StateProvinceName] desc, [City] asc

Возвращает таблицу, которая однозначно ранжирует каждую географию с одинаковым значением EnglishCountryRegionName, по состоянию StateProvinceName и City.

Пример 2. Визуальное вычисление

Следующие визуальные вычисления DAX запросах:

SalesRankWithinYear = ROWNUMBER(ORDERBY([SalesAmount], DESC), PARTITIONBY([CalendarYear]))

SalesRankAllHistory = ROWNUMBER(ORDERBY([SalesAmount], DESC))

Создайте два столбца, которые однозначно ранжировать каждый месяц по общему объему продаж, как в течение каждого года, так и всей истории.

Снимок экрана ниже: визуальная матрица и первое выражение визуального вычисления:

DAX визуального вычисления

INDEX ORDERBY PARTITIONBY WINDOW RANK