Внутренние две петли Флойда-Варшалла - это, по сути, матричное умножение с добавлением, замененным на min, и умножение заменяется на сложение. Вы можете делать умножение матрицы с помощью map-reduce, поэтому вы можете реализовать Floyd Warshall с | V | map-reduce.
На странице wikipedia на Floyd-Warshall:
1 let dist be a |V| × |V| array of minimum distances initialized to ∞ (infinity)
2 for each vertex v
3 dist[v][v] ← 0
4 for each edge (u,v)
5 dist[u][v] ← w(u,v) // the weight of the edge (u,v)
6 for k from 1 to |V|
7 for i from 1 to |V|
8 for j from 1 to |V|
9 if dist[i][j] > dist[i][k] + dist[k][j]
10 dist[i][j] ← dist[i][k] + dist[k][j]
11 end if
Внутренние две петли (i
и j
, строки с 7 по 11) структурно то же самое, что и матричное умножение, и вы можете адаптировать любое решение «матричное умножение на карте» для выполнения этого.
Внешний цикл (k
) становится | V | Карта-уменьшает.
Не жалуется, что их не существует. Однако похоже, что вы пытаетесь написать такую меру, как вы бы рассчитали столбец. В какой-то мере вам нужно указать метод агрегирования, так как у вас нет контекста фильтра строк, который вы используете с вычисленным столбцом.
Вероятно, вам нужна мера, которая выглядит примерно так:
Total = SUMX(PBI_Purch_View, PBI_Purch_View[Price] * PBI_Purch_View[Quantity])
Если вы хотите, чтобы Total
как вычисленный столбец, ваша формула будет работать нормально.