
BasicユーザーのためのFullユーザー専用ツールの再現方法をご紹介します
Alteryx ACEのAkimasaKajitaniです。
Alteryx ONEのBasicユーザーは、マクロを使うことができないため、マクロベースのツールはすべて利用することができません。もちろん、それ以外にもFull専用のツールは存在しています。ただ、マクロであれば中身を開くことができ、中身の処理が見えるので、どのようにそのツールがAlteryxのツールで実現されているかを知ることができます。
今回は、各Fullユーザー専用ツールをBasicでどのように実現できるかを見ていきたいと思います。マクロであればマクロをベースに考えていきます(ただしマクロは汎用的に動くように作られているので、処理としてみたときに必ずしも最適とは限りません)。マクロではないツールは、そのツールの処理内容を考え、それがBasicユーザーが利用な可能なツール(以下、Basicツールとします)で実現可能か見ていきたいと思います。
今回は、Basicツールでの再現の難易度(実現難易度)をつけてみました。
- ★はマクロの中身をベースにコピペもしくは設定箇所を最小限にしてコピペできるものが作れるようなもの
- ★★は自分でロジックを組まないといけないがそれほど難しくないもの
- ★★★は自分でロジックを組まないといけないが、かなり複雑なロジックを作る必要があるもの
としています。
また、今回対象としているのは以下のカテゴリです。
ツール数がかなり多いので長文になっていますのでご注意ください。
入出力カテゴリ
入出力カテゴリでは、現在日時ツールはマクロベースのツールで、マップ入力ツールは通常のツールです。マップ入力ツールはかなり特殊な動きをするため、別のツールで肩代わりすることはできません。
現在日時ツール
実現難易度:★
現在の日時を1行だけ作成するツールです。これはマクロベースのツールなので、簡単に実現可能です。そのままマクロの中身をコピペしましょう。
なお、出力フォーマットは日時ツールを使って自分で設定していく必要があります。
準備カテゴリ
準備ツールは多くのツールがマクロで作成されています。インピュテーション、オーバサンプルフィールド、サンプル作成、データクレンジング、複数フィールドビニング、ランダム%サンプリング、レコード選択が該当します。
なお、タイル、ランクツールはマクロで提供されていませんが、これらはそれぞれBasicツールで概ね再現することが可能です。
インピュテーションツール
実現難易度:★★
インピュテーションツールは、マクロベースのツールですが、マクロ内部はかなり複雑になっています。
これは様々な値の補完形式に対応しているからですが、特定の値の補完にしぼればそれほど複雑なワークフローを組む必要はありません。
- Null値の置き換えやユーザー指定値を「指定値」で置き換え
これはフォーミュラツールもしくは複数列一度に対応したい場合は、複数フィールドフォーミュラツールで対応可能です。例えばNull値を0にするような場合は以下のような関数で対応可能です。
IF IsNull([_CurrentField_]) THEN 0 ELSE [_CurrentField_] ENDIF
- 平均値や中央値、最頻値で置き換え
この場合、置き換える値(平均値等)を先に集計ツールで計算しておく必要があります。計算した値はフィールド付加ツールで元のデータストリームに貼り付け、IF文で値を更新していけばオッケーです。
いずれのワークフローも元のマクロからはかなりシンプルに実現することができました。
オーバーサンプルフィールドツール
実現難易度:★
オーバーサンプルフィールドツールは、機械学習を行う際のデータ量の不均衡を正すためのツールです。そのため、通常のデータ加工ではあまり使われないかもしれませんが、中身としては比較的シンプルなマクロとなっています。
この複雑なマクロを、適用させたいデータに対して変更ポイントがすぐに分かるように、若干改変しつつワークフローを整えると以下のようになります。
サンプル作成ツール
実現難易度:★
サンプル作成ツールは機械学習の学習用データセットを作成する際に利用するツールですが、Basicユーザー的には予測ツールがそもそも使えないのでこの「サンプル作成ツール」を再現するモチベーションはあまりないのが正直なところですが、一応再現してみましょう。
とはいえ、基本的にマクロベースのツールなので、そのままコピペでいけるレベルです。
これを整えてみましょう。
特に問題なく再現可能でした。
タイルツール
実現難易度:★~★★★
タイルツールは豊富なオプションでグループ化を行うことができるツールです。代わりにこれを自力で実装する場合は、それぞれロジックを作って実装する必要があります。いくつかの手法は複雑なため、Basic対応ツールでの実装は困難です。
- 等和
Basic対応のツールで可能な現実的な方法がないため再現困難です。
- 等しいレコード数
自力で似たようなロジックを組めば再現することができます。
レコード数を取得し、ほしいタイル数で割り算をした後、Tile_SequenceNumやTile_Numを複数行フォーミュラツールで計算すればオッケーです。最後にレコード数を欲しいタイル数で割り切れなかったときのために、一番最後のタイルに所属させるための再計算を行っています。
- スマートタイル
出力方法がはっきりしないので再現は困難です。似たようなことは再現できると思います(今回はスキップします)。
- 固有値
ロジックとしてはそれほど複雑ではないですが、複数行フォーミュラツールを多用します。
- 手動
複数行フォーミュラツールに特定の計算式を入れればオッケーです。
データクレンジングツール
データクレンジングツールはデータクレンジングProツールで代替が可能です。
複数フィールドビニングツール
実現難易度:★★
複数フィールドビニングツールは複雑なマクロとなっていて、Full専用のツールもいくつか使われているためこのまま利用するのは難しいです。
各オプションに応じた結果を得られるようにそれぞれロジックを作り込んで実装する必要があります。
ただ、マクロ内部では動的に処理を行うためのツールが多く配置されていたので、それぞれのオプションに対してロジックを組み直すと以下のようにシンプルになります。
- 等しいレコード数
以下は「等しいレコード数」のオプションですが、タイルツールが使えないので、タイルツールをBasic対応ツールで再現しているのでワークフローが長くなっています。
ちなみに、タイルツールで有効になっている「列上でタイルを分割しない」オプションは実装していないので、若干出力が異なる場合があります。
- 等間隔
次は、等間隔オプションの場合です。こちらはもともとフォーミュラツールでタイル番号を計算していたので同等の出力が出るようになっています。
ランクツール
難易度:★~★★★
ランクツールは、最近登場したツールで、値のランキングを様々なタイプで出すことが可能ですが、このツールがないときはその他のツールでワークフローを組んでいました。基本的にはソートツールでまずランキングの一位から並び替え、あとはランキング方式に沿ったアルゴリズムで順位をつけていけばオッケーです。順位をつける際は、複数行フォーミュラで基本的には行いますが、単純なケースではレコードIDツールも役立ちます。
- 序数ランキング
一番単純なパターンで、上から順に番号を振ります。単に大きい順に並び替えて、レコードIDツールで順番をつけていきます。
- 連番ランキング
値が同じであれば同ランクにするという方法です。
計算式として、判定する項目の値を一つ前の値と比較し、同じなら一つ前のランキングを持って来て、そうでなければランキングをひとつプラスする形になります。
IF [Row-1:Units Sold]=[Units Sold] THEN [Row-1:DenseRanking] ELSE [Row-1:DenseRanking]+1 ENDIF
- 標準ランキング
同一順位は同じ順位で、次に順位がつく時に同一順位がいた分の順位をスキップする方式です。これは、一番最初から通しで順位を数えておいて(行IDで代用できます)、あとは複数行フォーミュラツールを使って、順位を決めるための項目の値が変化したポイントまで上の順位をひっぱってくる、といったアルゴリズムになります。
IF [Row-1:Units Sold]=[Units Sold] THEN [Row-1:StandardRanking] ELSE [RecordID] ENDIF
- 修正競争ランキング
正直あまりみないタイプのランキングですが、各値ごとにカウントを取りつつ順位をつけていく形です。最初にランキングのベースとなる値のカウントを取っておけば比較的簡単に順位を出すことができます。
- 小数ランキング
同一順位の真ん中の順位をつけていくタイプのランキングです。順位のベースとなる値順に並び替え、上から順番をつけて、順位のベースとなる項目の値の最初と最後のランクの平均値を取る、という方法で実現可能です。ワークフローとしては少し複雑になります。
ランダム%サンプリングツール
実現難易度:★
ランダム%サンプリングツールは、マクロベースのツールですが、中身としてはソート、フォーミュラ、サンプリングといった非常に基本的なツールで構築されています。マクロの中身は以下のとおりです。
設定されるオプションに応じて分岐ツールが使われていますが、やりたいことに応じてロジックを個別に構築すればオッケーです。といっても、フォーミュラツールの関数が一つ異なるだけ(データ型も)です。
基本的には以下のようなワークフローになります。
レコード選択ツール
実現難易度:★
レコード選択ツールは、マクロベースのツールですが、中身は以下のようになっており、Fullユーザー専用の動的変換ツールが含まれています。そのため、これをそのままBasicユーザーがコピーして使うことはできません。
実際にやっていることは非常に単純で、レコードIDツールで番号をつけて、それを使ってフィルタしています。これは特に難しいものではないため、以下のように都度フィルタに論理式を含めて作りましょう。
例えば、2行目から4行目がほしい場合は、フィルタツールに以下のように設定するイメージです。
[RecordID]>=2 AND [RecordID]<=4
結合カテゴリ
グループ作成、ファジーマッチは残念ながらマクロベースではありません。また、これをBasicユーザー用ツールでうまく簡単に実現するのは困難です。
パースカテゴリ
パースカテゴリのツールは、XMLパースツールのみがFullユーザー専用ツールとなっています。XMLのような複雑な形式はBasicユーザーは使わない、という想定なのかもしれませんね・・・。
XMLパースツール
実現難易度:★
残念ながらXMLパースツールはマクロベースのツールではないため、そのままで再現することは難しいのですが、一度ファイルとして書き出してしまえばデータ入力ツールでXMLファイル形式として読み込みつつパースすることが可能です。
変換カテゴリ
変換カテゴリでは、加重平均、レコードカウントがマクロベースのツールです。これらはBasic対応ツールで再現することができます。また、累計ツールはマクロベースのツールではありませんがBasic対応ツールで簡単に再現が可能です。アレンジツール、列作成ツールもマクロベースのツールではなく、再現は若干複雑なものとなります。
アレンジツール
実現難易度:★
アレンジツールは実際に行うことは非常に単純なのですが、ワークフローが冗長になったりするため、アレンジツールが役に立つ、ということになります。例えば、x1、y1、x2、y2というフィールドをx1、x2をxという項目に、y1、y2をyという項目にまとめるような場合にアレンジツールが使われますが、以下のような非常にシンプルなワークフローで実現することができます。
そもそもアレンジツール自体、あれば便利程度で使っている人も多いかと思うので、必ずしもなくてもそれほど困らないツールかもしれません・・・(なかったとしても多少設定が面倒な程度なので)。
加重平均ツール
実現難易度:★
加重平均はマクロベースのツールのため、そのままマクロの構成を使うことが可能です。
変更ポイントはピンク色のフォーミュラツール、集計ツールの2つです。
累計ツール
実現難易度:★
累計ツールは、マクロベースではありませんが、複数行フォーミュラで簡単に再現することができます。単純に累計した結果を収めるフィールドの一つ前のレコードと、累計を取ろうとしている項目の現在のレコードを足すという計算を行います。
[ValueField]+[Row-1:Result]
レコードカウントツール
実現難易度:★
レコードカウントツールは、データストリームの総カウントを取るだけではありますが、0件の場合もちゃんと0を出力するようにテキスト入力ツールで0を準備しているという形でワークフローを構築すればオッケーです(マクロの通りです)。
列作成ツール
実現難易度:★★
列作成ツールはもともとのコンセプトが難しいツールなのですが、1列のデータを横N列に配置し直すといったツールです。水平方向にアレンジ、垂直方向にアレンジ、グループ化する・しない、といったオプションが存在します。このツールはマクロではないため自力でワークフロー化する必要がありますが、普通に組もうとすると結構な難易度になります。基本的に、X、Y方向にどう配置していくかというのを事前に複数行フォーミュラツールを使って計算し、その後で転置ツールやクロスタブツールを使って並べ替えます。
以下は水平方向にアレンジした基本的なパターンです。列数だけ決めればあとは自動的に列作成がされるように組んでいます(なるべく固定的に設定するところを減らして作ってみました)。
垂直方法のアレンジは少し複雑です。あらかじめ行数を把握しておき、その上で何行にするか、というのを計算してから水平方向のアレンジと同じようなやり方につなげます。
グループ化の場合は、さらに複雑になります。以下はグループ化した水平方向アレンジですが、Group列をあらかじめフォーミュラツールを使ってコピーしておくことで、なるべくワークフローを中をさわらないようにしています。ただ、グループ化列が複数ある場合はアンダーバーなどで連結したグループ化列を作るか、都度ワークフロー内を変更して対応する、という方法があります。
最後に、垂直方向のアレンジのグループ化はかなり複雑です。そもそもツールのオリジナルの出力も使い所がよくわからない感じはありますが再現してみました。途中のX、Yの計算がかなり複雑です。
自力で組むなら難易度は★★★ですが、組んだものを手直しながら使う分にはどうにかなるかと思います(が、慣れないとクロスタブツール、転置ツールの設定方法に戸惑うかもしれません)。
空間カテゴリ
空間系のツールは、「ST_」と頭につく関数、もしくは一部のツール(集計ツール)などで肩代わりすることが可能です。そのため、実はかなりの機能を関数で代替することが可能です。ただし、以下のツールは代替手段が存在しません(がんばって計算式でなんとかできるものもなくはないですが非常に難易度は高くなります)。
- バッファ
- 商圏分析
- グリッド作成
- スムージング
- 一般化
また、空間カテゴリのツールを使ったあとに行うタスクは可視化になることが多く、レポーティングカテゴリのツールが使えないとAlteryx単体では効果的な可視化ができないため、他のGISツールやBIツールで可視化することになるのでご注意ください。
距離ツール
実現難易度:★
ST_Distance関数で再現が可能ですが、基本方位、方位度数、ポリゴンの内部に近傍内点を作成などのオプションは単純に再現できません。まず距離を計算してみましょう。
距離:
ST_Distance([Customer Point],[Store Point],"Mi")
距離以外を計算していきましょう。
X1、X2、Y1、Y2は以下のような式であらかじめそれぞれ緯度経度を作成しておきます(Y座標はST_CentroidY関数を使います)。
ST_CentroidX([Customer Point])
X:
COS(ToRadians([Y1]))*SIN(ToRadians([Y2]))-SIN(ToRadians([Y1]))*COS(ToRadians([Y2]))*COS(ToRadians([X2])-ToRadians([X1]))
Y:
SIN(ToRadians([X2])-ToRadians([X1]))*COS(ToRadians([Y2]))
上の結果を用いて、以下のように方位度数は計算できます。
方位度数算出(結果がマイナスなら360を足すようにしましょう):
ToDegrees(ATAN2(Y, X))
方位度数が算出できれば、基本方位はIF文で再現が可能です。
基本方位:
IF [DirectionDegrees]>337.5 AND [DirectionDegrees]<=22.5 THEN "N"
ELSEIF [DirectionDegrees]>22.5 AND [DirectionDegrees]<=67.5 THEN "NE"
ELSEIF [DirectionDegrees]>67.5 AND [DirectionDegrees]<=112.5 THEN "E"
ELSEIF [DirectionDegrees]>112.5 AND [DirectionDegrees]<=157.5 THEN "SE"
ELSEIF [DirectionDegrees]>157.5 AND [DirectionDegrees]<=202.5 THEN "S"
ELSEIF [DirectionDegrees]>202.5 AND [DirectionDegrees]<=247.5 THEN "SW"
ELSEIF [DirectionDegrees]>247.5 AND [DirectionDegrees]<=292.5 THEN "W"
ELSE "NW" ENDIF
空間情報ツール
実現難易度:★
各種空間関数で実現可能です。
- パーツ数
ST_NumParts([SpatialObj])
- ペアノ鍵
残念ながら再現できないオプションです。ほぼ使われることもないと思いますが・・・。
- ポイント数
ST_NumPoints([SpatialObj])
- 中心点:SpatialObj
ST_Centroid([SpatialObj])
- 中心点:XY座標フィールド
X、Y座標フィールドが個別のフィールドで出力されます。YフィールドはST_CentroidY関数を使います。
ST_CentroidX([SpatialObj])
- 境界矩形:XY座標フィールド
境界矩形の上下の緯度、左右の経度を出力します。それぞれに対して異なる関数を使用します。
BR_Left:
ST_MinX([SpatialObj])
BR_Right:
ST_MaxX([SpatialObj])
BR_Top:
ST_MaxY([SpatialObj])
BR_Bottom:
ST_MinY([SpatialObj])
- 境界矩形:ポイント
境界矩形のポイントは、関数の組み合わせで計算する必要があります。
BR_TopLeft:
ST_CreatePoint(ST_MinX([SpatialObj]),ST_MaxY([SpatialObj]))
BR_BottomRight:
ST_CreatePoint(ST_MaxX([SpatialObj]),ST_MinY([SpatialObj]))
- 境界矩形:ポリゴン
ST_BoundingRectangle([SpatialObj])
- 空間オブジェクト型
ST_ObjectType([SpatialObj])
- 終端地点:SpatialObj
終端地点としてStartとEndという2つのポイントが出力されますが、それぞれ異なる関数を用いて出力します。
Start:
ST_StartPoint([SpatialObj])
End:
ST_EndPoint([SpatialObj])
- 終端地点:XY座標フィールド
「終端地点:SpatialObj」のStartとEndのX、Yの緯度経度を出力するオプションです。
Start_X:
ST_CentroidX(ST_StartPoint([SpatialObj]))
Start_Y:
ST_CentroidY(ST_StartPoint([SpatialObj]))
End_X:
ST_CentroidX(ST_EndPoint([SpatialObj]))
End_Y:
ST_CentroidY(ST_EndPoint([SpatialObj]))
- 長さ(キロメートル)
ST_Length([SpatialObj],"Km")
- 長さ(マイル)
ST_Length([SpatialObj],"Mi")
- 面積(平方キロメートル)
ST_Area([SpatialObj],"Km")
- 面積(平方マイル)
ST_Area([SpatialObj],"Mi")
空間プロセスツール
難易度:★
各種空間関数(ST_Combine、ST_Cut、ST_Intersection、ST_InverseIntersection)で対応が可能です。
- オブジェクトを結合する
ST_Combine([Store1_TradeArea],[Store2_TradeArea])
- #2 から #1 を切り取る または #1 から #2 を切り取る
//左側で指定した項目から後ろの項目を切り取る
ST_Cut([Store2_TradeArea],[Store1_TradeArea])
- 交差オブジェクトを作成する
ST_Intersection([Store1_TradeArea],[Store2_TradeArea])
- 逆交差オブジェクトを作成する
ST_InverseIntersection([Store1_TradeArea],[Store2_TradeArea])
空間マッチツール
難易度:★
複数のツールと空間関数(ST_Intersects、ST_Contains、ST_Within、ST_Touches、ST_TouchesOrIntersects、ST_BoundingRectangle、ST_Relate)の組み合わせで実現可能です。一度フィールド付加ツールでターゲットとユニバースのデータを結合したものを作るため、大量データの場合はパフォーマンス的に厳しいです(大量データの場合は素直にFullユーザーの方に空間マッチツールを使ってもらいましょう)。
以下のサンプルの関数の前半では、SpatialObject_TradeAreaがターゲット、SpatialObjがユニバースです。
- ターゲットとユニバースの交差地点
基本的に以下の関数でマッチングの確認が可能です。
ST_Intersects([SpatialObject_TradeArea],[SpatialObj])
さらに、交差オブジェクトを取得したい場合は、以下の関数で取得できます。マッチング確認用の関数とそっくりな名称なので気をつけましょう。
ST_Intersection([SpatialObject_TradeArea],[SpatialObj])
ワークフローとしては以下のようになります。
- ターゲットがユニバースのSpatialObjを含む
ST_Contains([SpatialObject_TradeArea],[SpatialObj])
- 対象がユニバース内にある地点
サンプルデータがやりたいことにマッチしないので、以下関数サンプルは指定を逆にしました。
ST_Within([SpatialObj],[SpatialObject_TradeArea])
- ターゲットとユニバースの接触地点
サンプルデータとしては、ターゲットはSpatialObj1で、ユニバースがSpatialObj_Pointです。
ST_Touches([SpatialObj1],[SpatialObj_Point])
- ターゲットとユニバースの接触または交差地点
サンプルデータとして、ターゲットはSpatialObj1で、ユニバースがSpatialObj_Pointです。
ST_TouchesOrIntersects([SpatialObj1],[SpatialObj_Point])
- ターゲット境界矩形がユニバースに重なる地点
これは代替の関数一発はなくて、以下のように組み合わせで実現します。
ST_TouchesOrIntersects(ST_BoundingRectangle([SpatialObj1]),[SpatialObj_Point])
- カスタムDE-9IM相関
以下のサンプルは、ユニバースがターゲットの内側にある、というDE-9IMです(つまり、WithIn)と同等です。
ST_Relate([SpatialObj1],[SpatialObj_Point],"T*****FF*")
ヒートマップツール
このツールはマクロベースです。「結果をスムージング」オプションにてスムージングツール、バッファツールが使われているため、このオプションの再現はできません。それ以外の空間系ツールはポイント作成ツール、距離ツール、空間情報ツールといった空間関数で対応可能なツールしか使われていないのですが、タイルツールがスマートタイルオプションで利用されているため、Basicでの再現は難しいです。
まぁ、使う機会もかなり少ないかと思いますので、無理に再現する必要もないかと思います・・・。
ポイント作成ツール
実現難易度:★
ST_CreatePoint関数で再現が可能です。
ST_CreatePoint([Lon],[Lat])
ポリビルドツール
実現難易度:★★
基本的に空間関数のST_CreateLineやST_CreatePolygonを使って再現しますが、ポリゴンについては関数の引数としてすべての空間オブジェクトを指定しないといけないので、ポイント数が多いポリゴンの場合は指定するのがかなり大変です(5や10ポイントであればよいのですが・・・)。
- ポリライン
ポリラインは、ST_CreateLineを複数行フォーミュラツール内で作成すると、一番最後のレコードでラインができあがるので、あとはサンプリングツールで最後の1行を拾えばよいというお手軽さです。以下のサンプル関数は、SpatialObjという項目を新規で作成し、既存のポイントがCentroidに格納されているのでここからポリラインを作成しています。
IF IsNull([Row-1:SpatialObj]) THEN [Centroid]
ELSE
ST_CreateLine([Centroid],[Row-1:SpatialObj])
ENDIF
ワークフローは以下のとおりです。
- ポリゴン
ポリゴンは厄介です。ポイント数が多いポリゴンは事実上関数で行うのは難しいと思われます。
関数を見れば一目瞭然ですが、今回5ポイントからなるポリゴンを作成するための関数は以下のようになります。
ST_CreatePolygon([1],[2],[3],[4],[5])
関数の指定が100とかちょっともう考えられないですね・・・。
ワークフローは以下の通り、クロスタブツールで各ポイントデータを横持ちにしています。
- 凸包
凸包は意外と簡単で、集計ツールで一発です。もちろん、複数行フォーミュラツールと関数ST_ConvexHullの組み合わせも機能します。
関数の場合は以下のような関数でオッケーです。新規SpatialObjを作成し、Centroidのポイントデータを使って凸法を作ります。
ST_ConvexHull([Row-1:SpatialObj],[Centroid])
ポリゴン分割ツール
実現難易度:★★★
ポリゴン分割ツールは、単純にポイントに分割するだけであればST_NumPoints、ST_PointNを使うことで各ポイントを取得することが可能です。しかしながら領域に分割、詳細な領域に分割オプションは高度なデータパースおよびデータ処理技術が必要になるので手軽に代替することは困難です。
- ポイントに分割
ポイントに分割する場合は機能します。各空間オブジェクトのポイント数をST_NumPointsで取得し、行生成ツールでそのポイント数分レコードを作成し、ST_PointNで取得すればオッケーです。
ST_NumPoints([SpatialObj])
ちなみに、ポイントは1始まりなのですが、ポリゴン分割ツールは0始まりでシーケンスナンバーが出力されているので、その仕様に合わせてサンプルワークフローは作り込んでいます。
ST_PointN([SpatialObj], [Split_SequenceNum]+1)
入力がポリゴンの場合、上のワークフローでもデータとしては得られますが、ポリゴン分割ツールの方で分割すると、最後のポイントとしてポリゴンの最初のポイントが入っているため、分割数が1ポイント多くなっています。これを加味すると、以下のようなワークフローになります。
なお注意点として、マルチポリゴンの場合、どのポリゴンなのか区別がつかないのでマルチポリゴンや穴が空いているようなポリゴンの場合は、この方法(開始点を終端点として追加する方法)は使えないので、上記のラインなどと同じ方法を推奨します(開始点と終端点が異なったままにする)。
- 領域、詳細な領域に分割
高度なパースなどを行わないと実現できないので、潔く諦めてFullユーザーの人にワークフローを作成してもらったほうが懸命かと思います。
最寄り地点検索ツール
実現難易度:★★
これも空間マッチツールと似たようなイメージになりますが、複数のツールとST_Distance関数の組み合わせで実現します。空間マッチツールと同じく、一度フィールド付加ツールでターゲットとユニバースのデータを結合したものを作るため、大量データの場合はパフォーマンス的に厳しいです(大量データの場合は素直にFullユーザーの方に最寄り地点検索ツールを使ってもらいましょう)。
方向(Direction)の計算は複雑なため、関数を書き換えるポイントが多いのに注意してください。不要であれば消してしまっても良いかと思います。
以下のワークフローでは、最大距離や0の距離の一致を無視するオプションは実装していませんが、単純にフィルタを置けばよいだけなので省略しています。そもそも最大距離は本来大量のデータがある場合に処理を軽くするものですが、代替ワークフローでは同様の処理はできません。
まとめ
- Basicユーザーが使えないFull専用ツールをBasicツールで再現する方法をご紹介しました。
- 入出力、準備、結合、パース、変換、空間カテゴリにおいて、再現可能なものはFull専用ツールに対して32ツール中23ツール再現可能でしたので、約72%再現できたということになりました。
カテゴリ | ツール名 | 再現可否 | 難易度 | コメント |
---|---|---|---|---|
入出力 | 現在日時 | 可能 | ★ | |
マップ入力 | 不可能 | |||
準備 | インピュテーション | 可能 | ★★ | |
オーバーサンプルフィールド | 可能 | ★ | ||
サンプル作成 | 可能 | ★ | ||
タイル | 可能 | ★~★★★ | 等和、スマートタイルは対応不可 | |
複数フィールドビン分割 | 可能 | ★★ | ||
ランク | 可能 | ★~★★★ | ||
ランダム%サンプリング | 可能 | ★ | ||
レコード選択 | 可能 | ★ | ||
結合 | グループ作成 | 不可能 | ||
ファジーマッチ | 不可能 | |||
パース | XMLパース | 可能 | ★ | |
変換 | アレンジ | 可能 | ★ | |
加重平均 | 可能 | ★ | ||
累計 | 可能 | ★ | ||
レコードカウント | 可能 | ★ | ||
列作成 | 可能 | ★★ | ||
空間 | バッファ | 不可能 | ||
ポイント作成 | 可能 | ★ | ||
距離 | 可能 | ★ | ||
最寄り地点検索 | 可能 | ★★ | データ量が多い場合は厳しい | |
一般化 | 不可能 | |||
ヒートマップ | 不可能 | スマートタイルができれば再現可能 | ||
グリッド作成 | 不可能 | 厳密には計算で求めることができる | ||
ポリビルド | 可能 | ★★ | ポリゴンは制限あり | |
ポリゴン分割 | 可能 | ★★★ | 領域、詳細な領域オプションは再現不可 | |
スムージング | 不可能 | |||
空間情報 | 可能 | ★ | ペアノ鍵は再現不可 | |
空間マッチ | 可能 | ★ | データ量が多い場合は厳しい | |
空間プロセス | 可能 | ★ | ||
商圏分析 | 不可能 |
サンプルワークフローダウンロード
※サンプルワークフローはご自身の責任でご利用ください
※2025/08/19時点の情報です