1

データに memberID 番号が含まれ、その後に文字または文字 + 数字の文字列が続くテーブル フィールドがあります。次に例を示します。

My Data
1234567Z1
2345T10
222222T10Z1
111
111A

Should Become
123456
12345
222222
111
111

会員番号だけを取得したい (上記の「すべき」に示されているように)。IE は、最初の文字の LEFT にあるすべての数字です。会員番号の長さ(最初の1~7桁)は人それぞれ違うし、使用する文字も違う(a~z、0~8文字)ので、SPLITできないと思います。 .

現在、Power Query で 27 個の検索と置換コマンドを実行して、このデータをクリーンアップします (たとえば、T10 を検索して何も置換しない、T20 を検索して何も置換しないなど)。

これを達成するためのより良い方法を提案できる人はいますか?

Excel でこの数式を作成することに成功しましたが、Power Query でこれを実行しようとしていますが、数式を変換する方法がわかりません。また、これが最も効率的なソリューションであるとは確信していません。

=iferror(value(left([MEMBERID],7)),
     iferror(value(left([MEMBERID],6)),
         iferror(value(left([MEMBERID],5)),
             iferror(value(left([MEMBERID],4)),
                 iferror(value(left([MEMBERID],3)),0)
             )
         )
     )
 )

ありがとう

4

1 に答える 1

3

これを行うには、おそらくいくつかの方法があります。1 つの方法を次に示します。

  1. クエリを作成する

let Source = { "a" .. "z" } & { "A" .. "Z" } in Source

  1. クエリ GetFirstLetterIndex を作成します。

let Source = (text) => let // For each letter find out where it shows up in the text. If it doesn't show up, we will have a -1 in the list. Make that positive so that we return the index of the first letter which shows up. firstLetterIndex = List.Transform(Letters, each let pos = Text.PositionOf(text, _), correctedPos = if pos < 0 then Text.Length(text) else pos in correctedPos), minimumIndex = List.Min(firstLetterIndex) in minimumIndex in Source

  1. データを含むテーブルに、次の数式を使用してカスタム列を追加します。

Text.Range([ColumnWithData], 0, GetFirstLetterIndex([ColumnWithData]))

その数式は、データ テキストから最初の文字まですべてを取得します。

于 2015-05-08T22:13:15.913 に答える