永洪社区

标题: 急!!如何将一行变成多行,单行里有多个值,如何转多行 [打印本页]

作者: 凉月    时间: 2023-3-10 09:39
标题: 急!!如何将一行变成多行,单行里有多个值,如何转多行
一列的每个单元格内都有多个名称,需要统计每个名称出现的次数。目前想法是先转换为多行,每行一个名称,再进行count统计。
或者有其他的方法实现需求也可以。拜谢各位!!

样例数据:
名称
腾讯,爱奇艺,优酷,B站,芒果TV
爱奇艺,优酷,B站


希望得到的数据
名称 转换后
腾讯,爱奇艺,优酷,B站,芒果TV 腾讯
腾讯,爱奇艺,优酷,B站,芒果TV 爱奇艺
腾讯,爱奇艺,优酷,B站,芒果TV 优酷
腾讯,爱奇艺,优酷,B站,芒果TV B站
腾讯,爱奇艺,优酷,B站,芒果TV 芒果TV
爱奇艺,优酷,B站 爱奇艺
爱奇艺,优酷,B站 优酷
爱奇艺,优酷,B站 B站





作者: DX188    时间: 2023-3-10 09:39
给你提供一点思路,我只针对单个单元格写了点脚本,没有对全局进行思考,会有所欠考虑。仅供参考
脚本:
var data=getViewData("自由表填报1")
var a=data.get(0,0)
var c=a.toString()
var d=len(c)-len(substitute(c,",","",0))
for(var i=0;i<=d;i++){
data.set(i,2,c.split(",")[i)
data.set(i,1,rept(c,d+1))
}


结果:



作者: yhdata_ruby    时间: 2023-3-10 09:57
自服务数据集的透视表可以参考一下,值列的类型可以选择计数看看https://www.yonghongtech.com/rea ... F%E8%A7%86%E8%A1%A8
作者: 凉月    时间: 2023-3-10 10:22
感谢回复,这个试了下,这个功能貌似是可以进行行列转换,但是对于一行转多行实现不了。我的多个数据都在一个单元格里。这个拆不出来。
作者: yhdata_lyaa    时间: 2023-3-10 10:27
试试拆分列呢https://www.yonghongtech.com/rea ... 6%E5%88%86%E5%88%97
作者: yhdata_ruby    时间: 2023-3-10 10:29
凉月 发表于 2023-3-10 10:22
感谢回复,这个试了下,这个功能貌似是可以进行行列转换,但是对于一行转多行实现不了。我的多个数据都在一 ...

可以参考拆分列看看,分隔符选择逗号https://www.yonghongtech.com/rea ... 6%E5%88%86%E5%88%97
作者: 凉月    时间: 2023-3-10 10:48
yhdata_ruby 发表于 2023-3-10 10:29
可以参考拆分列看看,分隔符选择逗号https://www.yonghongtech.com/real-help/Z-Suite/10.0/ch/query_spl ...

拆分列之后,会变成很多列了,面临着 1、因为每个单元格里的数据都不一样,也不知道具体会有多少,十几二十个都有可能,最后会拆成十几二十列。  2、 拆成列之后怎么再对这二十几列进行统计。比如求“腾讯”在这二十几列出现的次数?   
作者: yhdata_ruby    时间: 2023-3-10 10:56
凉月 发表于 2023-3-10 10:48
拆分列之后,会变成很多列了,面临着 1、因为每个单元格里的数据都不一样,也不知道具体会有多少,十几二 ...

拆分之后再使用自服务数据集做逆透视表的操作可以合并,然后可以在制作报告界面使用计算列使用fixed 去计数
作者: yhdata_4U7rABUe    时间: 2023-3-10 11:30
也不知道这是不是你要实现的需求,但这种写法需要每一行不能有重复的字符串片段

作者: 凉月    时间: 2023-3-10 14:10
yhdata_ruby 发表于 2023-3-10 10:56
拆分之后再使用自服务数据集做逆透视表的操作可以合并,然后可以在制作报告界面使用计算列使用fixed 去计 ...

厉害,厉害,这个能实现!! 还想问下有不在数据集服务里操作,直接用新建字段的方法实现吗?  
作者: 凉月    时间: 2023-3-10 14:12
yhdata_4U7rABUe 发表于 2023-3-10 11:30
也不知道这是不是你要实现的需求,但这种写法需要每一行不能有重复的字符串片段
...

谢谢回答!这个如果数据名称少的话,可以实现。但是我有几千个名称,做不到每个都新建个字段。
作者: yhdata_ruby    时间: 2023-3-10 14:17
凉月 发表于 2023-3-10 14:10
厉害,厉害,这个能实现!! 还想问下有不在数据集服务里操作,直接用新建字段的方法实现吗?   ...

是指哪一步不在数据集而在制作界面操作呀
作者: 凉月    时间: 2023-3-10 14:41
yhdata_ruby 发表于 2023-3-10 14:17
是指哪一步不在数据集而在制作界面操作呀

按这个方法在数据集服务里要 先拆分,然后用逆透视表。  有没有可能直接不走这两步,直接在制作界面新建字段界面实现。


主要是我看了在mysql 里实现的方法,我想套用这个方法,但是没有substring_index 这个函数,卡在这了,想知道有没有其他替代的函数?


mysql 实现方式:

SELECT a.*,b.*
        substring_index( substring_index( a.rn, ',', b.help_topic_id + 1 ), ',',- 1 ) AS rn
FROM
        sheet1 a
        LEFT JOIN mysql.help_topic b ON (
        (b.help_topic_id  < ( ( length( a.rn) - length( REPLACE ( a.rn, ',', '' ) ) ) + 1 )

作者: yhdata_ruby    时间: 2023-3-10 14:52
凉月 发表于 2023-3-10 14:41
按这个方法在数据集服务里要 先拆分,然后用逆透视表。  有没有可能直接不走这两步,直接在制作界面新建 ...

可以试试substring这个函数,,但是目前感觉不太适合,参考https://www.yonghongtech.com/rea ... hlightsub=substring,也可以提前在数据库中就处理好
作者: 凉月    时间: 2023-3-13 09:03
DX188 发表于 2023-3-10 14:59
给你提供一点思路,我只针对单个单元格写了点脚本,没有对全局进行思考,会有所欠考虑。仅供参考
脚本:
va ...

感谢回复,不明觉厉!请问你这个脚本是什么语言啊,什么数据库里跑的
作者: DX188    时间: 2023-3-13 09:15
凉月 发表于 2023-3-13 09:03
感谢回复,不明觉厉!请问你这个脚本是什么语言啊,什么数据库里跑的

这不就是永洪的语言么,基于JS,变化时运行写的脚本
作者: 凉月    时间: 2023-3-13 15:16
DX188 发表于 2023-3-13 09:15
这不就是永洪的语言么,基于JS,变化时运行写的脚本

还没用过js
作者: yhdata_ruby    时间: 2023-3-13 15:21
可以给188设置最佳回复哦,我们一起学习
作者: DX188    时间: 2023-3-13 16:17
凉月 发表于 2023-3-13 15:16
还没用过js

单个单元格实现了,整列也就不难了,我刚又试写了下,外面嵌套一层循环是可以实现的,不过好像有点版本上的BUG,我就先不贴脚本了
作者: DX188    时间: 2023-3-13 16:17
yhdata_ruby 发表于 2023-3-13 15:21
可以给188设置最佳回复哦,我们一起学习

谢谢




欢迎光临 永洪社区 (http://club.yonghongtech.com/) Powered by Discuz! X3.4