Sequence関数、最近カスタム関数を作るようになってからますます活躍しております。
実際、自分が使っているケースをいくつかここでご紹介しようと思います。
Sequence関数の書式は以下の通りです。
Sequence( 生成する配列の行数, 初期値, 増加幅 )
公式レファレンスは以下
1. カレンダー作成
例えば開始日と終了日が与えられたときに、その間の日付一覧を作る場合に Sequence関数を使います。
開始日、終了日を変数で与えているとすると、以下の式で日付一覧が得られます。
AddColumns( Sequence( DateDiff(開始日, 終了日)+1, 0, 1 ), "date", DateAdd( 開始日, Value, Days ) )
DateDiff で開始日から終了日の間の日数が得られますが、開始日を含まないため +1日 しています。初期値を0, 増加幅を1 としているので、この結果以下の数字列が作られます。
[ 0, 1, 2, 3, ....., (開始~終了日の日数) ]
続く AddColumns では、この数字列に対して、 "date" という名前の列を追加しています。
DateAdd( 開始日, Value, Days )
開始日 に対して、先ほどの数字列のそれぞれを足していくので以下のようなイメージです。
実際にPower Appsでデータテーブルに設定してみると以下のように表示されます。
このカレンダーにもう少し手を加えると、Excel の NETWORKDAYS 関数のような式を作ることができます。
2. 文字のリピート
何らかの文字 (または文字列) を繰り返す場合にも Sequence関数は有効です。
例えば 「あ」 を 10回繰り返す場合には、
Concat( Sequence( 10, 0, 1 ), "あ" )
わずかこれだけで「ああああああああああ」が出力されます。
ここでの Sequence の役割は「とにかくなんでもいいから10行ある配列を生成する」ことです。
特に文字数 (行数) が決まっていない場合には Sequence を使うのが最適です。
これを応用すると、カスタムのレーティングコントロールも作れます。
または以前の投稿で Power Query で Text.Repeatでゼロ幅スペースをN個追加 ということもできます。
Concat( Sequence( N, 0, 1 ), Char(8203) )
3. コレクションに連番付与
コレクションです!SharePointなどのデータソース相手では委任警告がでるような操作をするので、コレクションを対象とします。
適当なコレクションに連番を付与する場合にも Sequence は有効です。 (これまでだと ForAll と 2つのコレクションを使う方法がよく知られていました)
AddColumns( Sequence( CountRows(someCollection), 1, 1), "data", Last( FirstN( someCollection, Value ) ) )
実際には ForAll + 2 コレクションと少し違って、元のコレクションのデータ部分が レコード型になっています。
ただ、実際利用する上ではそれほど困らないかなと思います。ギャラリーであれば ThisItem.data.XXXX
のようにしてデータにアクセスできるので。
おわり
Sequence関数は 1 (または0) から始まるNこの数字 を得るために非常に有効な関数です。
または文字列のリピートの部分で使ったような、「とにかく何らかの配列がほしい」などのケースです。
カスタム関数に限らず、ここで書いたような方法は結構便利に使えると思いますので、ぜひ Sequence関数 試してみてください。