Вам нужен дополнительный столбец для определения позиции каждого ключа в столбце.
Добавьте столбец индекса в редакторе запросов:
//Table1
let
Source = MyTable,
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1)
in
#"Added Index"
Теперь вы можете создать следующеевычисляемый столбец:
cnt =
CALCULATE (
COUNTROWS ( Table1 ),
FILTER (
ALLEXCEPT ( Table1, Table1[Key] ),
Table1[Index] <= EARLIER ( Table1[Index] )
)
)
Рабочий пример файла PBIX: https://pwrbi.com/so_58260475/
РЕДАКТИРОВАТЬ:
Чтобы ответить на ваш запрос о низкой производительности с большими наборами данных: вы можете достичь того, что выхочу в редакторе запросов, а не в DAX, путем разбиения по элементу Key, индексации и последующей рекомбинации разделов:
let
Source = MyTable,
#"Added Index" = Table.AddIndexColumn(Source, "Index", 1, 1),
#"Partition Keys" = Table.Group(#"Added Index", {"Key"}, {{"Data", each Table.AddIndexColumn(Table.Sort(_, {"Index", Order.Ascending}),"cnt",1,1), type table}}),
#"Combine Partitions" = Table.Combine(#"Partition Keys"[Data])
in
#"Combine Partitions"
Этот тест выполняется довольно быстро, с 400 тыс. строк.