rowcount(你會(huì)用PowerQuery統(tǒng)計(jì)字符串中各類字符出現(xiàn)的次數(shù)嗎)
很多時(shí)候我們需要統(tǒng)計(jì)單個(gè)字符或某種字符出現(xiàn)的次數(shù),那么在PowerQuery中怎么實(shí)現(xiàn)呢?
有小伙伴提了一個(gè)問(wèn)題:“PowerQuery是否有直接統(tǒng)計(jì)字符串中指定字符個(gè)數(shù)的函數(shù)”,我翻了下PowerQuery參考,并沒(méi)有找到這樣的一個(gè)函數(shù)。
那有沒(méi)有法子用PowerQuery來(lái)實(shí)現(xiàn)統(tǒng)計(jì)字符串中特定字符的出現(xiàn)個(gè)數(shù)呢?我目前知道的有兩種方法(假設(shè)要統(tǒng)計(jì)字符串【1-2-3-9】中【-】出現(xiàn)的次數(shù)):
= List.Count(Text.PositionOf("1-2-3-9","-",Occurrence.All))
= Text.Length("1-2-3-9")-Text.Length(Text.Replace("1-2-3-9","-",""))
兩種方法殊途同歸,不過(guò)我覺(jué)得方法一更“優(yōu)雅”一些。
那還會(huì)不會(huì)有第三種方法呢?
更進(jìn)一步,我們可以在這個(gè)例子的基礎(chǔ)上進(jìn)行延伸和拓展。
02統(tǒng)計(jì)字符串中出現(xiàn)的數(shù)字個(gè)數(shù)統(tǒng)計(jì)字符串【1-2-3-9】中【數(shù)字】出現(xiàn)的次數(shù):
= List.Count(Text.PositionOfAny("1-2-3-9",{"0".."9"},Occurrence.All))
但是如果要統(tǒng)計(jì)字符串【李四5676中華234大家庭】中數(shù)字出現(xiàn)的次數(shù),則結(jié)果就不對(duì):
= List.Count(Text.PositionOfAny("李四5676中華234大家庭",{"0".."9"},Occurrence.All))
上面統(tǒng)計(jì)的結(jié)果是7,但是我們想要的結(jié)果是2。原因在于上面的代碼是把【5676】這一個(gè)數(shù)字作為四個(gè)數(shù)字統(tǒng)計(jì)了四次,實(shí)際上我們需要的是把【5676】作為一個(gè)整體統(tǒng)計(jì)一次。
那要如何才能得到正確結(jié)果呢?這時(shí)就必須借助于自定義函數(shù),比如下面這個(gè):
(str as text)=>let
源 = Text.PositionOfAny(str,{"0".."9"},Occurrence.All),
轉(zhuǎn)換為表 = Table.FromList(源, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
已添加索引 = Table.AddIndexColumn(轉(zhuǎn)換為表, "索引", 0, 1),
已添加自定義 = Table.AddColumn(已添加索引, "自定義", each
try
if 已添加索引[Column1]{[索引]}+1=已添加索引[Column1]{[索引]+1}
then "drop"
else "keep"
otherwise "end"),
篩選的行 = Table.SelectRows(已添加自定義, each ([自定義] <> "drop")),
自定義1 = Table.RowCount(篩選的行)
in
自定義1
在字符串上調(diào)用這個(gè)自定義函數(shù)就能統(tǒng)計(jì)出正確的數(shù)字結(jié)果。比如字符串【李四5676中華234大家庭】中的數(shù)字是2。
所以,只有統(tǒng)計(jì)單個(gè)數(shù)字出現(xiàn)的次數(shù),才能用List.Count()結(jié)合Text.PositionOfAny()函數(shù)的方法。
如果要統(tǒng)計(jì)多個(gè)單數(shù)字構(gòu)成的數(shù)值的出現(xiàn)次數(shù),則必須用自定義函數(shù)曲線實(shí)現(xiàn)。
03統(tǒng)計(jì)字符串中漢字出現(xiàn)的個(gè)數(shù)
統(tǒng)計(jì)字符串【李四5676中華大家庭】中【漢字】出現(xiàn)的次數(shù):
= List.Count(Text.PositionOfAny("李四5676中華大家庭",{"一".."龥"},Occurrence.All))
轉(zhuǎn)載請(qǐng)注明來(lái)自夕逆IT,本文標(biāo)題:《rowcount(你會(huì)用PowerQuery統(tǒng)計(jì)字符串中各類字符出現(xiàn)的次數(shù)嗎)》

還沒(méi)有評(píng)論,來(lái)說(shuō)兩句吧...