お世話になっております。
添付のようなイメージで、カスタマイズビューを作成しようとしています。
1日毎の各店舗の売上額、昨年実績との比較、予算との比較の一覧表です。
全体集計はこちらを参考にすればできそうなのですが、
エリアごとの集計(エリア小計)の実現方法がわからず引っかかっています。
参考にすべきページ等があれば、ご教示頂けると幸いです。
何卒よろしくお願いいたします。
なお、この表のレイアウトを上下2つ並べ、
上を単日(1日分)の実績、
下を累計(月初~当日まで)の実績を表示したいと考えています。
rex0220様
ありがとうございます。JavaScriptはあまり自信がなく、まだSQLの方が分かるので
alasqlにて対応しました。
ROLLUPで集計された行には、それぞれ上記の表と同様に、タイトルを入れるように
しました。
alasql(
"SELECT \
CASE WHEN a.[エリア] IS NULL THEN ‘全体’ ELSE a.[エリア] END AS [エリア], \
CASE WHEN a.[エリア] IS NULL THEN \
CASE WHEN a.[エリア] IS NULL THEN ‘全社合計’ ELSE ‘エリア小計’ END \
ELSE a.[店名] END AS [店名], \
SUM(b.[予算]) as [予算], \
SUM(b.[税抜売上額]) as [税抜売上額], \
SUM(b.[予算比]) as [予算比] \
FROM ? AS a LEFT JOIN ? as b ON a.[店名] = b.[店名] \
GROUP BY ROLLUP( a.[エリア] , a.[店名]) \
", [obj.rs1,obj.rs2]);
obj.rs1には、エリアや店名が登録されたマスタ、
obj.rs2には、店舗ごとの実績が入っており、
それを 店名でJOINしています。※実際にはコードを使う予定です。
ここで問題があり、エリア・店名には間違いなく値が入っているのですが
a.[エリア] IS NULL とすると、NULLで返ってきて、エリアのカラムの全ての
行が"全体"となってしまっています。
店名も同様で、全ての行に"全社合計"が入ってしまいます。
alasqlの癖でしょうか?一応、IS NULLは対応しているようなのですが・・・。
もしアドバイスを頂けるようでしたら、何卒よろしくお願いいたします。
IS NULL には、対応しているようですが、上のコードだと動きが変ですね。
回避策として、NULL 変換を分けると問題ないようです。
なお、2番目の CASE 文を少し直しています。
var obj = {
rs1: [
{'エリア': 'A01', '店名': 'B01'},
{'エリア': 'A01', '店名': 'B02'},
{'エリア': 'A02', '店名': 'B03'},
],
rs2: [
{'店名': 'B01', '予算': 100, '税抜売上額': 110, '予算比': 1.1 },
{'店名': 'B02', '予算': 100, '税抜売上額': 120, '予算比': 1.2 },
{'店名': 'B03', '予算': 100, '税抜売上額': 80, '予算比': 0.8 },
]
};
var rs3 = alasql(
"SELECT \
a.[エリア], \
a.[店名], \
SUM(b.[予算]) as [予算], \
SUM(b.[税抜売上額]) as [税抜売上額], \
SUM(b.[予算比]) as [予算比] \
FROM ? AS a LEFT JOIN ? as b ON a.[店名] = b.[店名] \
GROUP BY ROLLUP( a.[エリア] , a.[店名]) \
", [obj.rs1,obj.rs2]);
var rs4 = alasql(
"SELECT \
CASE WHEN [エリア] IS NULL THEN '全体' ELSE [エリア] END AS [エリア] , \
CASE WHEN [店名] IS NULL THEN \
CASE WHEN [エリア] IS NULL THEN '全社合計' ELSE 'エリア小計' END \
ELSE [店名] END AS [店名], \
[予算], \
[税抜売上額], \
[予算比] \
FROM ? \
", [rs3]);
console.log('t3', rs4);
上記にて対応できました!誠にありがとうございました!