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


map() (функция graph)

Область применения: ✅Microsoft Fabric

Функция map() графа вычисляет выражение для каждого края или внутреннего узла вдоль пути переменной длины и возвращает динамический массив всех результатов.

Замечание

Эта функция используется с операторами graph-match и graph-shortest-paths.

Синтаксис

map(*edge*, *expression*)'

map(inner_nodes( край),выражение)

Параметры

Имя Тип Обязательно Описание
край string ✔️ Ребра переменной длины из оператора graph-match или шаблона оператора graph-shortest-paths . Дополнительные сведения см. в нотации шаблонов Graph.
выражение string ✔️ Вычисление для выполнения по свойствам пограничного или внутреннего узла при использовании inner_nodes в краю переменной длины. Свойство ссылается непосредственно с помощью имени свойства. Выражение вычисляется для каждого края или внутреннего узла в краю переменной длины.

Возвраты

Динамический массив, в котором:

  • Длина массива соответствует количеству ребер или внутренних узлов при использовании inner_nodes в краю переменной длины.
  • Массив пуст для путей нулевой длины.
  • Каждый элемент в массиве соответствует результатам применения выражения к каждому краю или внутреннему узлу в краю переменной длины.

Примеры

В примерах этого раздела показано, как использовать синтаксис для начала работы.

Поиск станции и линии для кратчайшего маршрута между двумя станциями

В следующем примере показано, как использовать graph-shortest-paths оператор для поиска кратчайшего пути между "South-West" станциями и "North" станциями в транспортной сети. Он добавляет сведения о строке map() в путь с помощью функции. Запрос создает граф из данных, учитывая пути до пяти подключений connections .

let connections = datatable(from_station:string, to_station:string, line:string) 
[ 
  "Central", "North", "red",
  "North", "Central", "red", 
  "Central", "South",  "red", 
  "South", "Central",  "red", 
  "South", "South-West", "red", 
  "South-West", "South", "red", 
  "South-West", "West", "red", 
  "West", "South-West", "red", 
  "Central", "East", "blue", 
  "East", "Central", "blue", 
  "Central", "West", "blue",
  "West", "Central", "blue",
]; 
connections 
| make-graph from_station --> to_station with_node_id=station
| graph-shortest-paths (start)-[connections*1..5]->(destination)
  where start.station == "South-West" and destination.station == "North"
  project from = start.station, path = map(connections, strcat(to_station, " (", line, ")")), to = destination.station

Выходные данные

от / из / с (context-dependent) путь Кому
Юго-Западный регион [
"Южная (красная)",
"Центральная (красная)",
"Север (красный)"
]
Север

Получение списка остановок с Wi-Fi во всех маршрутах между двумя станциями

В следующем примере показано, как использовать graph-match оператор с функциями для all() поиска всех остановок с inner_nodes Wi-Fi вдоль всех маршрутов между двумя станциями в транспортной сети.

let connections = datatable(from_station:string, to_station:string, line:string) 
[ 
  "Central", "North", "red",
  "North", "Central", "red", 
  "Central", "South",  "red", 
  "South", "Central",  "red", 
  "South", "South-West", "red", 
  "South-West", "South", "red", 
  "South-West", "West", "red", 
  "West", "South-West", "red", 
  "Central", "East", "blue", 
  "East", "Central", "blue", 
  "Central", "West", "blue",
  "West", "Central", "blue",
]; 
let stations = datatable(station:string, wifi:bool) 
[ 
  "Central", true,
  "North", false,
  "South", false,
  "South-West", true,
  "West", true,
  "East", false
];
connections 
| make-graph from_station --> to_station with stations on station
| graph-match cycles=none (start)-[connections*1..5]->(destination)
  where start.station == "South-West" and destination.station == "East"
  project stopovers = strcat_array(map(inner_nodes(connections), station), "->"),
          stopovers_with_wifi = set_intersect(map(inner_nodes(connections), station), map(inner_nodes(connections), iff(wifi, station, "")))

Выходные данные

Остановки stopovers_with_wifi
Западная часть> [ "Запад", "Центральная"]
Южная центральная> часть [ "Центральная"]