let
Source = SharePoint.Tables("https://sup.com/", [ApiVersion = 15]),
MainList = Source{[Id="8c"]}[Items],
#"Удаленные столбцы2" = Table.RemoveColumns(MainList,{"Versions"}),
// --- Один раз загружаем справочник ---
SafetyQuestions = MyTasksIncidentsQuestions,
KeysList = List.Buffer(Table.Distinct(SafetyQuestions, {"Key"})[Key]),
// Парсим JSON и обрабатываем
ExpandJSON = Table.AddColumn(#"Удаленные столбцы2", "ParsedQuestions", each try Json.Document([Questions]) otherwise null),
ConvertToTable = Table.ExpandRecordColumn(ExpandJSON, "ParsedQuestions", KeysList),
#"Дублированный столбец" = Table.DuplicateColumn(ConvertToTable, "MIncEq", "MIncEq2"),
#"Дублированный столбец1" = Table.DuplicateColumn(#"Дублированный столбец", "MNEq", "MNEq2"),
// Раскрываем списки и записи
#"Развернуть MIncEq2" = Table.ExpandListColumn(#"Дублированный столбец1", "MIncEq2"),
#"Развернуть MNEq2" = Table.ExpandListColumn(#"Развернуть MIncEq2", "MNEq2"),
#"Развернутый элемент MIncEq2" = Table.ExpandRecordColumn(#"Развернуть MNEq2", "MIncEq2", {"SAP_MESSAGE", "SAP"}, {"SAP_MESSAGE (Инцидент)", "SAP (Инцидент)"}),
#"Развернутый элемент MNEq2" = Table.ExpandRecordColumn(#"Развернутый элемент MIncEq2", "MNEq2", {"SAP_MESSAGE", "SAP"}, {"SAP_MESSAGE (Несоответствие)", "SAP (Несоответствие)"}),
#"Развернутый элемент SAP MIncEq2" = Table.ExpandRecordColumn(#"Развернутый элемент MNEq2", "SAP (Инцидент)", {"SAP", "Title", "Manufacturer", "Model", "TypeEquipment"}, {"SAP (Инцидент)", "Название оборудования (Инцидент)", "Manufacturer (Инцидент)", "Model (Инцидент)", "TypeEquipment (Инцидент)"}),
#"Развернутый элемент SAP MNEq2" = Table.ExpandRecordColumn(#"Развернутый элемент SAP MIncEq2", "SAP (Несоответствие)", {"SAP", "Title", "Manufacturer", "Model", "TypeEquipment"}, {"SAP (Несоответствие)", "Название оборудования (Несоответствие)", "Manufacturer (Несоответствие)", "Model (Несоответствие)", "TypeEquipment (Несоответствие)"}),
// Функция извлечения 'name'
GetValue = (value as any) as any =>
if Value.Is(value, Record.Type) and Record.HasFields(value, {"name"}) then value[name]
else if Value.Is(value, List.Type) then
Text.Combine(
List.Transform(
List.Select(value, each Value.Is(_, Record.Type) and Record.HasFields(_, {"name"})),
each _[name]
),
"#(lf)"
)
else if value = null then ""
else Text.From(value, "ru-RU"),
ExtractNames = Table.TransformColumns(#"Развернутый элемент SAP MNEq2", List.Transform(KeysList, each {_, GetValue, Text.Type})),
#"Замененное значение" = Table.ReplaceValue(ExtractNames,null," ",Replacer.ReplaceValue,{"SAP_MESSAGE (Инцидент)", "SAP (Инцидент)", "Название оборудования (Инцидент)", "Manufacturer (Инцидент)", "Model (Инцидент)", "TypeEquipment (Инцидент)", "SAP_MESSAGE (Несоответствие)", "SAP (Несоответствие)", "Название оборудования (Несоответствие)", "Manufacturer (Несоответствие)", "Model (Несоответствие)", "TypeEquipment (Несоответствие)"}),
// Группируем вопросы по Key1 + Title
FilteredKeys = Table.SelectRows(SafetyQuestions, each List.Contains(KeysList, [Key])),
GroupedByTitle = Table.Group(FilteredKeys, {"Key1", "Title"}, {
{"ColumnsToMerge", each List.Transform(Table.Column(_, "Key"), Text.From)}
}),
AddMergedColumns = List.Accumulate(
Table.ToRows(GroupedByTitle),
#"Замененное значение",
(table, group) =>
let
Title = group{1},
Columns = group{2},
ExistingColumns = List.Intersect({Columns, Table.ColumnNames(table)}),
AddColumn = Table.AddColumn(table, Title,
each Text.Combine(
List.Transform(ExistingColumns, (col) =>
Text.From(Record.Field(_, col), "ru-RU")
),
"#(lf)"
),
Text.Type
),
RemoveOld = if List.Count(ExistingColumns) > 0 then Table.RemoveColumns(AddColumn, ExistingColumns) else AddColumn
in
RemoveOld
),
MergeValues = (column as list) as text =>
let
CleanedList = List.Transform(List.RemoveNulls(column), Text.From),
Result = Text.Combine(CleanedList, "#(lf)")
in
Result,
// Список столбцов для объединения
columnsToMerge = {
"SAP_MESSAGE (Несоответствие)",
"SAP (Несоответствие)",
"Название оборудования (Несоответствие)",
"Manufacturer (Несоответствие)",
"Model (Несоответствие)",
"TypeEquipment (Несоответствие)",
"SAP_MESSAGE (Инцидент)",
"SAP (Инцидент)",
"Название оборудования (Инцидент)",
"Manufacturer (Инцидент)",
"Model (Инцидент)",
"TypeEquipment (Инцидент)"
},
// Группируем по Id и объединяем значения
GroupByIncident = Table.Group(
AddMergedColumns,
{"Id"},
{
{"AllData", each Table.FirstN(_, 1), let schema = Table.Schema(AddMergedColumns) in Table.Type}
} & List.Transform(columnsToMerge, (col) => {col, each MergeValues(Table.Column(_, col)), Text.Type})
),
#"Удаленные столбцы1" = Table.RemoveColumns(GroupByIncident,{"Id"}),
// Список полей, которые НЕ нужно раскрывать из AllData
columnsToSkip = {
"SAP_MESSAGE (Несоответствие)",
"SAP (Несоответствие)",
"Название оборудования (Несоответствие)",
"Manufacturer (Несоответствие)",
"Model (Несоответствие)",
"TypeEquipment (Несоответствие)",
"SAP_MESSAGE (Инцидент)",
"SAP (Инцидент)",
"Название оборудования (Инцидент)",
"Manufacturer (Инцидент)",
"Model (Инцидент)",
"TypeEquipment (Инцидент)"
},
// Получаем список всех колонок из AddMergedColumns
allColumns = Table.ColumnNames(AddMergedColumns),
// Формируем список тех, что будем раскрывать из AllData
columnsToExpandFromAllData = List.Sort(List.Difference(allColumns, columnsToSkip)),
// Раскрываем только нужные поля из AllData
#"Развернутый элемент AllData" = Table.ExpandTableColumn(#"Удаленные столбцы1", "AllData", columnsToExpandFromAllData),
#"Добавлен пользовательский объект" = Table.AddColumn(#"Развернутый элемент AllData", "LocationDepartmentRegion", each Text.From([LocationId]) & "/" & Text.From([DepartmentId]) & "/" & Text.From([RegionId])),
#"Условный столбец добавлен" = Table.AddColumn(#"Добавлен пользовательский объект", "HashTag", each if Text.StartsWith([Title], "Несоответствие") then "#несоответствие_техобслуживание_" & Text.From([Id]) else [Id]),
#"Измененный тип" = Table.TransformColumnTypes(#"Условный столбец добавлен",{{"DateIncidents", type date}, {"DateIncidents2", type date}}),
#"Объединенные запросы" = Table.NestedJoin(#"Измененный тип", {"Id"}, MyTasks5Way, {"IncidentId"}, "MyTasks5Way", JoinKind.LeftOuter),
#"Развернутый элемент MyTasks5Way" = Table.ExpandTableColumn(#"Объединенные запросы", "MyTasks5Way", {"Id", "Type5Way", "Корневые причины"}, {"Id5Why", "Type5Way", "Корневые причины"})
in
#"Развернутый элемент MyTasks5Way" |