みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
Windows10 FileMakerPro14を使用しています。
FileMakerを用いて、とある会員制の有料サービスを管理しています。
わかりやすく、DropBoxの有料サービスのようなもので例えます。
前提として…
ユーザーごとに、1GB単位で希望する容量を与え、月額課金を行います。
なお、1ヶ月だけ無料期間があり(1GB限定)のトライアルが行え、そのままデータを引き継いで有料サービスに移行できます。
つまり、システム的には有料ユーザーか無料ユーザーかはフラグで管理しているだけなので
当然、FileMaker上でも両方のユーザーが混在した状態になっています。(ほかの理由もあるので別には出来ません)
ユーザーID(重複不可)をキーとした、顧客管理DBを作成
そこには
連番ID(FM上でユニーク)
顧客ID(システム上でユニーク)
顧客名
契約開始日
契約容量(無料の場合は強制的に1)
容量毎の単価、有料/無料フラグ(無料=0/有料=1)
のフィールドがあります。
先に書いたように、有料/無料が混在しているので、「有料のみ」のボタンで検索して絞り込んだりはしているのですが
どうしても、ユーザーごとにレコードを繰っていくので、全体を俯瞰してみることが出来ません。
そこで、有料利用/無料利用のそれぞれで、「顧客名」「契約容量」を一覧表示し、さらに有料/無料ごとに「契約者数合計」「契約容量の合計」を表示したいと思います。
画面を表示した時に、"動的"に「現状」が出てくるのが理想ですが、ボタンなどのアクションで結果表示でも問題ありません。
以下の方法がどうするべきか悩んでおります。
---------------------------------
1.有料の一覧、無料の一覧をどのように表現するのがいいのか
ポータルや小計パートなどの言葉をみますが、何が適しているのかよくわかっていません
あるいは、リスト表示などの方がいいのでしょうか?
2.上記の一覧が表示できたとして、有料/無料で集約しての表示はどうすればいいでしょうか
可能であれば、左右で有料/無料、もしくは上下で有料/無料のように表示したいです
3.2までができるとして、「契約者数合計」(=有料もしくは無料のレコード数?)、「契約容量の合計」(有料/無料で集約された「契約容量」の合計 ※無料の場合は契約者数と一緒のはず)
---------------------------------
1にも書いたように、画面イメージからポータルとか小計パートなどが適していそうな気もするのですが...
どう質問すればいいのかも測りかねておりますので、回答いただくのに不足な情報などありましたらご指摘ください。
よろしくお願いします。
気が付いたらURLが変わってて迷子になっていました。
無事、希望した物が作成できました。
Shinさん、Hiroさん、チポさん、ありがとうございます。
> Hiroさん
自己と同種で一つ前のレコードを参照する自己リレーションを作り、差分計算を立てます。
・自己リレーション「テーブルB 2」(かつ 年月の降順ソート)
「テーブルB::IDa」 = 「テーブルB::IDa」
AND
「テーブルB::年月」 > 「テーブルB::年月」 → かつ この「::年月」で「降順ソート」・計算フィールド「差分」に、下式を設定。
在庫数 * Sign(テーブルB 2::在庫数) - テーブルB 2::在庫数
細かい説明ありがとうございます。
享受いただいた内容を元に考えてみます。
ただ、こちら
在庫数 * Sign(テーブルB 2::在庫数) - テーブルB 2::在庫数
ですが
在庫数 - テーブルB 2::在庫数
でいいかと思ったのですが、Sign(テーブルB 2::在庫数) を乗じているのは何か意図がありますでしょうか?
>Shinさん
ありがとうございます。
ただ、必ずしもIDbが増加方向とは限らないので、リレーションでの IDb > IDb では、意図した内容にならない気がしましたが…いかがでしょうか?
>チポさん
ありがとうございます。
情報元からは、「今月の在庫はコレだけだよ!」という情報しか来ないので
入庫数、出庫数は情報として取得できないのです。
質問は判りやすいように在庫と表現していますが、逆にややこしくなってしまったようで申しわけありません。
ポータルでデータを生成した時に、指定したフィールドの今回と前回の差分を取得したいと考えています。
環境は以下になります。
FileMakerPRO 14
Windows
テーブルA と テーブルB があります。
テーブルB にあるフィールドで、今回と前回を比較して差分(+でも-でも)を取得したいと
考えていますが、いまいちやり方がわかりません。
色々調べてみましたが、検索して集計、などの言葉がいまいち理解できていないので
もしかすると、Filemakerの機能を知るだけで解決できる内容であれば申し訳ないのですが
ご享受お願いします。
例えばですが
テーブルA : 在庫商品の情報データベース
テーブルB : 毎月の在庫処理のデータ(ポータルにしています)
というイメージで考えてください。
テーブルBはテーブルAの商品名に紐付く形で、毎月毎月データが作成されます。
テーブルBは毎月月末に月末時点の在庫数が入るものとします。
その際に、前月の在庫数と今月の在庫数の差分を取得できればと考えています。
以下のような感じで、レコードが生成されるように作ります。
【テーブルA】
IDa | 商品名
001 | りんご
002 | みかん
003 | バナナ
【テーブルB】(IDa は テーブルAのIDでリレーションしているフィールド)
IDb | IDa | 年月 | 在庫数 | 差分
001 | 001 | 1702 | 100 | 0 ← 1月目は "りんご" だけ
002 | 001 | 1703 | 90 | -10 ← 2月目は "りんご" には差分が出来る
003 | 002 | 1703 | 50 | 0 ← 2月目に "みかん" が追加
004 | 001 | 1704 | 101 | 11 ← 3月目の "りんご"
005 | 002 | 1704 | 65 | 15 ← 3月目の ”みかん”
006 | 003 | 1704 | 20 | 0 ← 3月目に "バナナ" 追加
007 | 001 | 1705 | 80 | -21
008 | 002 | 1705 | 0 | -65
009 | 003 | 1705 | 40 | 40
こういう感じで [ 差分 ]フィールドを求めていきたいです。
この時に、たとえば IDb:007 からみて 前月のデータは ID:004のデータになります。
単順位 IDa:001 (りんご)で集計すると考えると
IDb | IDa | 年月 | 在庫数 | 差分
001 | 001 | 1702 | 100 | 0
002 | 001 | 1703 | 90 | -10
004 | 001 | 1704 | 101 | 11
007 | 001 | 1705 | 80 | -21
式のように書けば
IDb:007 の 差分フィールド を 「計算」と設定して
( IDb:007 の 在庫数 ) - ( IDb:004 の 在庫数 )
だと思うのですが、引く前(IDb:007)の在庫数フィールドは自分なのでいいとして
IDb:004 が一つ前の計算対象の在庫数を有するレコードであると、どうやって認識させればいいかがわかりません。
初歩的な事なのかもしれませんが、よろしくお願いいたします。
希望した形の内容で表示させることが出来ました。
「文字列を分解して対応するものに置き換える」という内容に幅広く応用が利きそうです。
恥ずかしながら、本格的にFMを使い始めたところでSQLどころか
他のスクリプトも、いろんなものを参考に勉強しながら作成していました。
先に回答頂いていたものも、スクリプトを解析をさせて頂く中で、非常に勉強になりました。
何度も細かな検証まで行っていただきありがとうございました。
※投稿のボツのやり方がわからず記載頂いた内容をそのままにしていますが、ご容赦ください。
【バグフィックスの報告】
バグの原因となる、SQLのIN句での文字列一括検索を諦め、
地道に1文字づつSQL検索を繰り返すループ式に切替えました。
時間も思ったほど掛からず、式もぐっとシンプルになりました。●SQL作例v2版「文字列の読み変換v2.fmp12」→ https://yahoo.jp/box/nvgm54
Let(
[
$txt=パスワード文字列フィールド;
$sql="ExecuteSQL(\"SELECT \\\"読み\\\" FROM \\\"読みテーブル\\\" WHERE \\\"文字\\\"='キー' \" ; \"\" ; \"\" )";
$res="";
$fnc="Case(IsEmpty($txt); $res;
Let([
#add=Evaluate(Substitute($sql; [\"キー\";Left($txt;1)]));
$res=List($res; #add);
$txt=Replace($txt;1;1;\"\")
]; Evaluate($fnc) )
)"
];
Substitute(Evaluate($fnc); [¶;"・"])
)
あるシステムのパスワード発行証を作成しています。
パスワード自体は、そのシステムで発行しコピーしてFMに持ってきます。
例えば以下のようなパスワードが発行されたとします
[ 8dNHDhKO ]
初期パスワードフィールド = 8dNHDhKO
パスワードの読みフィールド = はち・ディー小・エヌ大・エイチ大・ディー大・エイチ小・ケイ大・オー大
ルールは
英語はカタカナ、数字はひらがな
英語の大文字はカナの後ろに「大」、小文字は「小」
文字と文字の間は「・」
初期パスワードの文字を分解して1文字ずつ当てはめて、読みフィールドに格納
1文字ごとに「・」を追加していけばいいと思うのですが・・・
環境は以下です。
Windows10、FileMaker PRO 14
よろしくお願いします。
Pages: 1
[ Generated in 0.006 seconds, 6 queries executed - Memory usage: 622.37 KiB (Peak: 643.65 KiB) ]