番組名と番組開始時刻ごとの視聴率を表示するテーブルを作成しました。
視聴率で降順ソートかけて、視聴率が高い順に番組を表示しようと。
ただ、番組全部表示するとあまりにも多いので、番組名に「上位Nフィルタ」をかけて、8件だけ表示するようにしていました。
しかし、問題発覚。
上位8件だけ表示していたのを、30件表示しようとしてみたら、それまで8位以内に表示されていなかった番組が、急に2位に出てきたんです。
結論から言うと、単純なミスでした。
複数カラムのテーブルは上位Nフィルタかけないほうが無難
上位Nフィルタってこんな感じでかけますよね。
例えば「番組名」というデータに対して、「平均視聴率」の上位N個を表示するように指定します。
しかし一方で、テーブルに表示されているのは「番組名」「視聴率」に加えて、「番組開始時刻」もあります。
ここで問題になるのが、番組名がユニークでない場合、つまり同じ番組の再放送があったりすると、表の中ではそれぞれ別の行として表示するんです。
つまり、テーブルの中に表示されるのは、放送時刻と番組名がバラバラなデータなのに対して、フィルタでは放送時刻を無視した、全ての再放送を含めた平均視聴率で計算されてしまいます。
例えば、上位8位のフィルタをかけているとき、8位の番組の番組平均視聴率が10%だったとします。
ある番組Aは、10回再放送されており、1回だけ30%の視聴率を取った回がありましたが、10回の平均を見ると9%です。
この番組Aは平均視聴率が9%なので、上位8フィルタの時点ではじかれてしまっています。
しかし、上位Nの数を30に設定したら、表示されるようになりました。
表示されるようになったものの、表示されるときは番組丸ごとではなく、放送時刻が違う回ごとで表示されるので、30%という視聴率を取った回が1位に躍り出ました。
というような感じです。
結論、ユニークではない複数カラムのテーブルをつくってソートするとき、上位Nフィルタは使わないほうが無難だなと思いました。
上位だけ表示させたい動機ってそんなに強くないですし。
ちゃんと放送時刻×番組名での上位Nを表示させたかったら、放送時刻×番組名での平均視聴率を算出するメジャーを作ってやるべきですかね。
ともかく、フィルタの集計に使うデータと表示されるデータを一致させておかないと怖いなと思いました。