初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-09-22 13:52:59

ダーツ
Member

期間範囲の表示方法

いつもありがとうございます。

FM12アドバンス Win7で利用しております。

受注日のフィールドに日付をいれると受注週のフィールドに何週目かが出るようにしたいのですが
フィールドとして 第一週目・第二週目・第三週目・・・・・・・
とフィールドがありそれぞれ計算式で期間が出るようにしてます。

9月なら 第一週目のフィールドが2017/09/01...2017/09/06
     第二週目のフィールドが2017/09/07...2017/09/13
     第三週目のフィールドが2017/09/14...2017/09/20
    (最終第五週目まで設定)

受注日に日を入力すると受注週のフィールドに第一週目 第二週目 第三週目・・・・・と
出るようにしたいのですが

受注週のフィールド=Case(受注日フィールド=第一週目フィールド;"一週目”;受注日フィールド=第二週目フィールド;"二週目”;受注日フィールド=第三週目フィールド;"三週目”;・・・・・・
の計算式を入れてますが反映されません

通常の検索する場合
2017/09/01...2017/09/06で検索すれば2017/09/01から2017/09/06までの期間が検索結果として出てくるので
上記Case関数を使ってみたのですが何が違うのでしょうか?

ご教授お願いいたします。

Offline

#2 2017-09-22 14:35:46

fukurow
Member

Re: 期間範囲の表示方法

その例えのとおりなら 日付を7で割った商に1たせば良いかもね

Offline

#3 2017-09-22 16:16:18

ダーツ
Member

Re: 期間範囲の表示方法

fukurow様ありがとうございます。
私の質問の仕方が不十分でしたので補足しますと
月ごとに毎週木曜日から次の水曜日までの1週間を1つのサイクルとして
1日から第一水曜日までを一週目 第一木曜日から次の水曜日までを二週目・・・・
という形で集計を出したいです。
第一木曜日が1日の場合は一週目 第一木曜が2日以降の場合二週目という形で変動されます。

受注週のフィールド=Case(受注日フィールド=第一週目フィールド;"一週目”;受注日フィールド=第二週目フィールド;"二週目”;受注日フィールド=第三週目フィールド;"三週目”;・・・・・・

9月の場合第一週目の期間が9月1日から9月6日の間であれば受注週のフィールドに一週目 9月7日から9月13日の間であれば受注週のフィールドに二週目と出るやり方をご教授いただければ幸いです。

別テーブルで日付というフィールドと何週目というフィールドを作り1日ごとに日付を入れてそれに対して何週目かを入れて リレーションを組んで
ルックアップを行うのも一つのやり方だと思うのですが関数で簡単に出る方法をご教授いただければと思っております。

Offline

#4 2017-09-22 19:49:18

Hiro
Member

Re: 期間範囲の表示方法


Let([
   $odr=受注日フィールド;
   $dt=Date(Month($odr); 0; Year($odr));
   $fnc=
      "Case( $odr=$dt; ValueCount($res)+1;
         Let([
            $dt=$dt+1;
            $res=List($res; Case(DayOfWeek($dt)=5; $dt))
         ]; Evaluate($fnc))
      )";
   $res=KanjiNumeral(Evaluate($fnc)) & "週目"
];
   $res
)

Offline

#5 2017-09-22 21:52:01

ダーツ
Member

Re: 期間範囲の表示方法

Hiro様ありがとうございます!!
いただいた計算式をコピペして試してみましたら結果が1週ずれてましたので

   $res=KanjiNumeral(Evaluate($fnc)) & "週目"
];を
   $res=KanjiNumeral(Evaluate($fnc)-1) & "週目"
];にしましたら無事反映しました
ありがとうございます

Offline

#6 2017-09-22 22:38:34

Hiro
Member

Re: 期間範囲の表示方法

#5 ダーツ wrote:

Hiro様ありがとうございます!!
いただいた計算式をコピペして試してみましたら結果が1週ずれてましたので

   $res=KanjiNumeral(Evaluate($fnc)) & "週目"
];を
   $res=KanjiNumeral(Evaluate($fnc)-1) & "週目"
];にしましたら無事反映しました
ありがとうございます

うむ?? #3解説の通りなら、#4式のままで良いと思いますよ。
#3の説明は、
・9月1日から9月6日の間であれば受注週のフィールドに一週目
・9月7日から9月13日の間であれば受注週のフィールドに二週目

と出るやり方 ⇒ なら、#4式 で良いはずです

Last edited by Hiro (2017-09-22 22:42:43)

Offline

#7 2017-09-23 02:05:57

Hiro
Member

Re: 期間範囲の表示方法

> 第一木曜日が1日の場合は一週目
> 第一木曜が2日以降の場合二週目

今更ですが、上記の条件を見逃していました。
すみませんが、#4式は下式に修正してください。

【修正式】(赤字が修正箇所)
Let([
   $odr=受注日フィールド;
   $dt=Date(Month($odr); 0; Year($odr));
   $fnc=
      "Case( $odr=$dt; ValueCount($res)+1;
         Let([
            $dt=$dt+1;
            $res=List($res; Case(DayOfWeek($dt)=5 and Day($dt)≠1; $dt))
         ]; Evaluate($fnc))
      )";
   $res=KanjiNumeral(Evaluate($fnc)) & "週目"
];
   $res
)

Offline

#8 2017-09-23 10:21:18

Shin
Member

Re: 期間範囲の表示方法

Div ( 受注日 + 3 ; 7 ) - Div ( 受注日 - Day ( 受注日 ) - 3 ; 7 )
で計算できます。
今年の8月は第六週が存在するのですが、それで良いのですよね。
ちなみに、受注日 - Day ( 受注日 ) は、Date ( Month ( 受注日 ) ; 0 ; Year ( 受注日 ) ) と同等です。

Last edited by Shin (2017-09-23 10:48:57)

Offline

#9 2017-09-23 11:49:49

Hiro
Member

Re: 期間範囲の表示方法

>#8 Shinさん
> Div ( 受注日 + 3 ; 7 ) - Div ( 受注日 - Day ( 受注日 ) - 3 ; 7 )

あゝ、なるほど、流石、
・日付を数値に変えて7進数の桁計算に持ち込むアイデアですね!
・指定曜日(木曜→5)の週起点補正(8-5→3)がポイントかな?

Last edited by Hiro (2017-09-23 13:23:40)

Offline

#10 2017-09-23 17:54:39

ダーツ
Member

Re: 期間範囲の表示方法

Hiro様 Shin様いつも本当にありがとうございます!!

Offline

#11 2017-09-23 18:10:06

Shin
Member

Re: 期間範囲の表示方法

> 日付を数値に変えて7進数の桁計算に持ち込むアイデアですね!
そう考えてもいいのでしょうが、考え方のスタートは、FMの日付の起点から何週目、という計算です。

> 指定曜日(木曜→5)の週起点補正(8-5→3)がポイントかな?
私は、日付をシフトする、と呼んでいます。木曜日起点を日曜日起点にカレンダー全体をシフトさせるために、全体を +3 または -4 します。
受注日 - Day ( 受注日 ) - 3 は、本来は、Date ( Month ( 受注日 ) ; 1 ; Year ( 受注日 ) ) - 4 と言う式ですので、Date ( Month ( 受注日 ) ; 0 ; Year ( 受注日 ) ) - 3 または、Date ( Month ( 受注日 ) ; -3 ; Year ( 受注日 ) ) となります。

ちなみに、一般式は。
Let (
[
d = 発注日 ;
DOW = 5 // 日曜日:1 , 月曜日:2, ... 木曜日:5,...
] ;
Div ( d + 8 - DOW ; 7 ) - Div ( d - Day ( d ) + 2 - DOW ; 7 )
)

Last edited by Shin (2017-09-25 16:38:33)

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.016 seconds, 9 queries executed - Memory usage: 525.61 KiB (Peak: 546.15 KiB) ]