エクセル2016でパワークエリやってみる備忘録11(備忘録8のでテストの平均を個人ごとに)

こちらは素人です。

エクセル2016でパワークエリ、ピボットテーブルを使います。
office2016スタンダードなので、パワーピボットタブ出ません。
(「開発」タブのCOMアドインにパワーピボットがない)


今回:
備忘録8のでテストの平均をDAX メジャーでやってみました。
あれは、教科ごとの平均だったので、個人ごとの平均をやってみます。


やること:
(0)下記は備忘録8と同じ元テーブルです。(点数は少し変えてます)

氏名 国語 算数 クラス
山田 50 60 1組
川田 80 200 2組
田中 50 60 1組
島田 80 60 2組
松田 50 70 1組

(1)普通にピボットテーブル作ります。(値は合計と個数の2列用意します。)
行ラベル 合計 / 値 カウント / 値2
1組 340 6
山田 110 2
国語 50 1
算数 60 1
松田 120 2
国語 50 1
算数 70 1
田中 110 2
国語 50 1
算数 60 1
2組 420 4
川田 280 2
国語 80 1
算数 200 1
島田 140 2
国語 80 1
算数 60 1
総計 760 10

(2)メジャー(DAX)を作成します。(←どう動くかなのお試し。実際は使わない)

メジャーの名前:名前ごとの合計点数(山田)
数式:=CALCULATE([合計 / 値],'テーブル1'[氏名]="山田")

以下、結果です。(行ラベルはずれてます。)
行ラベル 合計 / 値 カウント / 値2 名前ごとの合計点数(山田)
1組 340 6 110
山田 110 2 110
国語 50 1 50
算数 60 1 60
松田 120 2 110
国語 50 1 50
算数 70 1 60
田中 110 2 110
国語 50 1 50
算数 60 1 60
2組 420 4
川田 280 2
国語 80 1
算数 200 1
島田 140 2
国語 80 1
算数 60 1
総計 760 10 110


よく見ると、1組の方にだけ50点60点と山田の点数が表示されています。
・・・これだと山田しかできないので、メジャーを考え直します。

(3)ここでさらに寄り道をします。(素人です。ややこしい)
「合計/値」以外に「sumx」の合計を作ってみる。
DAXにはsum以外にsumx関数があり、
sumxは、フィルターコンテキストで評価されず、行単位で計算を行ってくれる関数らしいです。
・・・何のことか分かっていないけど、とりあえずsumとsumxで結果が違うかどうかも気になるので、
sumxのメジャーを作ってみます。

メジャーの名前:合計(sumx)
数式:=sumx('テーブル1',[値])

以下結果(行ラベルはずれてます。)
(合計 / 値も合計(sumx)変わらないものができました)

行ラベル 合計 / 値 カウント / 値2 合計(sumx)
1組 340 6 340
山田 110 2 110
国語 50 1 50
算数 60 1 60
松田 120 2 120
国語 50 1 50
算数 70 1 70
田中 110 2 110
国語 50 1 50
算数 60 1 60
2組 420 4 420
川田 280 2 280
国語 80 1 80
算数 200 1 200
島田 140 2 140
国語 80 1 80
算数 60 1 60
総計 760 10 760


(4)メジャー(DAX)を作成します(名前ごとの合計点数)
メジャーの名前:名前ごとの合計点数
数式:=CALCULATE([合計(sumx)],ALLSELECTED('テーブル1'[属性]))

CALCULATE関数で、先に作ったメジャー[合計(sumx)]をくくります。
(フィルター関数のALLSELECTEDは、指定した列に係るフィルター"だけ”を除去する関数)

ALLSELECTED('テーブル1'[属性])とすることで属性(科目)についてはフィルターをかけなければ、
名前ごとの合計が出るのではないかと考えました。

以下結果(行ラベルはずれてます。)
行ラベル 合計 / 値 カウント / 値2 合計(sumx) 名前ごとの合計点数(sumx allselected)
1組 340 6 340 340
山田 110 2 110 110
国語 50 1 50 110
算数 60 1 60 110
松田 120 2 120 120
国語 50 1 50 120
算数 70 1 70 120
田中 110 2 110 110
国語 50 1 50 110
算数 60 1 60 110
2組 420 4 420 420
川田 280 2 280 280
国語 80 1 80 280
算数 200 1 200 280
島田 140 2 140 140
国語 80 1 80 140
算数 60 1 60 140
総計 760 10 760 760

(国語と算数で同じ合計点が入っているのでいいかなと。)

(5)メジャー(DAX)を作成します(名前ごとの平均点)
メジャーの名前:平均sumx
数式:=DIVIDE([合計(sumx)],[カウント / 値])

以下結果(行ラベルはずれてます。)

行ラベル 合計 / 値 カウント / 値2 合計(sumx) 名前ごとの合計点数(sumx allselected) 平均sumx
1組 340 6 340 340 56.66666667
山田 110 2 110 110 55
国語 50 1 50 110 50
算数 60 1 60 110 60
松田 120 2 120 120 60
国語 50 1 50 120 50
算数 70 1 70 120 70
田中 110 2 110 110 55
国語 50 1 50 110 50
算数 60 1 60 110 60
2組 420 4 420 420 105
川田 280 2 280 280 140
国語 80 1 80 280 80
算数 200 1 200 280 200
島田 140 2 140 140 70
国語 80 1 80 140 80
算数 60 1 60 140 60
総計 760 10 760 760 76

(名前ごとに、2科目の平均が出ているようです)


その他sumで行ったらどうなるか?
メジャーをsumxでなくsumでやっても同じ結果でした。
(4)の変更
メジャーの名前:名前ごとの合計点数(sum allselected)
数式:=CALCULATE([合計 / 値],ALLSELECTED('テーブル1'[属性]))
(5)の変更
メジャーの名前:平均sum
数式:DIVIDE([合計 / 値],[カウント / 値])

以下結果(行ラベルはずれてます。)


行ラベル 合計 / 値 カウント / 値2 名前ごとの合計点数(sum allselected) 平均sum
1組 340 6 340 56.66666667
山田 110 2 110 55
国語 50 1 110 50
算数 60 1 110 60
松田 120 2 120 60
国語 50 1 120 50
算数 70 1 120 70
田中 110 2 110 55
国語 50 1 110 50
算数 60 1 110 60
2組 420 4 420 105
川田 280 2 280 140
国語 80 1 280 80
算数 200 1 280 200
島田 140 2 140 70
国語 80 1 140 80
算数 60 1 140 60
総計 760 10 760 76


仕組みが分かっていないので苦戦しています。
次にランキングをつけようと思ったのですが、理解できない。
参考にしないで下さい。