List.Generate 用于动态生成列表。它通过用户定义的初始值、条件和迭代逻辑创建列表,支持从简单数字序列到复杂数据结构的生成。其主要特性包括:
-
动态生成:根据函数逻辑生成任意类型的列表(数字、文本、记录等)。 -
迭代支持:类似编程中的循环,适合处理依赖前值的计算。 -
灵活转换:通过可选参数,可在生成时转换列表元素。
List.Generate语法
List.Generate(
initial,
condition,
next,
selector
)
initial:起始值,例如 () => 1。
List.Generate工作流程
List.Generate常用场景
List.Generate(() => 1, each _ < 7, each _ + 1)
初始值1,后面每个值增加1,直到不满足条件<7时结束。
结果:{1, 2, 3, 4, 5, 6}
List.Generate(() => 6, each _ > 0, each _ – 1)
结果:{6, 5, 4, 3, 2, 1}
3. 奇数序列
List.Generate(() => 1, each _ < 12, each _ + 2)
结果:{1, 3, 5, 7, 9,11}
List.Generate(() => 1, each _ < 50, each _ * 2)
结果:{1, 2, 4, 8, 16, 32}
5. 斐波那契数列
斐波那契数列中,每个数字是前两个数字之和。以下代码生成小于30的斐波那契数列:

List.Generate(
() => [x = 0, y = 1],
each [x] + [y] < 30,
each [y = [x] + [y], x = [y]],
each [x] + [y]
)
解释:
-
初始值:记录 [x = 0, y = 1]。 -
条件:x + y < 30。 -
下一步:更新 y = x + y,x 为旧的 y。 -
返回: x + y。
6. 生成阶乘序列
生成从1到7的阶乘数:
List.Generate(
() => [x = 2, y = 1],
each [x] <= 8,
each [x = [x] + 1, y = Number.Factorial([x])],
each [y]
)
List.Generate(
() => #date(2025, 1, 1),
each Date.Year(_) < 2026,
each Date.AddMonths(_, 1),
each Date.MonthName(_,”zh-cn”)
)
结果:{“一月”, “二月”, …, “12月”}
List.Generate是 PowerQuery 中一个功能强大且灵活的函数,也是一个非常实用的工具,掌握这个函数,能够帮助我们根据特定的逻辑生成各种列表,更高效地完成数据转换的多种场景,提升工作效率。