LoginSignup
2
2

More than 1 year has passed since last update.

VSCode + .NET Interactive で PowerFx を体験してみよう

Last updated at Posted at 2021-12-04

はじめに

PowerFxオープンソースとして公開され、独自のアプリに PowerFx を組み込むことができるようになりました。

この記事では、PowerrFx で実際にどのようなことができるかを VSCode の拡張機能である .NET Interactive を使って確認して行きます。

プログラムからの PowerFx の利用

たとえば C# であれば、アプリに次の 2 つのパッケージを追加するだけで、PowerFx の実行エンジンを実体化させプログラム中で PowerFx の式を評価することができます。
この機能を使った PowerFx の対話型アプリのサンプルは power-fx-host-samples として GitHub に公開されています。

❯ dotnet new console
❯ dotnet add package Microsoft.PowerFx.Core --prerelease
❯ dotnet add package Microsoft.PowerFx.Interpreter --prerelease
Program.cs
using Microsoft.PowerFx;
var engine = new RecalcEngine();
var result = engine.Eval("Sum(1, 2, 3)");
Console.WriteLine(result.ToObject());
実行結果
❯ dotnet run
6

VSCode + .NET Interactive + PowerFx

VSCode の .NET Interactive 上で動作する PowerFx の拡張機能は PowerFx.NET.Interactive という NuGet ライブラリとして公開されています。動作させるには、README 従い VSCode の.NET Interactive 拡張と、DataTable 拡張を有効にします。

.NET Interactiveで作業をするためにノートを作成しましょう。
新しい .NET Interactive のノートを作成する場合は、Ctrl+Shift+Alt+N でノートを作成します。もしくはコマンドパレットから .NET Interactive: Create new blank notebook を実行してもよいです。
作成するノートの拡張子は .dib でも .ipynb でもどちらでも大丈夫です。言語は C# を選択してください。

ノートが作成されたら、まずは PowerFx のカーネルを NuGet から取得してインストールします。

#r "nuget: PowerFx.NET.Interactive, 0.0.9.7"

現時点のバージョンではこれらの組み込みの数式に対応しているようです。
詳細については、PowerApps の Formula reference を参照してください。

Abs, AddColumns, And, Average, Average, Blank, Concat, Coalesce, Char, Concatenate, CountIf, CountRows, Date, DateAdd, DateDiff, DateValue, DateTimeValue, Day, EndsWith, Exp, IsBlank, IsError, IsToday, If, IfError, Int, Filter, First, FirstN, ForAll, Hour, Last, LastN, Left, Len, Ln, Log, Lower, Max, Max, Mid, Min, Min, Minute, Mod, Month, Not, Now, Or, Power, Replace, Right, Round, RoundUp, RoundDown, Second, Sequence, Sort, StartsWith, Sum, Sum, Split, Sqrt, Substitute, Switch, Table, Text, Time, TimeValue, Today, Trim, TrimEnds, Trunc, Upper, Value, With, Year

PowerFx の式を実行する場合は、#!powerfx でカーネルを指定して実行します。例えば、records という変数にテーブルを読み込み、Value が 40 より大きいものを昇順でソートした 1 件目を表示するとしたら次のような式になります。

#!powerfx
ClearCollect(records, Table(
    { Id: 1, Name: "Hoge1", Value: 1 },
    { Id: 2, Name: "Hoge2", Value: 13 },
    { Id: 3, Name: "Hoge3", Value: 44 },
    { Id: 4, Name: "Hoge4", Value: 43 }
));

Upper(First(Sort(Filter(records, Value > 40), Value)).Name)

image.png

また、変数に式を設定するとその値は追跡されそれを参照している変数は自動的に再計算されていることも確認できます。

#!powerfx
Set(val1, 1);
Set(val2, val1 + 2);
val3 = val1 + 2;
Set(val1, 2);
val2;
val3;

image.png

おわりに

PowerFx 自体は Power プラットフォーム上ではすでに利用可能で、今後 PowerAutomate などに移植されるとさらに利用用途が広がり面白くなりそうな機能です。
.NET Interactive の拡張機能はプレリリース版なので、動作が若干怪しい部分もありますが簡単に試してみるには面白と思うので気になる人は触ってみると良いと思います。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2