美文网首页PowerQuery
【实例】一个获取随机记录的PowerQuery实例优化

【实例】一个获取随机记录的PowerQuery实例优化

作者: PowerQuery | 来源:发表于2017-03-24 15:03 被阅读164次

    【2017年3月29日优化】
    之前留下一个尾巴:如何自动获取表头。我在原文中使用了比较笨的办法。今天看到一篇帖子,提到了可以用Table.FromList()函数来单独构造行和表头。于是将原来的代码优化如下:

     let
       源 = Excel.CurrentWorkbook(){[Name="factTbl"]}[Content],
       更改的类型 = Table.TransformColumnTypes(源,{{"Year", type text}, {"Income", type text}, {"ID", type text}}),
       转换为随机list = List.Range(Table.ToList(更改的类型),Number.RoundDown(Number.RandomBetween(0,Table.RowCount(更改的类型))),Number.RoundDown(Number.RandomBetween(0,Table.RowCount(更改的类型)))),
       转换为表 = Table.FromList(转换为随机list, Splitter.SplitTextByDelimiter(","), Table.ColumnNames(更改的类型), null, ExtraValues.Error),
       更改的类型1 = Table.TransformColumnTypes(转换为表,{{"ID", Int64.Type}, {"Month", type text}, {"Year", Int64.Type}, {"Income", type number}, {"Chanel", type text}, {"Goes To", type text}, {"Social", type text}})
     in
       更改的类型1
    

    【以下是原文】
    无意中读到这篇帖子,作者介绍了一种通过筛选列来获取一个表中的随机记录的方法。

    但是这个方法并没有完全做到随机,比如每次刷新后,都是获取的四个“Goes To”列中的值的记录:


    单一值随机

    而我想要的是这个表里的记录完全随机。也就是每次刷新,随机显示这1000行数据,有可能一次显示1行,也有可能一次显示100行,还有可能显示999行,而且顺序也是完全随机的。
    以下是实现方法:

    let
    源 = Excel.CurrentWorkbook(){[Name="factTbl"]}[Content],
    更改的类型 = Table.TransformColumnTypes(源,{{"Year", type text}, {"Income", type text}, {"ID", type text}}),
    转换为随机list = List.Range(Table.ToList(更改的类型),Number.RoundDown(Number.RandomBetween(0,Table.RowCount(更改的类型))),Number.RoundDown(Number.RandomBetween(0,Table.RowCount(更改的类型)))),
    转换为表 = Table.FromList(转换为随机list, Splitter.SplitTextByDelimiter(","), null, null, ExtraValues.Error),
    降级原始标题行 = Table.DemoteHeaders(更改的类型),
    获取新表的标题 = Table.FirstN(降级原始标题行,1),
    追加的查询 = Table.Combine({获取新表的标题, 转换为表}),
    提升的标题 = Table.PromoteHeaders(追加的查询, [PromoteAllScalars=true])
    in
    提升的标题
    

    遇到的最大难题是怎么恢复原来的表头,我用了比较笨的办法。想要找一个更优雅的方式,没有成功。

    这里是原始数据:http://pan.baidu.com/s/1pLptcON

    相关文章

      网友评论

        本文标题:【实例】一个获取随机记录的PowerQuery实例优化

        本文链接:https://www.haomeiwen.com/subject/smlfottx.html