前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >List.Generate强大到看不懂?三个案例从简单到高级练起来!

List.Generate强大到看不懂?三个案例从简单到高级练起来!

作者头像
大海Power
发布2021-08-31 11:36:25
7060
发布2021-08-31 11:36:25
举报
文章被收录于专栏:用户8950297的专栏

- 难题 -

通过Power Query生成数据表,一共两列,要求及示例如下:

1、NR列:第1行为1,后每行比上行递增1..7的随机整数

2、NUM列:1..1000之间随机整数

3、生成的行数可按需要输入

- 解法 -

核心就一个函数:List.Generate

代码语言:javascript
复制
let
    n = 10,
    源 = Table.FromRecords(
        List.Generate(
            ()=>[i=1,NR=1,NUM=Number.RoundDown(Number.RandomBetween(1,1000))],
            each [i]<=n,
            each [i=[i]+1,
                NR=[NR]+Number.RoundDown(Number.RandomBetween(1,7)),
                NUM=Number.RoundDown(Number.RandomBetween(1,1000))],
            each [[NR],[NUM]]
        )
    )
in
    源

- 这个函数很强大 -

- 这个函数很复杂 -

- 这个函数记不住 -

- 但是 -

- 我们可以这样看 -

List.Generate有4个参数,虽然每个参数都是一个函数!但是,这4个函数有很明确的分工:

1、确定起点,即要生成列表的第1个值;

2、设定生成序列的终止条件;

3、下一个值的生成规则/结果;

4、转换成最终输出结果(如果直接用参数3的结果,可以省略)

- 再来2个帮助文档示例 -

- 示例1 -

代码语言:javascript
复制
List.Generate(
    ()=>0,
    each _<10,
    each _+1
)

简单解析:

1、从0开始

2、只要得到的结果小于10

3、那就加1作为结果并直接输出(省略第4个参数)

输出结果:{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }

- 示例2 -

代码语言:javascript
复制
List.Generate(
  ()=>[A=1,B=1],
  each [A]<5,
  each [A=[A]+1,B=[B]+1],
  each [A]+[B]
)

简单解析:

1、给定记录[A=1,B=1]

2、如果得到的结果中A小于5

3、那就A+1,B+1;重点:可以用[A]或[B]引用上一结果中的值

4、按需要调整输出结果为A+B;重点:可以通过[A]或[B]引用到每一个结果的值

输出结果:{ 2, 4, 6, 8 }

- 总结一下 -

List.Generate其实就是一个循环语句,相对复杂的情况下,可以以记录(Record)的方式作为列表的值,因为记录对每个值有明确的字段名称(类似于在循环中定义变量),方便后续的引用和控制。

同时,我突然想,这个其实跟玩游戏的过程很像:

如果你暂时没有能用上这个函数,那也不妨先通过这种方式把这个的几个参数先记住,然后再对上面几个例子动手写几次,很快就会得心应手了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-06-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Excel到PowerBI 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档