下記のようなアプリにおいて、「皿洗い」「水やり」・・・などが、Data>Columunsの項目としてありますが、このCoumns自体を、スプレッドシートからではなくこのアプリから編集(追加・削除・編集)できるようにする方法はありますでしょうか?例えば、・皿洗いではなく、「洗濯」という名前に変更をしたり・「ランニング」という項目を非表示にしたり・「業務D」という項目を追加する…といった操作です。お教えいただけますと幸いです。どうぞ、よろしくお願い致します。
FIELDの名称をUSERが自由に変更したい、というご要望でしょうか?
結論から申し上げますと、できません。
カラム・フィールドを追加する場合、スプレッドシートにカラムを追加し、AppsheetのEditorから再度スキーマを読み込み修正を反映、というプロセスが必要となります。いずれもアプリのユーザーではなく、アプリのOWNERであるCREATORのみ出来る作業となります。
頂いたアドバイスを元に、さらにいくつか試してみて、だいぶこの数式とAPPの仕組みについて理解が深まりました。
isnotblankは、ここでは、TRUEをかえすということですね。
https://qiita.com/narikei/items/54ec0a0770a5ebf012ec
ここがTRUEだから、結果 SHOWIFもTRUEとなり、
APP上でも表示されるようになるという…。
大変参考になりました。
どうも、ありがとうございます。
アップシート(SQLも基本的に同じですが)でSELECT 関数を使うと返される値のバリュー・型は「LIST」タイプとなります。
条件にあうリストが複数ある、もしくは場合に因っては一つの行のみ、もしくはゼロかもしれません。
従い、SELECTにて返される値は複数あるLISTタイプではありますが、ここで返される複数のVALUEのうち、ひとつだけ抜き出したい、というときにANYを利用します。
APPSHEETの英語の説明では、ランダムという表現を利用しているのですが、実は正しい表現とは思われません。つまり、SELECT関数実行の結果、上から順にしたにLISTとして列が並ぶ(空想の世界)のですが、この並んだ複数の中からANYの関数はランダムに選択しているのではなく、もっとも上部、つまり一行目にくる行のVALUEを返しているようです。技術的な話ですが。。。。
isnotblank(any(select(Sheet2[ColumnName],[Col]="Col2")))
の例ですが、Colの値がCol2になる
場合に変えさえる行の数は一つと分かっています。なので、その行からCOLUMNNAMEの値を返してもらうためにANYを使っているわけです。そして、そのVALUEがあれば(NULLではない)、という条件式をSHOWIFに利用しているというトリックです。
どうもありがとうございます。
今頂いた関数を理解するべくいろいろと操作しておりました。
isnotblank(any(select(Sheet2[ColumnName],[Col]="Col2")))
この関数を日本語訳(?)すると、
「sheet2のColumnName列」から、←【Sheet2[ColumnName],】
「Col列がCol2である行の値を」←【[Col]="Col2"】
「その値がもしも空白でなければ」←【isnotblank】
「選択して引っ張ってきて下さい。」←【select】
・・・と理解しました。
ここで、重ねての質問で恐縮ですが、
anyはどのような働きをするのでしょうか。
ネットでSQL文を調べると、いずれかの条件が合致すればという演算子だとあります。・・・この文脈で使われた場合は・・・
===============
数式の編集画面にはありがたいことに(!)、以下のような関数翻訳文がありました。
ISNOTBLANK(
....One randomly chosen value from this list ( ←anyはこれでしょうか?
............The list of values of column 'ColumnName'
............from rows of table 'SHEET2'
............where this condition is true: ((The value of column 'Col') is equal to ("Col2"))))
randomlyにchose? ランダムに選択しているようには思われないのですが、これは一体…。
===============
細かいところまで立ち入っているようであれば、
(なんとなく…の理解まではできたと思っていますので、いったんここで撤退致します。)
もう少し、頂いたAPPを使って、
様々なことを試してみたいと思います。
Tsuji様、コメントを、どうもありがとうございました。
Showifの設定部分ですが、sampleの中では、カラムの名称を別途定義(命名)したもののみ表示するような仕組みを組み込むため、お気づきのような関数をshowifの条件として設定しています。常にカラム名を表示したいということであれば、当然にこの関数を削除いただければ常時表示されるようになります。
ご要望のニーズの背景等、十分に理解致しますがアップシートに限らずデータベースを軸とするアプリ等においてデータスキーマの変更をユーザーに可能とするような仕組みは推奨されません。(個人的意見です)
ユーザーのアプリ利用における負の効果が発生したりと現状のアプリ(Appsheet)では対応できない側面もあるためです。
但し、何か抜け道があるか?との質問に対してはYESとなります。
https://www.appsheet.com/samples/Sample-App?appGuidString=b9bedea6-86ac-4fd3-8ce5-65bc2ac12891
若干複雑なお話となってしまうため、弊社のアップシートのポートフォリオにサンプルサプリをUPしました。
このアプリですが、
まず、一つのテーブル(SPREADSHEETでいうところのWORKSHEET)にいくつかのカラムを事前に準備し、アップシートに読み込みます。ここでは、フィールドの名前を適当にCOL1,COL2といった具合に「適当」に定義しておきます。
実際にアプリ上で表示するそれぞれのカラム名。
これを定義するために別途テーブル(worksheet)を準備しておきます。COL1,COL2というカラムに実際に「命名」したい名前をこちらのテーブルに入力します。
カラムに名前を付けることで(ユーザーがアプリ上で操作できます)、もう一つのメインのテーブルのカラムは、バックエンドのシート上ではCOL1、COL2という名前は引続き変わりませんが、APPSHEET内で関数を使い、且つカラムのDISPLAY NAMEという部分に細工を入れることで、ユーザーがアプリ内で定義したカラムの名前が、表示されるようになります。
単なるアップシートでできるトリックのご紹介となってしまいますが、このような方法である程度、実現されたいことは達成可能です。
一方、このやり方でも例えば、カラムを日付のタイプにしたい、などカラムのタイプをユーザーに変更させたり、アプリ上に表示させるカラムの順番をユーザーに変更できるような仕組みは、残念ながら現状は対応できません。
今後、APPSHEETがこのようなトリッキーな要望にも対応するのか?は未知数ですが、カラムのデータタイプを変更する権限をユーザーに与えてしまう、ということは現実的ではないと思います。
例えば、あるカラムを「NUMBER」というタイプに設定。ユーザーは基本、そのカラムに数字しか入力できない、という制限を与えることにもなります。この状況で仮に、このカラムをTEXTというタイプに変更したらどうでしょう?
既にこのカラムには数字のデータが入力されているはずですが、同じ行にテキストデータが入ってきてしまうことになります。
データがぐちゃぐたになるわけです。
データベースのマネージメントの観点から見れば、異なるタイプのデータが同じ行に入っているということは、CLEAN DATAとは呼べず、後のデータの利用にも影響を及ぼしてしまうことになってしまいます。
また、スプレッドシートでは基本、テキストであろうが数字であろうが同じ行にどのようなデータをぶち込んでも問題ありませんが、バックエンドがSQLなどのデータベースの場合、基本、DATEと設定したフィールドには日付のデータしか入力を受け付けてくれません。
といった具体に簡単ではない問題です。笑
ご参考まで、でした。