在抓取京东的螺丝刀页面的商品信息,便于后续筛选价格。
已经通过PQ 整理成如上样子,但现在如果直接建立索引列的话,会发现每一个商品信息的字段可能是6行、7行、8行……每个信息段的首行都是以¥开始的,但其中字段信息不确定在有的会增几行描述为“电动螺丝刀”、“工具”……这就导致根据递增索引去建立取模序列再做 透视列的方案行不通,因为并不是每一行都是固定的一个序列差。
想请教这种情况该怎么进一步数据清晰整理呢?谢谢!
在抓取京东的螺丝刀页面的商品信息,便于后续筛选价格。
已经通过PQ 整理成如上样子,但现在如果直接建立索引列的话,会发现每一个商品信息的字段可能是6行、7行、8行……每个信息段的首行都是以¥开始的,但其中字段信息不确定在有的会增几行描述为“电动螺丝刀”、“工具”……这就导致根据递增索引去建立取模序列再做 透视列的方案行不通,因为并不是每一行都是固定的一个序列差。
想请教这种情况该怎么进一步数据清晰整理呢?谢谢!
fyi...新建一个空白查询,点高级编辑器,清空,然后复制粘贴以下内容,看一下运行结果是不是你想要的动态扩展列。
let
// 模拟一个带有tablecolumn的数据源表
src = #table( {"seq","tbl"}, { {1,#table(1,{{1}})},
{2,#table(2,{{1..2}})},
{3,#table(3,{{1..3}})},
{4,#table(4,{{1..4}})},
{5,#table(5,{{1..5}})} } ),
// List.Union这部分表示动态最大列数
expnd = Table.ExpandTableColumn( src,
"tbl",
List.Union(
List.Transform(src[tbl],Table.ColumnNames)
)
)
in
expnd
需求应该就是个 Table.Group
局部分组吧,参考 https://pbihub.cn/blog/123 。
@Alex 是的,现在感受非常深刻,如果每一组数据的字段数量完全一致,则可以使用建立索引列/取模列,来完成透视表的方式;如果每一组的数据字段数量不完全一致,则可以先用 table.group 将同一个系列下的若干字段压到一个table里去,然后对这一新列的每个table,再做一次转置 table.transpose,再展开每一列,就可以获得想要的排版。
这里还要提醒的是,展开列的时候,如果是手动操作,会导致展开的column数量是跟随第一个table里的量,而如果后面的table里的column数量更多,那么PQ的公式语句里就会丢掉后面的columns,我目前的办法是先数出最多的column数量,比如是COLUMN8,那么对整列里每个table都expand时按8个列去写列名,这样如果多的列没有内容就是null,后续再合并列处理,否则直接展开就会丢掉一些列。
——就这个问题有么有更自动的办法呢?
fyi...新建一个空白查询,点高级编辑器,清空,然后复制粘贴以下内容,看一下运行结果是不是你想要的动态扩展列。
let
// 模拟一个带有tablecolumn的数据源表
src = #table( {"seq","tbl"}, { {1,#table(1,{{1}})},
{2,#table(2,{{1..2}})},
{3,#table(3,{{1..3}})},
{4,#table(4,{{1..4}})},
{5,#table(5,{{1..5}})} } ),
// List.Union这部分表示动态最大列数
expnd = Table.ExpandTableColumn( src,
"tbl",
List.Union(
List.Transform(src[tbl],Table.ColumnNames)
)
)
in
expnd
取字段,合并,去重