#excel #powerquery #m
Вопрос:
Я новичок в Power Query и прочитал достаточно материала, чтобы запустить параметризованный запрос и запустить его.
В Excel на вкладке с именем Параметры у меня есть диапазон с именем «myParams», который охватывает A1:B4. Он состоит из 2 столбцов, где A1 = «Имя параметра» и B1 = «Значение».
A B
1 Parameter Name Value
2 User ID 12345
3 Other Thing foo
4 More Things bar
Мой запрос выглядит примерно так, что отлично работает:
let
myParamTable = Excel.CurrentWorkbook(){[Name="myParams"]}[Content],
pUserID = Record.Field(myParamTable{0}, "Value"),
Source = Sql.Database("myservername", "mydatabase"),
GoQuery = Value.NativeQuery(Source,
"
SELECT * FROM myTable WHERE UserIdField = @UserID",
[UserID = pUserID]
)
in
GoQuery
Если я понимаю, как это работает, pUserID присваивается значение в позиции 0 в столбце с именем «Значение», поскольку подсчет индексов начинается с 0.
Как я могу получить значение по имени «Идентификатор пользователя» в столбце А? Я представляю, что это что-то близкое к
pUserID = Record.Field(myParamTable{"User ID"}, "Value"),
Я хотел бы использовать имена параметров вместо значения индекса, так как значение индекса может измениться в будущем, если в диапазон «myParams» будет добавлено новое поле.
Спасибо!
Ответ №1:
Есть много способов. Вот один из них, использующий Lists
let
myParamTable = Excel.CurrentWorkbook(){[Name="myParams"]}[Content],
fieldList = myParamTable[#"Parameter Name"],
valueList = myParamTable[Value],
pUserID = valueList{List.PositionOf(fieldList,"User ID")}
in
pUserID
Ответ №2:
Вы можете ссылаться на строки по имени параметра, а не по номеру индекса, как это.
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"User ID" = Source{[#"Parameter Name"="User ID"]}[Value]
in
#"User ID"
В блоге Криса Уэбба есть хороший пост на эту тему