如何在 PQ 中将左边箭头所指的这三个值去掉 (或者说,有没有办法将向下填充进行反操作)

Power Query dhuang ⋅ 于 2018-12-17 13:45:48 ⋅ 最后回复由 飞天篮球 2018-12-21 21:50:11 ⋅ 2997 阅读

file
如何将上图“收入”列中的圈点的这三个数值去掉?
这三个值合并查询后多出来的。合并之前只有一个,在左边数据与右边的数据合并后各变成了二个。

成为第一个点赞的人吧 :bowtie:
回复数量: 9
  • 静静
    2018-12-17 15:56:23

    添加索引列=Table.AddIndexColumn(源, "索引". 0, 1)
    转换列=Table.TransformColumns(添加索引列, {"索引", each try if 源[客户]{}=源[客户]{-1} then null else 源[收入]{_} otherwise 源[收入]{0}})
    最后删除列,重命名列,重排序列,即可.

  • 飞天篮球 Talk is cheap, show me your code.
    2018-12-17 16:01:48

    fyi...

    1、向下填充的逆过程可以参考pqfans文章:https://pqfans.com/1682.html

    2、也可以试试这个。在得到表的那一步的基础上,添加一步,并把以下公式中的“表”字变成那一步的“步骤名"

          = Table.FromColumns(
                               List.ReplaceRange( Table.ToColumns(表),2,1,       //此处可以把收入对应的索引值2做成动态的List.PositionOf(Table.ColumnNames(表),"收入")
                                                  { List.Accumulate( 表[收入],    //深化出收入这一列,用acc实现filldown的反操作
                                                                     {{},""},
                                                                     (s,c)=>if   c=s{1} 
                                                                            then {s{0}&{null},c} 
                                                                            else {s{0}&{c},c} ) {0} } )
                               ,Table.ColumnNames(表) )
    
  • 老河 Excel爱好者
    2018-12-18 16:15:35

    感觉还是加索引的方法好一些,如果 客户 不是两个两个成对出现,迭代的方法就会出错

  • dhuang
    2018-12-18 19:00:10

    二位提供的解法还是没搞出来,仍在测试中。
    不过,施神的倒是很快有结果了;因为我这数据是6列,施神展示的数据是2列,中途在Table.ColumnNames(源)环节吃了一会螺丝,不过后面发现了问题所在。

  • 飞天篮球 Talk is cheap, show me your code.
    2018-12-18 22:21:24

    @老河 把迭代出错的晒出来瞅瞅!!

  • 老河 Excel爱好者
    2018-12-21 17:30:36

    file

  • 老河 Excel爱好者
    2018-12-21 17:30:56
  • 老河 Excel爱好者
    2018-12-21 17:32:02

    其中收入全部为719且客户不是成对出现,就全部为空了

  • 飞天篮球 Talk is cheap, show me your code.
    2018-12-21 21:50:11

    @老河

    哈哈,知道了,没整到位。谢谢指正!!试试这个吧,请斧正。

    先把整个表Table.ToRecords,然后根据客户和收入为判断条件进行迭代。

    变 = List.Accumulate( Table.ToRecords(源),
                              { {},"","" },
                              (s,c)=> if   s{1}=c[客户] and s{2}=c[收入] 
                                      then { s{0}&{c&[客户=c[客户],收入=null]},c[客户],c[收入] } 
                                      else { s{0}&{c&[客户=c[客户],收入=c[收入]]},c[客户],c[收入] } ) {0},
    果 = Table.FromRecords(变)
    
暂无评论~~
  • 请务必阅读并严格遵守《社区管理规范与使用说明》
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 发送表情,可用的 Emoji 见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板粘贴上传, 格式限制 - jpg, png, gif
  • 不支持上传附件,请尽可能用文字和图片将问题描述清楚,如实在需要上传附件,可上传到 共享网盘 后分享链接
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter