« 2026年6月 | トップページ | 2026年8月 »

2026年7月

AI利用のカテゴリーマスターさん出現

1. AI利用のカテマスさん

Yahoo!知恵袋でAI利用のカテゴリーマスターさんが散見されるようになりました。

Yahoo!知恵袋の利用ルールでは、AIを利用した回答にはその旨を記載することになっていますが、AI利用のカテゴリーマスターさんの中には回答にその記載が無いものがあります。でも、AI特有の言い回しが貼られているので直ぐに分かります。

AIの普及とともにYahoo!知恵袋の質問数が減り、相対的にWeb検索やAI/LLMを活用する能力が無い人の質問の比率が増えているようです。
ある程度の知識があるカテマスさんが適切なプロンプトを作成して得たAIの回答をコピペしているので、概ね適切な回答になっています。
またAIの回答は解説も付いているので、根拠の理解の助けにもなります。
なので、AIを使いこなせない質問者さんには好評で、役に立っています。

でも、明らかに不適切なAIの回答をそのまま貼っている恥ずかしい回答や、想定漏れの危険な回答も僅かにあります。
同じIDでAIを使用したと思われる素晴らしい回答とAIを利用しないで回答したと思われる酷い回答があり、その落差から素の能力が低いと思われる回答者もいます。AIで作成した旨が無い回答者の中には、コメントに対して返信しない人がいます。AIで答えが得られなかったのかも知れません。

AIの答えをそのまま貼り付けているような人はAIに仕事を奪われるでしょう。Yahoo!知恵袋の回答者のような役割はAIに置き換わり始めたと思います。一方で、AIを利用して短くて正確な回答をする人の仕事は一部が残るでしょう。

 

2. AIを使えばそれだけで良い?

ところで、「AIを使えば良い」というお気楽な回答も散見されますが、AIの回答の妥当性を評価することの重要性が欠落しています。AIの回答の妥当性を評価しないで、そのまま仕事で使われたら、怖いです。現実は、検証能力が無い人がAIで爆弾を抱えた成果物を増産している思われるので、それに対抗するために有識者がAIを駆使して成果物の信頼性を検証する技術開発が進められています。

当ブログでもAIを利用して得たコードを掲載していますが、AIのコードは間違っていたり冗長だったりするので、内容を理解したうえで掲載しています。

答だけでは駄目で「根拠を示す」ことが必要です。Yahoo!知恵袋には根拠を示さない回答が多いので、妥当性を自分で確認することが必要です。初心者なのでコピペで動くコードが欲しいと要望する人がいて、それに解説も付けずに回答している人がいますが、恐ろしいです。


参考

  • AIに丸投げしたデバッグ100件を分類したら、逆にバグを深くする5パターンが見えた : Zenn : 2026/07/18
    https://zenn.dev/kenimo49/articles/ai-debug-100-cases-5-deepening-patterns

  • Microsoft Edge HTML Document (.xml)をエクセルで表示 : Yahoo!知恵袋 : 26/08/27
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10330880700
    AI利用とは書いていないので、自分で書いたのでしょう。AIのように高速に長い文書をタイプする能力がある人みたいです。専門家の知識は役立ちますね。なるほど評価が付いています。

  • 初心者がマクロを作成するために適したAI ⇒ AIに作らせば余裕です。: Yahoo!知恵袋 : 2026/07/29
    https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10330121865
    「AIに作らせば余裕です。」など言う人がいる会社は、危険なので潰れてほしいですね。

  • 経営層の品質軽視やAIの酷使でソフトウェア開発の信頼低下が問題に : ZD NET : 2026/06/08
    https://japan.zdnet.com/article/35248576/
    「テスト未実施のコードを本番環境投入している企業の割合は10社中6社」
    ⇒ 6割の企業が事故を起こす可能性があるということでしょうか? 事故を起こす前に倒産してくれると嬉しいですね。6割の企業名を公表してくれると、嬉しいのですが。ISO27001認証の有無で取引先の選別が必要ですね。

  • 実演あり】Excel作業10時間→5分!AI活用で生産性が3倍になる業務自動化テク5選【Claude・Gemini】 : ダイさん・AI活用の専門家 : 2026/09/05
    https://www.youtube.com/watch?v=3cO68kyI6ho
    仕事のやり方が変わりますね。この人は答えと妥当性を評価するための方法が頭にあり、その入力作業をAIにさせていますね。なので、的確なプロンプトを与えることができます。答えと妥当性を評価するための方法が思い浮かばない人が使うと、危険ですね。
    私がExcelでやるなら、Power Query、Power Pivotを使い、データの妥当性には平均単価や偏差も使用しますね。
    Power BI + Copilotでの予測するとどうなるのか知りたいですね。

AIとAIを使う人の関係は、作業者と管理者、従業員と経営者の関係に似ていると思います。管理や経営の知識が無い人がAIを使うと、時限爆弾製造機になる気がします。

| | コメント (0)

数量と単価の表が別で、単価表は改定日のみの場合のExcelによる売上金額計算

1. 前置き

数量と単価が1:1に対応しているデータでは、売上金額は「数量 × 単価」で求まります。
しかし、数量と単価が別の表で、単価表に改定日しかない場合は、数量表の日付が単価表に無い場合があるので、日付の完全一致条件では数量に対応した単価を求めることができません。また、日付だけでなく品名など単価を特定する条件が複数になると、VLOOKUPなどの関数の近似一致などの検索モードが使えなくなります。
なので、計算式に工夫が必要になります。

ピボットテーブルで集計するメジャーのDAX式でも同様の工夫が必要です。

DAX式は、式にセルアドレスでは無くテーブル名と列名を使用するので、変数の意味が分かりやすく、ワークシート式より可読性が良いです。

そこで、メジャーによる売上金額の集計式を紹介します。

2. 入力

本記事では、Excelのテーブルを入力として説明します。Power Queryで取込み・整形できるものなら、その他の形式の入力データでも良いです。

テーブル名 : '実績数'

日付 品名 数量
26/04/01 品A 1
26/04/01 品B 2
26/04/16 品A 1
26/05/01 品A 2
26/05/16 品B 2

テーブル名 : '実績単価' : 日付は単価適用開始日

日付 品名 単価
26/04/01 品A 10
26/04/01 品B 10
26/04/15 品A 11
26/05/15 品B 12

3. 出力

ピボットテーブル(Power Pivot、データモデルから)

年月 日付 品A 品B 全体の 合計 / 数量 全体の M売上 全体の M単価
合計 / 数量 M売上 M単価 合計 / 数量 M売上 M単価
26/04 26/04/01 1 10 10.0 2 20 10.0 3 30 10.0
26/04/16 1 11 11.0       1 11 11.0
26/04 集計 2 21 10.5 2 20 10.0 4 41 10.3
26/05 26/05/01 2 22 11.0       2 22 11.0
26/05/16       2 24 12.0 2 24 12.0
26/05 集計 2 22 11.0 2 24 12.0 4 46 11.5
総計 4 43 10.8 4 44 11.0 8 87 10.9

4. ワークシート式での集計(参考)

月次売上まで一気に計算することも可能だと思いますが、セルアドレスを変数とした複雑な式になり、可読性が悪化すると思われます。
そこで、'実績数'表に単価をXLOOKUPで参照して、参照値から売上金額を計算することで、各式を短くし可読性を上げます。また、単価を確認できるのでデバッグがしやすくなります。

◢ A B C D E F
1 実績売上 : ワークシート式      
2 年月 日付 品名 数量 単価 売上
3 26/04 26/04/01 品A 1 10 10
4 26/04 26/04/01 品B 2 10 20
5 26/04 26/04/16 品A 1 11 11
6 26/05 26/05/01 品A 2 11 22
7 26/05 26/05/16 品B 2 12 24
A3 = TEXT(B3, "yy/mm")
E3 = XLOOKUP(
B3,
FILTER(実績単価[日付], 実績単価[品名] = C3),
FILTER(実績単価[単価], 実績単価[品名] = C3),
"",
-1
)
F3 = D3 * E3

月次集計は、Excelの普通のピボットテーブルで集計します。

以下は、ワークシート関数による集計例です。

SUMIFSによる月次売上集計

◢ H I J
11 月次売上集計  
12 年月 品A 品B
13 26/04 21 20
14 26/05 22 24
H13 = UNIQUE(A3:A7)
I12 = TOROW(UNIQUE(C3:C7))
I13 = SUMIFS(F3:F7, A3:A7, H13#, C3:C7, I12#)

Microsoft 365であれば、PIVOTBYが使えるので、簡単になります。

PIVOTBYによる月次・日次売上集計

◢ L M N O P
17   品A 品B 合計  
18 26/04 26/04/01 10 20 30
19 26/04 26/04/16 11   11
20 26/04   21 20 41
21 26/05 26/05/01 22   22
22 26/05 26/05/16   24 24
23 26/05   22 24 46
24 総計   43 44 87
L17 = PIVOTBY(A3:B7, C3:C7, F3:F7, SUM,, 2)

余談 : 計算に関してはピボットテーブル程の自由度はありません。

5. Power Pivotによる集計(本編)

Power Pivotのメジャーを使うために、各テーブルをデータモデルに追加します。

1) '実績数'をデータモデルに追加

  1. '実績数'テーブルのセルを選択し、[データ]-[テーブルまたは範囲から]でPower Queryエディタに取込む。右の名前を"実績数'にする。
  2. 適切ではないデータ型の列を選択し、[変換]-[データ型]で適切な型に変更する。
  3. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む...]で、"接続の作成のみ"と"このデータをデータモデルに追加する"を選択し[OK]。

2) '実績単価'をデータモデルに追加

  1. '実績単価'テーブルのセルを選択し、[データ]-[テーブルまたは範囲から]でPower Queryエディタに取込む。右の名前を"実績単価'にする。
  2. 適切ではないデータ型の列を選択し、[変換]-[データ型]で適切な型に変更する。
  3. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む...]で、"接続の作成のみ"と"このデータをデータモデルに追加する"を選択し[OK]。

3) '日付'テーブルを生成しデータモデルに追加

本例では日付テーブルが無くても良いですが、前年比などを出す場合には日付テーブルが必要になります。(ここで示すPower Query Mのコードでは無く、Excelのワークシート式で作成してデータモデルに追加しても良いです。)

  1. [データ]-[データの追加v]-[他のデータソースから]-[空のクエリ]で、Power Queryエディタに空のクエリを生成する。右の名前を"日付"にする。
  2. [ホーム]-[詳細エディタ]で、次のコードに書き換える。
let
Source1 = 実績数,
Source2 = 実績単価,
    // ── 集計対象期間の決定 ──────────────────────────
  MinDate = Date.StartOfMonth(List.Min({List.Min(Source1[日付]), List.Min(Source2[日付])})),
MaxDate = Date.EndOfMonth(List.Max({List.Max(Source1[日付]), List.Max(Source2[日付])})),
    // ── 日単位カレンダーの生成 ──────────────────────
DateList = List.Dates(MinDate, Duration.Days(MaxDate - MinDate) + 1, #duration(1, 0, 0, 0)),
CalendarTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"日付"}),
型設定済 = Table.TransformColumnTypes(CalendarTable, {{"日付", type date}}),
    // ── 会計年度(4月始まり)の基準日・年・月を1回だけ算出 ──
// EDATE([@日付], -3) 相当:3ヶ月前にずらすことで
// 会計年度の「年」と「月番号(4月=1~翌3月=12)」を取得
会計基準日追加 = Table.AddColumn(型設定済, "会計基準日", each Date.AddMonths([日付], -3), type date),
会計年追加 = Table.AddColumn(会計基準日追加, "会計年", each Date.Year([会計基準日]), Int64.Type),
会計月追加 = Table.AddColumn(会計年追加, "会計月", each Date.Month([会計基準日]), Int64.Type),
    // ── 表示用列の追加 ──────────────────────────────
    // 年:YEAR([@日付])
列_年 = Table.AddColumn(会計月追加, "年", each Date.Year([日付]), Int64.Type),
    // 月:TEXT([@日付],"m月") ※ゼロ埋めなし
列_月 = Table.AddColumn(列_年, "月", each Text.From(Date.Month([日付])) & "月", type text),
    // 年月:TEXT([@日付],"yy/mm") ※ゼロ埋めあり
列_年月 = Table.AddColumn(列_月, "年月", each
let
yy = Text.PadStart(Text.From(Date.Year([日付]) - 2000), 2, "0"),
mm = Text.PadStart(Text.From(Date.Month([日付])), 2, "0")
in
yy & "/" & mm,
type text),
    // 四半期.:INT((MONTH(x)-1)/3)+1 & "Q" ※年度なし
列_四半期ドット = Table.AddColumn(列_年月, "四半期.", each
let
四半期番号 = Number.IntegerDivide([会計月] - 1, 3) + 1
in
Text.From(四半期番号) & "Q",
type text),
    // 四半期:(YEAR(x)-2000) & "/" & 四半期番号 & "Q" ※ゼロ埋めなし
列_四半期 = Table.AddColumn(列_四半期ドット, "四半期", each
let
四半期番号 = Number.IntegerDivide([会計月] - 1, 3) + 1
in
Text.From([会計年] - 2000) & "/" & Text.From(四半期番号) & "Q",
type text),
    // 半期:(YEAR(x)-2000) & "/" & 半期番号 & "H" ※ゼロ埋めなし
列_半期 = Table.AddColumn(列_四半期, "半期", each
let
半期番号 = Number.IntegerDivide([会計月] - 1, 6) + 1
in
Text.From([会計年] - 2000) & "/" & Text.From(半期番号) & "H",
type text),
    // 期:IF(MONTH(x)<7,"上期","下期") ※年度なし
列_期 = Table.AddColumn(列_半期, "期", each
if [会計月] < 7 then "上期" else "下期",
type text),
    // 年度:(YEAR(x)-2000) & "年度" ※ゼロ埋めなし
列_年度 = Table.AddColumn(列_期, "年度", each
Text.From([会計年] - 2000) & "年度",
type text),
    // 年度.:YEAR(x) ※西暦そのまま、年度なし表示との組み合わせ用
列_年度ドット = Table.AddColumn(列_年度, "年度.", each [会計年], Int64.Type),
    // 内部計算用の一時列を削除し、ご指定の列順に並べ替え
不要列削除済 = Table.RemoveColumns(列_年度ドット, {"会計基準日", "会計年", "会計月"}),
最終結果 = Table.ReorderColumns(不要列削除済,
{"日付", "年月", "四半期", "半期", "年度", "年度.", "四半期.", "期", "月", "年"})
in
最終結果

解説 : '実績数'と'実績単価'テーブルの最小日の月初日から最大日の月末日の日付テーブルを生成します。4月始まりの年度列を生成します。これにより、月、四半期、半期、年度の集計が可能になります。また、DAXのタイムインテリジェンス関数が使えるようになります。

4) リレーションの作成

次のいずれかの方法でリレーションを設定する。

  1. [Power Pivot]-[管理]-[表示]-[ダイアグラムビュー]。
  2. [データ]-[データモデルv(緑アイコン)]-[データモデルの管理]-[ホーム]-[表示]-[ダイアグラムビュー]。
  3. [データ]-[データモデルv(緑アイコン)]-[リレーションシップ]-[編集]。

ファクトテーブル *--<--1 ディメンジョンテーブル(関連)
'実績数'[日付] *--<--1 '日付'[日付]

操作方法

  • ダイアグラムビューでは、(多)から1へ項目をドラッグする。
  • リレーションシップでは、上段が(多)で下段の関連が1になるようにテーブルと項目を設定する。

注意 : '実績単価'[日付]と'日付'[日付]は1:1に対応していないのでリレーションを取らない。(メジャーの式で双方の日付を比較処理します。)

5) ピボットテーブルの生成

[挿入]-[ピボットテーブルv]-[データモデルから]で、ピボットテーブルを生成する。

6) メジャーの作成

次のいずれかの方法でメジャーを作成する。

  1. ① ピボットテーブルを選択し、右に"ピボットテーブルのフィールド"を表示。② メジャーを作成するテーブル('予算'または'実績)を右クリックし[メジャーの追加]。式の先頭は「=」から始める。
  2. [Power Pivot]-[管理]でメジャーを書くテーブルの下の空白セルを選択。数式バーにメジャーを入力する。先頭は、「メジャー名:=」から始める。
  3. [データ]-[データモデル(緑アイコン)v]-[データモデルの管理]で、メジャーを書くテーブルの下の空白セルを選択。数式バーにメジャーを入力する。先頭は、「メジャー名:=」から始める。

'実績単価'に作成するメジャー

M直近単価:=CALCULATE(	// 第2引数で絞り込んだ範囲で第1引数の計算をする
MAX('実績単価'[単価]), // 第2引数のFILTERに合致する'実績単価'[単価])は1つ。MAXで取得
FILTER(
'実績単価', // '実績単価'テーブルを絞り込む
'実績単価'[品名] = MAX('実績数'[品名]) && // '実績単価'[品名]が'実績数'[品名]に等しい
'実績単価'[日付] <= MAX('実績数'[日付]) // '実績単価'[日付]が'実績数'[日付]以下
)
)

'実績数'に作成するメジャー
M売上:=SUMX(
'実績数',
'実績数'[数量] * [M直近単価]
)

解説 : SUMXは、第1引数の'実績数'テーブルの1行毎に、第2引数の掛け算を行ったものを合計します。

余談 : ワークシート式の売上は「I13 = SUMIFS(F3:F7, A3:A7, H13#, C3:C7, I12#)」ですが、この式のF3:F3だけでは何を合計しているのかが分からずそのアドレスの場所を見る必要があります。メジャーだと「'実績数'[数量] * [M直近単価]」なので、数量×単価を合計していることが一目で分かり、可読性が良いです。また、検索モードも、XLOOKUPの第5引数の「-1」より「CALCULATE(MAX(...FILTER(...'実績単価'[日付] <= MAX('実績数'[日付])」の方が何を計算しているのかが分かりやすいと思います。

M単価:=DIVIDE([M売上], SUM('実績数'[数量]))

解説:単価 = 売上金額 ÷ 数量。DIVIDEは、分母が0でもエラーを表示しない割り算関数。

余談 : 以上のように、メジャーは変数にセルアドレスでは無くテーブル名と列名を使用するので、変数が何を指しているのかが分かりやすく、可読性が良い。式の中にコメントが書けるので、可読性が良い。ワークシート関数に似ているDAX関数名があるので、分かりやすい。

7) ピボットテーブルの設定

  1. 次のように項目を設定します。
  • フィルター : '日付'[年度]。--> このようにした場合は、必ず1つの年度を選択する。
  • 列 : '実績数'[品名]、Σ値。
  • 行 : '日付'[年月]、'日付'[日付]。
  • Σ値 : '実績数'[数量](合計)、[M売上]、[M単価]。
  1. ピボットテーブルの[年度]の[▼]で、26年度以外のチェックを外す。

  2. [ピボットテーブル分析]-[オプション]-[レイアウトと書式]で、"更新時に列幅を調整する"のチェックを外す。

  3. [ピボットテーブル分析]-[オプション]-[表示]で、"データのないアイテムを行/列に表示する"のチェックを外す。(これをチェックする場合は、フィルターやスライサーで表示しないディメンジョン項目の選択を解除する。)

  4. [デザイン]-[レポートのレイアウト]-[表形式で表示]。

  5. [デザイン]-[総計v]-[行と列の集計を行う]。

  6. 小計を表示する列項目を右クリックし、["xxx"の小計]をクリックして✓マークを付ける。

  7. [デザイン]-[ピボットテーブルスタイル]でベースとするスタイルを右クリックし[複製]。ユーザー設定のスタイルを右クリックし[変更]でスタイルを変更。

  • 小計列 1 : 網掛け
  • 列小見出し 1 : 上罫線(太)
  • 列小見出し 2 : 上罫線(細)
  • 総計列 : 左罫線(太)、網掛け
  • 総計行 : 上罫線(太)、網掛け

参考 : ピボットテーブルは、セル毎の書式や同じ項目に異なる粒度の値を設定することができません。なので、ピボットテーブルではできない表は、集計をピボットテーブルで行い、最終的な表は普通のワークシート表からGETPIVOTDATAでピボットテーブルの値を参照することで作成します。

6. サンプル

ダウンロード - 260729lookup.xlsx

7. 関連情報

| | コメント (0)

Excel Power Pivotで利益偏差を単価要因と数量要因と原価要因に分ける

1. 前書き

予算と実績の売上偏差や利益偏差を売価要因と数量要因と原価要因に分ける計算を、Excel Power Pivotのメジャー(DAX)で行いました。
メジャーを使うと、ワークシート式より式の数が少なくなり、式にセルアドレスを使用しないので可読性が向上し、ミスが減ります。
本例では、Power Queryのヘルパークエリ[*1]を用いた複数シートの結合など、モダンExcelの色々な機能を使用していますが、モダンExcelを知らない人でも作成できるように手順を記載しています。
モダンExcelを知っている人は、途中を飛ばしてメジャーだけを見てください。
検証をあまりしていないので、使用される場合は検証を行い、自己責任で使用して下さい。

[*1] ヘルパークエリを使うと、Power Query Mのコードを直接書かずに、クリック操作で関数クエリを作成・編集することができます。

対予算売上偏差の数量要因と売価要因

売上偏差 = 実績数量 × 実績売価 - 予算数量 × 予算価
= 純粋な数量要因 + 純粋な売価要因 + 交差項(数量と売価が同時に動いた分)

「按分」なので、交差項を数量側・売価側に均等に振り分ける平均法(折半法)を使います。

数量要因 = (実績数量-予算数量) × (予算売価+実績売価)/2 ← 平均売価を使う
売価要因 = (実績売価-予算売価) × (予算数量+実績数量)/2 ← 平均数量を使う

とすると、数式的に必ず「数量要因 + 売価要因 = 売上偏差」が成立します(交差項がちょうど半分ずつ両方に含まれる形になるため)。

対予算利益偏差の数量要因と売価要因と原価要因

利益は 数量 × (売価 − 総原価) なので、変数を「数量」と「粗利売価(売価−原価)」の2つとみなすと、既存の M数量要因予 / M売価要因予 と全く同じ「平均法」の式が使えます。

粗利売価の差 Δ(売価−原価) をさらに「売価要因」と「原価要因」に分解すればよいので、3要因に拡張した形になります。

数量要因 = Δ数量 ×(実績粗利売価+予算粗利売価)/2
売価要因 = Δ売価 ×(実績数量+予算数量)/2
原価要因 = −Δ原価 ×(実績数量+予算数量)/2 ※原価上昇は利益を下げるのでマイナス

この3つを足すと [M利益差予] に一致します(売上偏差の2要因分解と同じ代数的恒等式を使っているため)。

💡 価偏差要因の調査方法

総原価の要因分析は、掘り下げが必要です。総原価の科目別などの内訳をモデル化すれば、掘り下げが可能になります。Excelのピボットテーブルをダブルクリックするとドリルダウンができまが、要因分析をするならPower BI他のBIツールの方が便利だと思います。例えば、Power BIの分解ツリーは、影響の大きいい要因をツリーを辿ることで調べることができます。

余談 : このビジュアルはExcelに欲しいですね。ExcelもGoogle Sheetsにシェアを奪われ始めているので、ExcelのBI機能を強化して欲しいです。Power BI for Excel Add Onがあると嬉しいです。個人作業の調査ツールとして使うのであれば、無料のPower BI Desktopで分解ツリーを使うことができます。Power Queryとメジャーは、Excelと全く同じものが使えます。

 

2. 入力

本記事の説明で取り扱うデータ構成のは一例であり、これ以外のファイル構成、シート構成、表の形でも、Power Queryで対応することができます。

1) 予算

26年度予算

項目 製品 26/04 26/05 途中省略 27/03
数量 製品A 11 11 16
製品B 6 6 8
売価 製品A 105 105 105
製品B 95 95 95
総原価 製品A 100 100 100
製品B 90 90 90

260721diff1

  • 予算ブックは1つで、各年度のシートがある。
  • 年月はyy/mm形式のテキスト型。

2) 実績

26年度実績

日付 製品 数量 売価 総原価
26/04/01 製品A 11 105 100
26/04/01 製品B 6 95 90
26/05/01 製品A 12 105 100
26/05/01 製品B 6 96 91
途中省略
27/03/01 製品A 15 105 100
27/03/01 製品B 8 94 89

260721diff2

  • 実績ブックは1つで、各年度のシートがある。
  • 日付はシリアル値。

3. 出力

1) 対予算偏差

値 製品 26年度 途中省略 26年度 集計
1Q 1Q 集計
4月 5月 6月
M売上 製品A 1,155 1,260 1,155 3,570 16,972
製品B 570 576 564 1,710 7,979
M利益 製品A 55 60 55 170 720
製品B 30 30 30 90 377
M利益差予 製品A ±0 +5 -5 ±0 -90
製品B ±0 ±0 ±0 ±0 -43
M利益差数量要因予 製品A ±0 +5 -5 ±0 ±0
製品B ±0 ±0 ±0 ±0 ±0
M利益差売価要因予 製品A ±0 ±0 ±0 ±0 -38
製品B ±0 +6 -6 ±0 -1
M利益差原価要因予 製品A ±0 ±0 ±0 ±0 -52
製品B ±0 -6 +6 ±0 -42
全体の M売上 1,725 1,836 1,719 5,280 24,951
全体の M利益 85 90 85 260 1,097
全体の M利益差予 ±0 +5 -5 ±0 -133
全体の M利益差数量要因予 ±0 +5 -5 ±0 ±0
全体の M利益差売価要因予 ±0 +6 -6 ±0 -39
全体の M利益差原価要因予 ±0 -6 +6 ±0 -94

260721diff3

2) 対前年偏差

値 製品 26年度 途中省略 26年度 集計
1Q 1Q 集計
4月 5月 6月
M売上 製品A 1,155 1,260 1,155 3,570 16,972
製品B 570 576 564 1,710 7,979
M売上前年 製品A 990 1,089 1,287 3,366 15,828
製品B 623 534 445 1,602 7,522
M売上偏差前年 製品A +165 +171 -132 +204 +1,144
製品B -53 +42 +119 +108 +457
M数量要因前年 製品A +102 +102 -204 ±0 +306
製品B -92 ±0 +92 ±0 ±0
M売価要因前年 製品A +63 +69 +72 +204 +838
製品B +39 +42 +28 +108 +457
全体の M売上 1,725 1,836 1,719 5,280 24,951
全体の M売上前年 1,613 1,623 1,732 4,968 23,350
全体の M売上偏差前年 +112 +213 -13 +312 +1,601
全体の M数量要因前年 +10 +102 -113 ±0 +306
全体の M売価要因前年 +102 +111 +100 +312 +1,295

260721diff4

4. データモデルの作成

1) 予算データの取込みと整形

複数シートのクロス表をデータベース形式に整形し、縦結合してデータモデルに追加します。

データの取得

  1. [データ]-[データの取得v]-[ファイルから>]-[Excelブックから]で予算ブックを選択し[インポート]、整形のサンプルとするシートを選択し[データの変換]でPower Queryエディタに取込み、右のクエリの名前を"サンプルシート予"に変更。
  2. 右の"ソース"と"ナビゲーション"以外のステップの左の✘をクリックして削除。ソースとナビゲーションの2ステップだけにする。 ⇒ サンプルシート予が完成。

パラメータクエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"パラメータ予"に変更。
  2. 左の"パラメータ1"を右クリックし、[パラメータへ変換する]。
  3. [ホーム]-[詳細エディタ]で次のように修正し[完了]。 ⇒ ヘルパークエリの"パラメータ予"が完成。
変更前
"" meta [IsParameterQuery=true, Type="any", IsParameterQueryRequired=true]
変更後
#"サンプルシート予" meta [IsParameterQuery=true, BinaryIdentifier=#"サンプルシート予", Type="Table", IsParameterQueryRequired=true]

サンプルシートの変換クエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で新しいクエリを作成し、右の名前を"サンプルシート予の変換"に変更します。
  2. 数式バーに次の様に入力し、✓をクリックする。 ⇒ サンプルシートが表示される。
= パラメータ予

右の"ソース"以外の左の✘をクリックして削除。ソースだけにする。
  1. [ホーム]-[行の削除v]-[上位の行の削除]で行数に1を入れ[OK]。 ⇒ 不要な行が削除される。
  2. "Coloumn1"列を選択し[変換]-[フィルv]-[下へ]。>項目列のnullが埋まる。
  3. [変換]-[1行目をヘッダーとして使用v]-[1行目をヘッダーとして使用]。 ⇒ 項目名がヘッダーになる。
  4. "項目"と"製品"列をCtrlキーを押しながら選択し、[変換]-[列のピボット解除v]-[その他の列のピボット解除]。 ⇒ 年月が1列に並ぶ。
  5. 変更された型が生成されたら、それを削除。ピボット解除された他の列の数式バーの"属性"を"年月"に書き換える。
  6. "項目"列を選択し[変換]-[列のピボット]で値列に[値]、詳細設定オプションに[集計しない]で[OK]。 ⇒ "数量"列と"売価"列ができる。
  7. [列の追加]-[カスタム列]で次のように入力し[OK]。 ⇒ テキスト形式の"年月"列から日付形式の"日付"列が生成される。
新しい列名:日付
カスタム列の式:
= #date(
Number.FromText("20"&Text.BeforeDelimiter([年月],"/")),
Number.FromText(Text.AfterDelimiter([年月],"/")),
1)

Ctrl+aで全列を選択し、[変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。

関数クエリの作成

  1. 左の"サンプル予シートの変換"クエリを右クリックし[関数の作成...]。
    関数名に"シート予の変換"と入力し[OK]。

注意:関数クエリのコードを直接編集しないでください。編集する場合は、サンプルシートの変換クエリを編集します。すると、関数クエリが連動して修正されます。これがヘルパークエリの機能です。

結合クエリの作成

  1. 左の"サンプル予シート"クエリを右クリックし[複製]で新しいクエリを作成し、右の名前を"予算"に変更する。
  2. 右の"ナビゲーション"のステップを削除し、ソースだけにする。 ⇒ これでブック全体が取り込まれた状態になる。
  3. "Kind"列の▼-[テキストフィルター>]-[指定の値に等しい...]で値にSheetを選択し[OK]。 ⇒ 縦結合するシートのみが残る。
  4. [列の追加]-[カスタム関数の呼び出し]で関数クエリに[シート予の変換]、パラメータ1に[Date]、新しい列名に"シート予の変換"を入力し[OK]。 ⇒ 各シートを関数クエリで変換したTableが格納された列が追加される。
  5. "シート予の変換"列を右クリックし[他の列の削除]。 ⇒ 不要な列が削除される。
  6. "Table"列の右の展開アイコンをクリックし、さらに読み込むをクリックし、"プレフィックスを追加する"のチェックを外し[OK]。 ⇒ 各シートの変換後の表を展開して縦結合される。
  7. [変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。
  8. 左の"サンプル予シート"を"シート予の変換"グループに移動。
  9. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"接続の作成のみ"を選択し[OK]。 ⇒ Excelに戻る。
  10. "クエリと接続"の'予算'クエリを右クリックし、[読み込み先]で"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '予算'データモデルが完成。

2) 実績データの取込みと整形

複数シートのデータベース表を縦結合して、データモデルに追加します。

データの取得

  1. [データ]-[データの取得v]-[ファイルから>]-[Excelブックから]で実績ブックを選択し[インポート]、整形のサンプルとするシートを選択し[データの変換]でPower Queryエディタに取込み、右のクエリの名前を"サンプルシート実"に変更。
  2. 右の"ソース"と"ナビゲーション"以外のステップの左の✘をクリックして削除。ソースとナビゲーションの2ステップだけにする。 ⇒ サンプルシート実が完成。

パラメータクエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"パラメータ実"に変更。
  2. 左の"パラメータ1"を右クリックし、[パラメータへ変換する]。
  3. [ホーム]-[詳細エディタ]で次のように修正し[完了]。 ⇒ ヘルパークエリの"パラメータ実"が完成。
変更前
"" meta [IsParameterQuery=true, Type="any", IsParameterQueryRequired=true]
変更後
#"サンプルシート実" meta [IsParameterQuery=true, BinaryIdentifier=#"サンプルシート実", Type="Table", IsParameterQueryRequired=true]

サンプルシートの変換クエリの作成
  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で新しいクエリを作成し、右の名前を"サンプルシート実の変換"に変更します。
  2. 数式バーに次の様に入力し、✓をクリックする。 ⇒ サンプルシートが表示される。
= パラメータ実

右の"ソース"以外の左の×をクリックして削除。ソースだけにする。
  1. [ホーム]-[行の削除v]-[上位の行の削除]で行数に1を入れ[OK]。 ⇒ 不要な行が削除される。
  2. [変換]-[1行目をヘッダーとして使用v]-[1行目をヘッダーとして使用]。 ⇒ 項目名がヘッダーになる。
  3. 正しい型になっていない列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。

関数クエリの作成

  1. 左の"サンプル実シートの変換"クエリを右クリックし[関数の作成...]。
    関数名に"シート実の変換"と入力し[OK]。

結合クエリの作成

  1. 左の"サンプル実シート"クエリを右クリックし[複製]で新しいクエリを作成し、右の名前を"実績"に変更するす。
  2. 右の"ナビゲーション"のステップを削除し、ソースだけにする。 ⇒ これでブック全体が取り込まれた状態になる。
  3. "Kind"列の▼-[テキストフィルター>]-[指定の値に等しい...]で値にSheetを選択し[OK]。 ⇒ 縦結合するシートのみが残る。
  4. [列の追加]-[カスタム関数の呼び出し]で、関数クエリに[シート実の変換]、パラメータ1に[Date]、新しい列名に"シート実の変換"を入力し[OK]。 ⇒ 各シートを関数クエリで変換したTableが格納された列が追加される。
  5. "シート実の変換"列を右クリックし[他の列の削除]。 ⇒ 不要な列が削除される。
  6. "Table"列の右の展開アイコンをクリックし、さらに読み込むをクリックし、"プレフィックスを追加する"のチェックを外し[OK]。 ⇒ 各シートの変換後の表を展開して縦結合される。
  7. [変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。
  8. 左の"サンプル実シート"を"シート実の変換"グループに移動。
  9. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で、"接続の作成のみ"を選択し[OK]。 ⇒ Excelに戻る。
  10. "クエリと接続"の'実績'クエリを右クリックし、[読み込み先]で"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '実績'データモデルが完成。

3) 日付テーブルの生成

  1. [データ]-[データの取得v]-[その他のデータソースから]-[空のクエリ]でPower Queryエディタに"クエリ1"を生成し、クエリの名前を"日付"に変更する。
  2. [ホーム]-[詳細エディタ]で、既存のコードを次のコードで上書きする。
let
Source = 実績,
    // ── 集計対象期間の決定 ──────────────────────────
MinDate = Date.StartOfMonth(List.Min(Source[日付])),
MaxDate = Date.EndOfMonth(List.Max(Source[日付])),
    // ── 日単位カレンダーの生成 ──────────────────────
DateList = List.Dates(MinDate, Duration.Days(MaxDate - MinDate) + 1, #duration(1, 0, 0, 0)),
CalendarTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"日付"}),
型設定済 = Table.TransformColumnTypes(CalendarTable, {{"日付", type date}}),
    // ── 会計年度(4月始まり)の基準日・年・月を1回だけ算出 ──
// EDATE([@日付], -3) 相当:3ヶ月前にずらすことで
// 会計年度の「年」と「月番号(4月=1~翌3月=12)」を取得
会計基準日追加 = Table.AddColumn(型設定済, "会計基準日", each Date.AddMonths([日付], -3), type date),
会計年追加 = Table.AddColumn(会計基準日追加, "会計年", each Date.Year([会計基準日]), Int64.Type),
会計月追加 = Table.AddColumn(会計年追加, "会計月", each Date.Month([会計基準日]), Int64.Type),
    // ── 表示用列の追加 ──────────────────────────────
    // 年:YEAR([@日付])
列_年 = Table.AddColumn(会計月追加, "年", each Date.Year([日付]), Int64.Type),
    // 月:TEXT([@日付],"m月") ※ゼロ埋めなし
列_月 = Table.AddColumn(列_年, "月", each Text.From(Date.Month([日付])) & "月", type text),
    // 年月:TEXT([@日付],"yy/mm") ※ゼロ埋めあり
列_年月 = Table.AddColumn(列_月, "年月", each
let
yy = Text.PadStart(Text.From(Date.Year([日付]) - 2000), 2, "0"),
mm = Text.PadStart(Text.From(Date.Month([日付])), 2, "0")
in
yy & "/" & mm,
type text),
    // 四半期.:INT((MONTH(x)-1)/3)+1 & "Q" ※年度なし
列_四半期ドット = Table.AddColumn(列_年月, "四半期.", each
let
四半期番号 = Number.IntegerDivide([会計月] - 1, 3) + 1
in
Text.From(四半期番号) & "Q",
type text),
    // 四半期:(YEAR(x)-2000) & "/" & 四半期番号 & "Q" ※ゼロ埋めなし
列_四半期 = Table.AddColumn(列_四半期ドット, "四半期", each
let
四半期番号 = Number.IntegerDivide([会計月] - 1, 3) + 1
in
Text.From([会計年] - 2000) & "/" & Text.From(四半期番号) & "Q",
type text),
    // 半期:(YEAR(x)-2000) & "/" & 半期番号 & "H" ※ゼロ埋めなし
列_半期 = Table.AddColumn(列_四半期, "半期", each
let
半期番号 = Number.IntegerDivide([会計月] - 1, 6) + 1
in
Text.From([会計年] - 2000) & "/" & Text.From(半期番号) & "H",
type text),
    // 期:IF(MONTH(x)<7,"上期","下期") ※年度なし
列_期 = Table.AddColumn(列_半期, "期", each
if [会計月] < 7 then "上期" else "下期",
type text),
    // 年度:(YEAR(x)-2000) & "年度" ※ゼロ埋めなし
列_年度 = Table.AddColumn(列_期, "年度", each
Text.From([会計年] - 2000) & "年度",
type text),
    // 年度.:YEAR(x) ※西暦そのまま、年度なし表示との組み合わせ用
列_年度ドット = Table.AddColumn(列_年度, "年度.", each [会計年], Int64.Type),
    // 内部計算用の一時列を削除し、ご指定の列順に並べ替え
不要列削除済 = Table.RemoveColumns(列_年度ドット, {"会計基準日", "会計年", "会計月"}),
最終結果 = Table.ReorderColumns(不要列削除済,
{"日付", "年月", "四半期", "半期", "年度", "年度.", "四半期.", "期", "月", "年"})
in
最終結果
  1. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で、"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '日付'データモデルが完成。

参考:日付テーブルをPower Query Mのコードで生成する代わりに、Excelのワークシートで作ることもできます。この場合、ワークシートに作る日付の範囲は、予算と実績ファイルの全ての日付を含むようにしてください。

4) 製品テーブルの生成

  1. [データ]-[クエリと接続]で右に"クエリと接続"を表示し、'予算'クエリを右クリックして[編集]でPower Queryエディタを開く。
  2. '予算'クエリを右クリックし[参照]で新しいクエリを作成し、クエリの名前を'製品'に変更する。
  3. [ホーム]-[クエリの追加v]-[クエリの追加]で[実績]を選択し[OK]。
  4. [品名]列を右クリックし[他の列の削除]。
  5. [品名]列を右クリックし[重複の削除]。
  6. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で、"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '製品'データモデルが完成。

5. リレーションの作成

  1. 次のいずれかの方法でリレーションを設定する。
    a) [Power Pivot]-[管理]-[表示]-[ダイアグラムビュー]。
    b) [データ]-[データモデルv(緑アイコン)]-[データモデルの管理]-[ホーム]-[表示]-[ダイアグラムビュー]。
    c) [データ]-[データモデルv(緑アイコン)]-[リレーションシップ]-[編集]。

ファクトテーブル *--<--1 ディメンジョンテーブル(関連)
'予算'[日付] *--<--1 '日付'[日付]
'実績'[日付] *--<--1 '日付'[日付]
'予算'[製品] *--<--1 '製品'[製品]
'実績'[製品] *--<--1 '製品'[製品]

ダイアグラムビューでは、*(多)から1へ項目をドラッグする。
リレーションシップでは、上段が*(多)で下段の関連が1になるように項目を設定する。

6. ピボットテーブルの生成

  1. [挿入]-[ピボットテーブルv]-[データモデルから]で、ピボットテーブルを生成する。

7. メジャーの作成

  1. 次のいずれかの方法でメジャーを作成する。
    a) ① ピボットテーブルを選択し、右に"ピボットテーブルのフィールド"を表示。② メジャーを作成するテーブル('予算'または'実績)を右クリックし[メジャーの追加]。式の先頭は「=」から始める。
    b) [Power Pivot]-[管理]でメジャーを書くテーブルの下の空白セルを選択。数式バーにメジャーを入力する。先頭は、「メジャー名:=」から始める。
    c) [データ]-[データモデル(緑アイコン)v]-[データモデルの管理]で、メジャーを書くテーブルの下の空白セルを選択。数式バーにメジャーを入力する。先頭は、「メジャー名:=」から始める。

予算に作成するメジャー

M予売上:=SUMX('予算', '予算'[数量] * '予算'[売価])

コンテキストの'予算'テーブルの1行毎に「'予算'[数量] * '予算'[売価]」を計算して合計する。
M予数量:=SUM('予算'[数量])
M予売価:=DIVIDE([M予売上], [M予数量])

[M予売上]÷[M予数量]の意味ですが、[M予数量]が0の時はエラーを返しません。

 

M予原価:=DIVIDE(SUMX('予算', '予算'[数量] * '予算'[総原価]), [M予数量])
M予利益:=SUMX('予算', ('予算'[売価] - '予算'[総原価]) * '予算'[数量])
M予利益率:=DIVIDE([M予利益], [M予売上])
M利益差予:=[M利益] - [M予利益]
M利益率差予:=[M利益率] - [M予利益率]
M利益差数量要因予:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客]))
([M数量] - [M予数量])
* (([M売価] - [M原価]) + ([M予売価] - [M予原価])) / 2
)


対予算利益差数量要因 = 数量差 × 平均利益 です。利益 = 売価 - 原価 です。利益の実績と予算の平均を用います。

 

M利益差売価要因予:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客]))
([M売価] - [M予売価]) * ([M数量] + [M予数量]) / 2
)


対予算利益差売価要因 = 売価差 × 平均数量 です。数量に実績と予算の平均数量を用います。これは[M売価要因予]と同じです。

 

M利益差原価要因予:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客]))
-([M原価] - [M予原価]) * ([M数量] + [M予数量]) / 2
)


対予算利益差原価要因 = 原価差 × 平均数量 です。数量に実績と予算の平均数量を用います。

 

M売上偏差予:=[M売上] - [M予売上]

M数量要因予:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客])),
([M数量] - [M予数量]) * ([M売価] + [M予売価]) / 2
)


売上数量偏差 = 数量差 × 売価 です。売価に実績と予算の平均売価を用います。[*1]

 

M売価要因予:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客])),
([M売価] - [M予売価]) * ([M数量] + [M予数量]) / 2
)


売上売価偏差 = 売価差 × 数量 です。数量に当年と前年の平均数量を用います。これは[M利益差売価要因予]と同じです。[*1]

 

実績に作成するメジャー

M売上:=SUMX('実績', '実績'[数量] * '実績'[売価])

コンテキストの'実績'テーブルの1行毎に「'実績'[数量] * '実績'[売価]」を計算して合計する。
M数量:=SUM('実績'[数量])

M売価:=DIVIDE([M売上], [M数量])

[M売上]÷[M数量]の意味ですが、[M数量]が0の時はエラーを返しません。

 

M原価:=DIVIDE(SUMX('実績', '実績'[数量] * '実績'[総原価]), [M数量])
M利益:=SUMX('実績', ('実績'[売価] - '実績'[総原価]) * '実績'[M数量])

利益 = (売価 - 原価) × 数量 です。

 

M利益率:=DIVIDE([M利益], [M売上])
M売上前年:=CALCULATE([M売上], SAMEPERIODLASTYEAR('日付'[日付]))

CALCULATEで前年同期を示すSAMEPERIODLASTYEARにコンテキストを変更して[M売上]の中で合計SUMを求める。
M数量前年:=CALCULATE([M数量], SAMEPERIODLASTYEAR('日付'[日付]))

CALCULATEで前年同期を示すSAMEPERIODLASTYEARにコンテキストを変更して[M数量]の中で合計SUMを求める。
M売価前年:=DIVIDE([M売上前年], [M数量前年])

M売上偏差前年:=[M売上] - [M売上前年]

M数量要因前年:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客])),
([M数量] - [M数量前年]) * ([M売価] + [M売価前年]) / 2
)


売上数量偏差 = 数量差 × 売価 です。売価に当年と前年の平均売価を用います。[*1]

 

M売価要因前年:=SUMX(
VALUES('製品'[製品]), // CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客])),
([M売価] - [M売価前年]) * ([M数量] + [M数量前年]) / 2
)


売上売価偏差 = 売価差 × 数量 です。数量に当年と前年の平均数量を用います。[*1]

 

[*1] : この計算は1グループ毎に行う必要があります。なので、複数の分類を含むグループの場合は、CROSSJOINを用いてグループのリストを作成してください。例えば、顧客と製品でグループ化する場合は、CROSSJOIN(VALUES('製品'[製品]), VALUES('顧客'[顧客])) とします。

8. ピボットテーブルの設定

1) 対予偏差

  1. 次のように項目を設定します。
  • 列 : '日付'[年度]、'日付'[四半期.]、'日付'[月]
  • 行 : Σ値、'製品'[製品]
  • Σ値 : [M売上]、[M利益]、[M利益差予]、[M利益差数量要因予]、[M利益差売価要因予]、[M利益差原価要因予]
  1. ピボットテーブルの[年度]の[▼]で26年度以外のチェックを外す。
  2. [ピボットテーブル分析]-[オプション]-[レイアウトと書式]で"更新時に列幅を調整する"のチェックを外す。
  3. [ピボットテーブル分析]-[オプション]-[表示]で"データのないアイテムを行/列に表示する"のチェックを外す。(これをチェックする場合は、フィルターやスライサーで表示しないディメンジョン項目の選択を解除する。)
  4. [デザイン]-[レポートのレイアウト]-[表形式で表示]。
  5. [デザイン]-[総計v]-[列のみ集計を行う]。
  6. 小計を表示する列項目を右クリックし、["xxx"の小計]をクリックして✓マークを付ける。
  7. [デザイン]-[ピボットテーブルスタイル]でベースとするスタイルを右クリックし[複製]。ユーザー設定のスタイルを右クリックし[変更]でスタイルを変更。
  • 小計列 1 : 右罫線(太); 網掛け
  • 小計列 2 : 右罫線(細); 網掛け
  • 列小見出し 1 : 上罫線(太)
  • 列小見出し 2 : 上罫線(細)

2) 対前年偏差

  1. 対予偏差のピボットテーブルをコピーします。
  2. 次のように項目を設定します。
  • 列 : '日付'[年度]、'日付'[四半期.]、'日付'[月]
  • 行 : Σ値、'製品'[製品]
  • Σ値 : [M売上]、[M売上前年]、[M売上偏差前年]、[M数量要因前年]、[M売価要因前年]

参考:ピボットテーブルの設定は、データモデルに影響しないので、ピボットテーブルをコピーして別の設定をすることが可能です。一方テーブルは、データモデルそのものなので、コピーして別の設定にすることができません。

9. サンプル

ダウンロード - 260721diff.zip

C:\Users\Public\Documents\260721diff に展開した各ファイルを置いてください。

10. 参考

| | コメント (0)

Wi-Fi 7 Router Aterm 19000T12BE

1. 前書き

IEEE802.11ac(WiFi 5)のWiFi Router(1Gbps LAN) + 光10G回線 を使用していたのですが、Quest 3のPC VRでコマ落ちが発生する問題がありました。そこで、NEC Aterm 19000T12BE(WiFi 7)に交換してみました。
PCのLANは2.5Gbpsなので、HUBを10GbpsRJ45x2/2.5Gbpsx4のTOKAIZ TSH-10Gに交換しました。TOKAIZは商社なので、中国設計製造だと思われます。メジャーなメーカだと10GbpsSPFやAll 10Gbpsの製品があるのですが、この仕様のHUBを発見できませんでした。

結論を言いますと、インターネットの速度は改善しましたが、目的のQuest 3のPC VRのコマ落ちは改善しませんでした。Wi-Fi RouterとQuest 3の距離が離れていることが原因かもしれません。

2. 初期設定

  1. Inernet接続
    Inertnet接続は、WANとLANケーブルを接続し、電源を入れるだけで接続できました。今は自動認識になっているので簡単です。初期設定値も無難な設定になっているようです。

  2. 設定画面
    紙の説明書やWebマニュアルでは、設定画面の表示手順が分かりにくいです。
    過去に使用した製品では、Routerの設定画面を出すためのURL/IPアドレスが紙の取扱説明書に書かれており、それをブラウザのURL欄に入力して設定を開始していました。しかし、この製品はそれが書かれていません。
    Web説明書の「つなぎかたガイド(親機)新規に設置の場合」の「STEP 6」に小さく書かれています。ここに辿り着くまでには、8回のクリックが必要です。
    Atermののアドレスを自動検出するツールがあるのですが、これに辿り着くまでには、6回のクリックが必要です。
    Aterm検索ツール Ver1.3
    https://www.aterm.jp/support/verup/software/utl_win.html#search_tool1

  3. Routerのアドレス変更
    監視カメラのレコーダーにカメラのIPアドレスを設定してあるので、RouterのDHCPでアドレスが変わらないようにカメラのIPアドレスを固定しています。
    RouterのベースIPアドレスもカメラに合わせて変更したのですが、アドレス変更後の再認識に時間が掛かります。

IPv4LAN側設定メモ

IPドレス/ネットマスク(ビット指定) : 192.168.10.1 --> 192.168.11.1 / 24
DHCP固定割当 エントリ一覧 : 監視カメラと監視レコーダのMACアドレスとIPアドレスを設定

  1. 初期設定値
    *印が工場出荷値から変更したところです。

Wi-Fi基本設定

  • 2.4GHz通信機能 : ON
  • 5GHz通信機能 : ON
  • 6GHz通信機能 : ON
  • MLO : ON --> OFF*
  • バンドステアリング : OFF
  • メッシュWi-Fi機能 : ON -> OFF*

ファームウェア更新

時刻指定バージョンアップ

  • 時刻指定バージョンアップ機能 : ON
  • 更新時刻 : 1時0分 -> 2時22分* 他人と被らないようにした方がサーバーが軽いかな?

3. Quest 3のPC VRの効果

残念ながらあまり効果はありませんでした。

  1. MLO ON
    頻繁にコマ落ちします。Quest 3は、WiFi 6E対応なので、MLO未対応のはずなのですが、何故MLOでコマ落ちが悪化するのか不明です。
    MLO Onで6GHzをOFFにしても頻繁にコマ落ちするので、6GHzの電波の不安定さによるものではありません。
    MLO Offだと、コマ落ちは少なくなります。

なお、MLOで問題なのは、リアルタイム性が必要なPC VRの通信などのみで、バッファーが確保できる通常のネットサービスでは問題はありません。

初期値のMLO ONだと、1つのSSIDで2.4、5、6GHzに接続できるので便利です。
MLO Offの場合は、周波数毎にSSIDが変わるので、分けて設定する必要があります。

  1. 2.4GHzのみ
    Virtual Desktopに、速度が遅すぎると表示されます。

  2. 5GHz、または6GHzのみ
    MLO ONよりコマ落ちは少ないですが、どちらも似たようなコマ落ちをします。
    速度は5GHzの方が僅かに速いですが、どちらも変動が大きいです。576Mbps~1441Gbpsくらいで変動しています。

木造1階の天井近くにRouterを置き、直線距離で約5mくらいの2階にQuest 3があります。間に本棚・壁・床がありますが、意外と6GHzでも通信できます。
2階でもRouterの真上近くだと安定して2401Mbpsが出ます。

  1. 有線LAN
    Quest 3に2.5GbpsのUSB-LAN変換アダプタを付けてみました。
    2.5Gbpsではなく1200Mbpsでリンクしましたが、リンク速度が全く変動せず安定しています。Wi-Fiは884MHzになることが多く、コマ落ちは有線の方が安定感があります。しかし、それでも時々大きなコマ落ちがあります。もしかすると、小さなコマ落ちは通信の影響で、大きなコマ落ちは他の要因かも知れません。Androidの他のタスクが要因の可能性もあります。

コマ落ちが気になるのは動きが速いRealFlightです。小型のラジコン機は姿勢変化が速いので、僅かなコマ落ちも気になります。Microsoft Flight Simulaterは実機なので姿勢変化の動きが遅く、多少コマ落ちしてもあまり気にならないです。

4. インターネット速度

PCのLANが2.5Gbpsです。なので、ここがボトルネックになります。
BNRスピードテストの結果
2026年7月18日 土曜日 20:08
下り:2.24Gbps
上り:427Mbps
Ping:9ms (Jitter 0.9)
BB.excite光10G(IPv6 Biglobe)

10GbpsのLAN製品は消費電力が大きくPC内の温度が上昇するし、速度も2.5Gbpsで十分なので、当面2.5Gbpsで運用するつもりです。

5. トラブルの有無

当方の環境では、Aterm 19000T12BEのトラブルは、全くありません。MLO Offで使用していますが、PC-VRを使用しなければ、工場出荷時設定で全く問題無さそうです。PC/監視カメラ/TVは有線LAN接続で、Wi-Fiを使用する機会が少ない環境です。

一般家庭向けのWi-Fi 7 Routerでユーザーレビューの評価が高いものはありません。トラブル報告が無い製品は存在しないようです。過去のネット情報ではNECが無難との情報が多かったのでNECにしました。
専門知識と財力があるなら、法人向けの製品の方が設定項目が多くて良いかも知れません。当方は知識が無いので無理ですけど。
NECの欠点は、他社と比べて設定できる項目が少ないことです。これは設定を簡単にする、無効な組合せ設定によるトラブルを避けるためだと思われます。でも、上級者向けメニューとして設定項目を増やしてくれると、嬉しいと思います。

6. Quest 3の録画

LANのHUBを2.5Gbpsにしたので、Quest 3のPC VRの通信をWi-Fiから2.5Gbps有線LANにし、Meta Quest Developer HubのUSB CastをOBSで録画しようとしたのですが、できませんでした。理由は、Quset 3のUSBにLAN付きのUSB-HUBを接続するとQuest 3がUSB Hostになるので、PCのMeta Quest Developer HubがQuest 3とUSB通信できなくなるためです。

7. HUB 10GbpsRJ45x2/2.5Gbpsx4 TOKAIZ TSH-10G 消費電力

Router側を10Gに接続し、2.5GでPCを2台接続した時の電力は、8.7W、0.53PF、0.158A、103.5Vでした。全ポート10Gだともっと消費電力が大きいらしいので、現時点では2.5Gbps程度が良さそうです。

| | コメント (0)

Excel Power Pivotで売上偏差を単価要因と数量要因に分ける

1. 前書き

予算と実績や前年と当年の売上偏差を単価要因と数量要因に分ける計算を、Excel Power Pivotのメジャー(DAX)で行いました。
メジャーを使うと、ワークシート式より式の数が少なくなり、式にセルアドレスを使用しないので可読性が向上し、ミスが減ります。
本例では、Power Queryのヘルパークエリ[*1]を用いた複数シートの結合など、モダンExcelの色々な機能を使用していますが、Power Pivotを知らない人でも作成できるように、その手順も記載しています。
Power Pivotを知っている人は、途中を飛ばしてメジャーだけを見てください。
検証をあまりしていないので、使用される場合は検証を行い、自己責任で使用して下さい。

[*1] ヘルパークエリを使うと、Power Query Mのコードを直接書かずに、クリック操作で関数クエリを作成・編集することができます。

計算式

前年(添字0)と当年(添字1)で

数量: Q₀, Q₁
売価: P₀, P₁
売上: Q × P

とすると

売上偏差 = Q₁P₁ - Q₀P₀
= 純粋な数量要因 + 純粋な売価要因 + 交差項(数量と売価が同時に動いた分)

「按分」なので、交差項を数量側・売価側に均等に振り分ける**平均法(折半法)**が最もシンプルかつ実務でよく使われます。これは

数量要因 = (Q₁-Q₀) × (P₀+P₁)/2 ← 平均売価を使う
売価要因 = (P₁-P₀) × (Q₀+Q₁)/2 ← 平均数量を使う

とすると、数式的に必ず「数量要因 + 売価要因 = 売上偏差」が成立します(交差項がちょうど半分ずつ両方に含まれる形になるため)。

2. 入力

本記事の説明で取り扱うデータの構成は一例であり、これ以外のファイル構成、シート構成、表の形でも、Power Queryで対応することができます。

1) 予算

26年度予算

項目 商品 26/04 26/05 途中省略 27/03
数量 商品A 11 11 16
商品B 6 6 8
単価 商品A 105 105 105
商品B 95 95 95

260718diff1

  • 予算ブックは1つで、各年度のシートがある。
  • 年月はyy/mm形式のテキスト型。

2) 実績

26年度実績

日付 商品 数量 単価
26/04/01 商品A 11 105
26/04/01 商品B 6 95
26/05/01 商品A 12 105
26/05/01 商品B 6 96
途中省略
27/03/01 商品A 15 105
27/03/01 商品B 8 94

260718diff2

  • 実績ブックは1つで、各年度のシートがある。
  • 日付はシリアル値。

3. 出力

1) 対予算偏差

値 商品 26年度 途中省略 26年度 集計
1Q 1Q 集計
4月 5月 6月
M売上 商品A 1,155 1,260 1,155 3,570 16,972
商品B 570 576 564 1,710 7,979
M予売上 商品A 1,155 1,155 1,260 3,570 17,010
商品B 570 570 570 1,710 7,980
M売上偏差予 商品A ±0 +105 -105 ±0 -38
商品B ±0 +6 -6 ±0 -1
M数量要因予 商品A ±0 +105 -105 ±0 ±0
商品B ±0 ±0 ±0 ±0 ±0
M単価要因予 商品A ±0 ±0 ±0 ±0 -38
商品B ±0 +6 -6 ±0 -1
全体の M売上 1,725 1,836 1,719 5,280 24,951
全体の M予売上 1,725 1,725 1,830 5,280 24,990
全体の M売上偏差予 ±0 +111 -111 ±0 -39
全体の M数量要因予 ±0 +105 -105 ±0 ±0
全体の M単価要因予 ±0 +6 -6 ±0 -39

260718diff3

 

2) 対前年偏差

値 商品 26年度 途中省略 26年度 集計
1Q 1Q 集計
4月 5月 6月
M売上 商品A 1,155 1,260 1,155 3,570 16,972
商品B 570 576 564 1,710 7,979
M売上前年 商品A 990 1,089 1,287 3,366 15,828
商品B 623 534 445 1,602 7,522
M売上偏差前年 商品A +165 +171 -132 +204 +1,144
商品B -53 +42 +119 +108 +457
M数量要因前年 商品A +102 +102 -204 ±0 +306
商品B -92 ±0 +92 ±0 ±0
M単価要因前年 商品A +63 +69 +72 +204 +838
商品B +39 +42 +28 +108 +457
全体の M売上 1,725 1,836 1,719 5,280 24,951
全体の M売上前年 1,613 1,623 1,732 4,968 23,350
全体の M売上偏差前年 +112 +213 -13 +312 +1,601
全体の M数量要因前年 +10 +102 -113 ±0 +306
全体の M単価要因前年 +102 +111 +100 +312 +1,295

260718diff4

4. データモデルの作成

1) 予算データの取込みと整形

複数シートのクロス表をデータベース形式に整形し、縦結合してデータモデルに追加します。

データの取得

  1. [データ]-[データの取得v]-[ファイルから>]-[Excelブックから]で予算ブックを選択し[インポート]、整形のサンプルとするシートを選択し[データの変換]でPower Queryエディタに取込み、右のクエリの名前を"サンプルシート予"に変更。
  2. 右の"ソース"と"ナビゲーション"以外のステップの左の✘をクリックして削除。ソースとナビゲーションの2ステップだけにする。 ⇒ サンプルシート予が完成。

パラメータクエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"パラメータ予"に変更。
  2. 左の"パラメータ1"を右クリックし、[パラメータへ変換する]。
  3. [ホーム]-[詳細エディタ]で次のように修正し[完了]。 ⇒ ヘルパークエリの"パラメータ予"が完成。
変更前
"" meta [IsParameterQuery=true, Type="any", IsParameterQueryRequired=true]
変更後
#"サンプルシート予" meta [IsParameterQuery=true, BinaryIdentifier=#"サンプルシート予", Type="Table", IsParameterQueryRequired=true]

サンプルシートの変換クエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で新しいクエリを作成し、右の名前を"サンプルシート予の変換"に変更します。
  2. 数式バーに次の様に入力し、✓をクリックする。 ⇒ サンプルシートが表示される。
= パラメータ予

右の"ソース"以外の左の✘をクリックして削除。ソースだけにする。
  1. [ホーム]-[行の削除v]-[上位の行の削除]で行数に1を入れ[OK]。 ⇒ 不要な行が削除される。
  2. "Coloumn1"列を選択し[変換]-[フィルv]-[下へ]。>項目列のnullが埋まる。
  3. [変換]-[1行目をヘッダーとして使用v]-[1行目をヘッダーとして使用]。 ⇒ 項目名がヘッダーになる。
  4. "項目"と"商品"列をCtrlキーを押しながら選択し、[変換]-[列のピボット解除v]-[その他の列のピボット解除]。 ⇒ 年月が1列に並ぶ。
  5. 変更された型が生成されたら、それを削除。ピボット解除された他の列の数式バーの"属性"を"年月"に書き換える。
  6. "項目"列を選択し[変換]-[列のピボット]で値列に[値]、詳細設定オプションに[集計しない]で[OK]。 ⇒ "数量"列と"単価"列ができる。
  7. [列の追加]-[カスタム列]で次のように入力し[OK]。 ⇒ テキスト形式の"年月"列から日付形式の"日付"列が生成される。
新しい列名:日付
カスタム列の式:
= #date(
Number.FromText("20"&Text.BeforeDelimiter([年月],"/")),
Number.FromText(Text.AfterDelimiter([年月],"/")),
1)

Ctrl+aで全列を選択し、[変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。

関数クエリの作成

  1. 左の"サンプル予シートの変換"クエリを右クリックし[関数の作成...]。
    関数名に"シート予の変換"と入力し[OK]。

注意:関数クエリのコードを直接編集しないでください。編集する場合は、サンプルシートの変換クエリを編集します。すると、関数クエリが連動して修正されます。これがヘルパークエリの機能です。

結合クエリの作成

  1. 左の"サンプル予シート"クエリを右クリックし[複製]で新しいクエリを作成し、右の名前を"予算"に変更する。
  2. 右の"ナビゲーション"のステップを削除し、ソースだけにする。 ⇒ これでブック全体が取り込まれた状態になる。
  3. "Kind"列の▼-[テキストフィルター>]-[指定の値に等しい...]で値にSheetを選択し[OK]。 ⇒ 縦結合するシートのみが残る。
  4. [列の追加]-[カスタム関数の呼び出し]で関数クエリに[シート予の変換]、パラメータ1に[Date]、新しい列名に"シート予の変換"を入力し[OK]。 ⇒ 各シートを関数クエリで変換したTableが格納された列が追加される。
  5. "シート予の変換"列を右クリックし[他の列の削除]。 ⇒ 不要な列が削除される。
  6. "Table"列の右の展開アイコンをクリックし、さらに読み込むをクリックし、"プレフィックスを追加する"のチェックを外し[OK]。 ⇒ 各シートの変換後の表を展開して縦結合される。
  7. [変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。
  8. 左の"サンプル予シート"を"シート予の変換"グループに移動。
  9. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で"接続の作成のみ"を選択し[OK]。 ⇒ Excelに戻る。
  10. "クエリと接続"の'予算'クエリを右クリックし、[読み込み先]で"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '予算'データモデルが完成。

2) 実績データの取込みと整形

複数シートのデータベース表を縦結合して、データモデルに追加します。

データの取得

  1. [データ]-[データの取得v]-[ファイルから>]-[Excelブックから]で実績ブックを選択し[インポート]、整形のサンプルとするシートを選択し[データの変換]でPower Queryエディタに取込み、右のクエリの名前を"サンプルシート実"に変更。
  2. 右の"ソース"と"ナビゲーション"以外のステップの左の✘をクリックして削除。ソースとナビゲーションの2ステップだけにする。 ⇒ サンプルシート実が完成。

パラメータクエリの作成

  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で右の名前を"パラメータ実"に変更。
  2. 左の"パラメータ1"を右クリックし、[パラメータへ変換する]。
  3. [ホーム]-[詳細エディタ]で次のように修正し[完了]。 ⇒ ヘルパークエリの"パラメータ実"が完成。
変更前
"" meta [IsParameterQuery=true, Type="any", IsParameterQueryRequired=true]
変更後
#"サンプルシート実" meta [IsParameterQuery=true, BinaryIdentifier=#"サンプルシート実", Type="Table", IsParameterQueryRequired=true]

サンプルシートの変換クエリの作成
  1. [ホーム]-[新しいソースv]-[その他のソース>]-[空のクエリ]で新しいクエリを作成し、右の名前を"サンプルシート実の変換"に変更します。
  2. 数式バーに次の様に入力し、✓をクリックする。 ⇒ サンプルシートが表示される。
= パラメータ実

右の"ソース"以外の左の×をクリックして削除。ソースだけにする。
  1. [ホーム]-[行の削除v]-[上位の行の削除]で行数に1を入れ[OK]。 ⇒ 不要な行が削除される。
  2. [変換]-[1行目をヘッダーとして使用v]-[1行目をヘッダーとして使用]。 ⇒ 項目名がヘッダーになる。
  3. 正しい型になっていない列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。

関数クエリの作成

  1. 左の"サンプル実シートの変換"クエリを右クリックし[関数の作成...]。
    関数名に"シート実の変換"と入力し[OK]。

結合クエリの作成

  1. 左の"サンプル実シート"クエリを右クリックし[複製]で新しいクエリを作成し、右の名前を"実績"に変更するす。
  2. 右の"ナビゲーション"のステップを削除し、ソースだけにする。 ⇒ これでブック全体が取り込まれた状態になる。
  3. "Kind"列の▼-[テキストフィルター>]-[指定の値に等しい...]で値にSheetを選択し[OK]。 ⇒ 縦結合するシートのみが残る。
  4. [列の追加]-[カスタム関数の呼び出し]で、関数クエリに[シート実の変換]、パラメータ1に[Date]、新しい列名に"シート実の変換"を入力し[OK]。 ⇒ 各シートを関数クエリで変換したTableが格納された列が追加される。
  5. "シート実の変換"列を右クリックし[他の列の削除]。 ⇒ 不要な列が削除される。
  6. "Table"列の右の展開アイコンをクリックし、さらに読み込むをクリックし、"プレフィックスを追加する"のチェックを外し[OK]。 ⇒ 各シートの変換後の表を展開して縦結合される。
  7. [変換]-[データ型の検出]。正しく型設定されない場合は、個別に列を選択して[変換]-[データ型]で適切な型に変更。 ⇒ 型が設定される。
  8. 左の"サンプル実シート"を"シート実の変換"グループに移動。
  9. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で、"接続の作成のみ"を選択し[OK]。 ⇒ Excelに戻る。
  10. "クエリと接続"の'実績'クエリを右クリックし、[読み込み先]で"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '実績'データモデルが完成。

3) 日付テーブルの生成

  1. [データ]-[データの取得v]-[その他のデータソースから]-[空のクエリ]でPower Queryエディタに"クエリ1"を生成し、クエリの名前を"日付"に変更する。
  2. [ホーム]-[詳細エディタ]で、既存のコードを次のコードで上書きする。
let
Source = 実績,
    // ── 集計対象期間の決定 ──────────────────────────
MinDate = Date.StartOfMonth(List.Min(Source[日付])),
MaxDate = Date.EndOfMonth(List.Max(Source[日付])),
    // ── 日単位カレンダーの生成 ──────────────────────
DateList = List.Dates(MinDate, Duration.Days(MaxDate - MinDate) + 1, #duration(1, 0, 0, 0)),
CalendarTable = Table.FromList(DateList, Splitter.SplitByNothing(), {"日付"}),
型設定済 = Table.TransformColumnTypes(CalendarTable, {{"日付", type date}}),
    // ── 会計年度(4月始まり)の基準日・年・月を1回だけ算出 ──
// EDATE([@日付], -3) 相当:3ヶ月前にずらすことで
// 会計年度の「年」と「月番号(4月=1~翌3月=12)」を取得
会計基準日追加 = Table.AddColumn(型設定済, "会計基準日", each Date.AddMonths([日付], -3), type date),
会計年追加 = Table.AddColumn(会計基準日追加, "会計年", each Date.Year([会計基準日]), Int64.Type),
会計月追加 = Table.AddColumn(会計年追加, "会計月", each Date.Month([会計基準日]), Int64.Type),
    // ── 表示用列の追加 ──────────────────────────────
    // 年:YEAR([@日付])
列_年 = Table.AddColumn(会計月追加, "年", each Date.Year([日付]), Int64.Type),
    // 月:TEXT([@日付],"m月") ※ゼロ埋めなし
列_月 = Table.AddColumn(列_年, "月", each Text.From(Date.Month([日付])) & "月", type text),
    // 年月:TEXT([@日付],"yy/mm") ※ゼロ埋めあり
列_年月 = Table.AddColumn(列_月, "年月", each
let
yy = Text.PadStart(Text.From(Date.Year([日付]) - 2000), 2, "0"),
mm = Text.PadStart(Text.From(Date.Month([日付])), 2, "0")
in
yy & "/" & mm,
type text),
    // 四半期.:INT((MONTH(x)-1)/3)+1 & "Q" ※年度なし
列_四半期ドット = Table.AddColumn(列_年月, "四半期.", each
let
四半期番号 = Number.IntegerDivide([会計月] - 1, 3) + 1
in
Text.From(四半期番号) & "Q",
type text),
    // 四半期:(YEAR(x)-2000) & "/" & 四半期番号 & "Q" ※ゼロ埋めなし
列_四半期 = Table.AddColumn(列_四半期ドット, "四半期", each
let
四半期番号 = Number.IntegerDivide([会計月] - 1, 3) + 1
in
Text.From([会計年] - 2000) & "/" & Text.From(四半期番号) & "Q",
type text),
    // 半期:(YEAR(x)-2000) & "/" & 半期番号 & "H" ※ゼロ埋めなし
列_半期 = Table.AddColumn(列_四半期, "半期", each
let
半期番号 = Number.IntegerDivide([会計月] - 1, 6) + 1
in
Text.From([会計年] - 2000) & "/" & Text.From(半期番号) & "H",
type text),
    // 期:IF(MONTH(x)<7,"上期","下期") ※年度なし
列_期 = Table.AddColumn(列_半期, "期", each
if [会計月] < 7 then "上期" else "下期",
type text),
    // 年度:(YEAR(x)-2000) & "年度" ※ゼロ埋めなし
列_年度 = Table.AddColumn(列_期, "年度", each
Text.From([会計年] - 2000) & "年度",
type text),
    // 年度.:YEAR(x) ※西暦そのまま、年度なし表示との組み合わせ用
列_年度ドット = Table.AddColumn(列_年度, "年度.", each [会計年], Int64.Type),
    // 内部計算用の一時列を削除し、ご指定の列順に並べ替え
不要列削除済 = Table.RemoveColumns(列_年度ドット, {"会計基準日", "会計年", "会計月"}),
最終結果 = Table.ReorderColumns(不要列削除済,
{"日付", "年月", "四半期", "半期", "年度", "年度.", "四半期.", "期", "月", "年"})
in
最終結果
  1. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で、"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '日付'データモデルが完成。

参考:日付テーブルをPower Query Mのコードで生成する代わりに、Excelのワークシートで作ることもできます。この場合、ワークシートに作る日付の範囲は、予算と実績ファイルの全ての日付を含むようにしてください。

4) 商品テーブルの生成

  1. [データ]-[クエリと接続]で右に"クエリと接続"を表示し、'予算'クエリを右クリックして[編集]でPower Queryエディタを開く。
  2. '予算'クエリを右クリックし[参照]で新しいクエリを作成し、クエリの名前を'商品'に変更する。
  3. [ホーム]-[クエリの追加v]-[クエリの追加]で[実績]を選択し[OK]。
  4. [品名]列を右クリックし[他の列の削除]。
  5. [品名]列を右クリックし[重複の削除]。
  6. [ホーム]-[閉じて読み込むv]-[閉じて次に読み込む]で、"接続の作成のみ"と"このモデルをデータモデルに追加する"を選択し[OK]。 ⇒ '商品'データモデルが完成。

5. リレーションの作成

  1. 次のいずれかの方法でリレーションを設定する。
    a) [Power Pivot]-[管理]-[表示]-[ダイアグラムビュー]。
    b) [データ]-[データモデルv(緑アイコン)]-[データモデルの管理]-[ホーム]-[表示]-[ダイアグラムビュー]。
    c) [データ]-[データモデルv(緑アイコン)]-[リレーションシップ]-[編集]。

ファクトテーブル *--<--1 ディメンジョンテーブル(関連)
'予算'[日付] *--<--1 '日付'[日付]
'実績'[日付] *--<--1 '日付'[日付]
'予算'[商品] *--<--1 '商品'[商品]
'実績'[商品] *--<--1 '商品'[商品]

ダイアグラムビューでは、*(多)から1へ項目をドラッグする。
リレーションシップでは、上段が*(多)で下段の関連が1になるように項目を設定する。

6. ピボットテーブルの生成

  1. [挿入]-[ピボットテーブルv]-[データモデルから]で、ピボットテーブルを生成する。

7. メジャーの作成

  1. 次のいずれかの方法でメジャーを作成する。
    a) ① ピボットテーブルを選択し、右に"ピボットテーブルのフィールド"を表示。② メジャーを作成するテーブル('予算'または'実績)を右クリックし[メジャーの追加]。式の先頭は「=」から始める。
    b) [Power Pivot]-[管理]でメジャーを書くテーブルの下の空白セルを選択。数式バーにメジャーを入力する。先頭は、「メジャー名:=」から始める。
    c) [データ]-[データモデル(緑アイコン)v]-[データモデルの管理]で、メジャーを書くテーブルの下の空白セルを選択。数式バーにメジャーを入力する。先頭は、「メジャー名:=」から始める。

予算に作成するメジャー

M予売上:=SUMX('予算', '予算'[数量] * '予算'[単価])

コンテキストの'予算'テーブルの1行毎に「'予算'[数量] * '予算'[単価]」を計算して合計する。
M予数量:=SUM('予算'[数量])
M予単価:=DIVIDE([M予売上], [M予数量])

[M予売上]÷[M予数量]の意味ですが、[M予数量]が0の時はエラーを返しません。
M売上偏差予:=[M売上] - [M予売上]

M数量要因予:=SUMX(
VALUES('商品'[商品]), // CROSSJOIN(VALUES('商品'[商品]), VALUES('顧客'[顧客])),
([M数量] - [M予数量]) * ([M単価] + [M予単価]) / 2
)

売上数量偏差 = 数量差 × 単価 です。単価に実績と予算の平均単価を用います。[*1]
M単価要因予:=SUMX(
VALUES('商品'[商品]), // CROSSJOIN(VALUES('商品'[商品]), VALUES('顧客'[顧客])),
([M単価] - [M予単価]) * ([M数量] + [M予数量]) / 2
)

売上単価偏差 = 単価差 × 数量 です。数量に当年と前年の平均数量を用います。[*1]

実績に作成するメジャー

M売上:=SUMX('実績', '実績'[数量] * '実績'[単価])

コンテキストの'実績'テーブルの1行毎に「'実績'[数量] * '実績'[単価]」を計算して合計する。
M数量:=SUM('実績'[数量])

M単価:=DIVIDE([M売上], [M数量])

[M売上]÷[M数量]の意味ですが、[M数量]が0の時はエラーを返しません。
M売上前年:=CALCULATE([M売上], SAMEPERIODLASTYEAR('日付'[日付]))

CALCULATEで前年同期を示すSAMEPERIODLASTYEARにコンテキストを変更して[M売上]の中で合計SUMを求める。
M数量前年:=CALCULATE([M数量], SAMEPERIODLASTYEAR('日付'[日付]))

CALCULATEで前年同期を示すSAMEPERIODLASTYEARにコンテキストを変更して[M数量]の中で合計SUMを求める。
M単価前年:=DIVIDE([M売上前年], [M数量前年])

M売上偏差前年:=[M売上] - [M売上前年]

M数量要因前年:=SUMX(
VALUES('商品'[商品]), // CROSSJOIN(VALUES('商品'[商品]), VALUES('顧客'[顧客])),
([M数量] - [M数量前年]) * ([M単価] + [M単価前年]) / 2
)

売上数量偏差 = 数量差 × 単価 です。単価に当年と前年の平均単価を用います。[*1]
M単価要因前年:=SUMX(
VALUES('商品'[商品]), // CROSSJOIN(VALUES('商品'[商品]), VALUES('顧客'[顧客])),
([M単価] - [M単価前年]) * ([M数量] + [M数量前年]) / 2
)

売上単価偏差 = 単価差 × 数量 です。数量に当年と前年の平均数量を用います。[*1]

[*1] : この計算は1グループ毎に行う必要があります。なので、複数の分類を含むグループの場合は、CROSSJOINを用いてグループのリストを作成してください。例えば、顧客と商品でグループ化する場合は、CROSSJOIN(VALUES('商品'[商品]), VALUES('顧客'[顧客])) とします。

8. ピボットテーブルの設定

1) 対予偏差

  1. 次のように項目を設定します。
  • 列 : '日付'[年度]、'日付'[四半期.]、'日付'[月]
  • 行 : Σ値、'商品'[商品]
  • Σ値 : [M売上]、[M売上予]、[M売上偏差予]、[M数量要因予]、[M単価要因予]
  1. ピボットテーブルの[年度]の[▼]で26年度以外のチェックを外す。
  2. [ピボットテーブル分析]-[オプション]-[レイアウトと書式]で"更新時に列幅を調整する"のチェックを外す。
  3. [ピボットテーブル分析]-[オプション]-[表示]で"データのないアイテムを行/列に表示する"のチェックを外す。(これをチェックする場合は、フィルターやスライサーで表示しないディメンジョン項目の選択を解除する。)
  4. [デザイン]-[レポートのレイアウト]-[表形式で表示]。
  5. [デザイン]-[総計v]-[列のみ集計を行う]。
  6. 小計を表示する列項目を右クリックし、["xxx"の小計]をクリックして✓マークを付ける。
  7. [デザイン]-[ピボットテーブルスタイル]でベースとするスタイルを右クリックし[複製]。ユーザー設定のスタイルを右クリックし[変更]でスタイルを変更。
  • 小計列 1 : 右罫線(太); 網掛け
  • 小計列 2 : 右罫線(細); 網掛け
  • 列小見出し 1 : 上罫線(太)
  • 列小見出し 2 : 上罫線(細)

2) 対前年偏差

  1. 対予偏差のピボットテーブルをコピーします。
  2. 次のように項目を設定します。
  • 列 : '日付'[年度]、'日付'[四半期.]、'日付'[月]
  • 行 : Σ値、'商品'[商品]
  • Σ値 : [M売上]、[M売上前年]、[M売上偏差前年]、[M数量要因前年]、[M単価要因前年]

参考:ピボットテーブルの設定は、データモデルに影響しないので、ピボットテーブルをコピーして別の設定をすることが可能です。テーブルは、データモデルそのものなので、コピーして別の設定にすることができません。

9. サンプル

ダウンロード - 260718diff.zip

C:\Users\Public\Documents\260718diff に展開した各ファイルを置いてください。

10. 参考

| | コメント (0)

Insta360 X5でラジコン飛行機を撮影

まえがき

1人でラジコンの撮影は難しいのと、シミュレータの飛行場画像を1回で撮影できるかもしれないということで、360度カメラを買ってみました。

結論から言うと、センサーサイズ1/1.28インチの360度でラジコンの撮影は、解像度不足でできないです。次の例はシングル4KからFHDの切り出しですが、画質が悪いです。

撮影例 : 4K(3840x2160)60fpsからFHD(1920x1080)を切り出し

シングルで撮るなら、360度カメラより他の広角アクションカメラの方が画質は良いようです。

シミュレータの飛行場画像は、パノラマ雲台を用いたコンパクトカメラよりぼけますが、使えないことは無いです。

1. 取扱説明書

取扱説明書を見てから気づいたのですが、中国メーカですね。米国だと思っていました。
iPhoneやMeta QuestのManualも酷いですが、Insta360も酷いです。
アクティベイトしないと本体が使えないようなので、スマホにアプリを入れたところ、アカウントの作成を求められてのですが、目的が分からなかったのでアプリを閉じました。
その後再びアプリを起動したら、アカウントの作成画面は出なかったので、本体のアクティベーションをしました。自動的にファームウェアの更新がされました。
ネットで検索したら39頁の日本語マニュアルがあったので、印刷してみました。Acrobat Readerの小冊子機能で印刷すると、A4用紙10枚で印刷でき、半分に折って閉じることでA5の取説ができます。内容は貧弱で、ボタンなどの機能は書いてあるのですが、その機能が何をするのかは書いてありません。編や置が中国字体になっています。まあ、それでも無いよりは良いです。

2. Windows Insta360 Sudio

WindowsのInsta360 Studioをダウンロードしようとしたところ、メールアドレスの入力画面が出てきたのですが、シリアル番号にも切り替えられたのでシリアル番号を入力してダウンロードしました。
Insta360 Studioのインストール時に「Windowsファイヤウォールのホワイトリストにこのアプリケーションを追加する」と出てきたので、チェックを外してインストールしました。

Meta Questはアカウントの作成が必須ですが、Insta360はアカウントを作成しなくても使えるようです。この点は、Metaより良いですね。ファイヤーウォールの回避設定が選択できるのも良い点です。認証はハードウェアでできるし、ハードの改造をすることも無いので、アカウントの作成やファイヤーウォールの除外による情報流出はできるだけ避けたいものです。

3. USB端子

防水の為、少し奥まったところにあるので、L字型のケーブルは使えませんでした。

4. ミニリモコン

説明書には「Insta360アプリ>設定> 更新にアクセスし、リモコンに接続します。新しいファームウェアがあれば、ポップアップで通知されます。アプリの指示に従ってリモコンを更新してください。」と書かれているのですが、リモコンには接続できません。不思議です。
USB端子に蓋がありません。

5. 保持

縦長で三脚ネジが下部にあるので、体に固定すると重さで傾き、不安定です。
帽子や腕などのアタッチメントを買ってみましたが、使えそうなのは体の中央に固定するものだけでした。
一般的なアクションカメラに比べると体への固定は不安定で難しいです。

6. 画質

1) 360度動画の画質

5.7Kで1920x1080に書き出すと、中央部分の解像度の低さが若干気になります。
8Kの場合は、早いパンニングでブロック状のずれが若干出ます。1920x1080で書き出すと中央部の解像度が改善されるようですが、十分とは言えないです。センサーが映す画角が普通のカメラの数倍なので仕方ないのかも知れません。

8Kでのラジコン飛行機の動画撮影は厳しいです。機体が小さく映るのでかなり拡大する必要があり、8Kでも画素数が足りないです。圧縮ノイズも目立ちます。
30fpsは遅いです。
標準設定では飛行機がパラパラ動画になります。

晴天ではND64フィルターを付け、AdaptiveToneをOff、シャッタスピードを1/60~100、で撮影するとコマ送り感は無くなります。曇りでもND16が必要です。
(AdaptiveToneをOnにすると、手動でシャッタースピードの設定ができません。)

Std,Auto WBでしか撮影していませんが、若干色が黄色っぽいです。

2) 360度静止画の画質

8Kでのラジコン飛行場の静止画撮影は合格点を上げても良いかも知れません。画素数に関してはかなり良い線まで行っていると思います。但し、コンパクトカメラを用いてパノラマ運台で撮影した画像よりぼけます。この原因は不明ですが、魚眼レンズの光学解像度不足かも知れません? でも、35mmカメラでは50枚近く撮影する必要があるのに対し1回で撮影ができるので、非常に楽です。

3) シングル動画

4Kで60fps出ます。しかし、ラジコン飛行機がパラパラ動画になりました。シャッタースピードを遅くすると白飛びします。なので、NDフィルタ(64,16)が必要です。
ラジコン飛行機の撮影の場合は、機体を大きくするためFHD画角で切り出します。その場合、4K/60fpsだと撮影時に16:9(3840x2160)、9:16(2160x3840)しか選べないのは不便です。1:1(3840x:3840)のFreeFrameは、30fpsしか出ません。

4) NDフィルタND64(6段分減光)の効果

少し明るい曇り空で試したところ、シングル/4K/60fps時に、SS:1/100~120(Manual)、ISO:1250(Auto)でした。
これにより、シングル時のパラパラ感は無くなりました。
ND64フィルタは非常に濃いサングラスのような濃度です。晴天では良いですが、曇りでは暗すぎます。曇りは、ND16(4段分減光)位が良いです。

NDフィルターは外れやすいです。フィルターが何かにぶつかり外す方向に回ると簡単に外れます。

7. 使ってみて分かったこと

1) 撮影姿勢の影響

Insta360 Studio上では、カメラの角度に関係なく、地面が下になる位置で再生されるようです。これは便利です。

2) レンズ交換可能

レンズが傷ついたときに交換できますが、これはレンズ本体の部分らしく、レンズプロテクタではありません。レンズプロテクタはオプションです。

3) NDフィルタが必要

ND64~16のような暗いフィルターが必要なのは、絞り機構を持っていないためかも知れません。マニュアルモードにも絞りの項目がありません。NDフィルターは面倒なので、絞り機構を付けてほしいですね。

4) 録画の停止

取扱説明書には○ボタンを押すことになっていますが、バージョンアップしたら止まらなくなりました?
1回押すとマークがつく仕様になったのかもしれません?
2回押しで止まるようです?

更にバージョンアップ(v1.11.6)したら、1回で止まるようになりました。

5) 電源Off時の電力

測定をしていませんが、電源Off時の待機電力が大きいようです。長期間使用しない場合は、定期的な充電が必要です。

8. RealFlightへの取込み手順

  1. 撮影したファイル名を飛行場名にします。半角英数字が良いです。

  2. RealFlightのメニューバーを表示している場合は、次の手順になります。
    [Simulation]-[Inmport>]-[Raw Panoramib Image...]-撮影したファイルを選択し[開く]

  3. RealFlightの新メニューの場合は、次の手順かなと思ったのですが、.jpgを選択できませんでした。Version 10.10.215では、.jpgを選択できます。
    [Esc]-[My RealFlight>]-[Import>]-[Airport(including Panoramic Image)]

9. 余談

Webページ

Insta360のWebページは、大きな画像が多く、情報密度が低く、スクロール量が長く、情報を見つけにくいです。Apple、Metaなどと同じ酷いWebページです。仕様やサポートページに辿り着くためには、沢山のスクロールを強いられます。

10. 余談

X6、OSMO 360 ||

細かいところで言えば、新しい機種の方が画質が良いです。特にRC撮影では、フレームレートに差を感じるところです。但し、X5で不満なFHD切り出し画像の解像度は、新機種でも大差ない印象です。ここが改善しないと、買い替える気にはなかなかならないですね。DJIは2カメラのつなぎ目の処理がInsta360より劣る感じがします。カメラの幅が広いことも影響しているのかも知れません。[2026/09/04]

| | コメント (0)

RealFlight 8の起動時に、Meta Horizon LinkとSteamVRが起動する問題

1. 問題

Windows 11でRealFlight 8を起動したときに、Meta Horizon LinkとSteamVRが起動するようになりました。また、その後にWindowsをシャットダウンして起動すると、Windowsの起動時にMeta Horizon LinkとSteamVRが起動します。

そこで、Copilotに質問したところ4つの方法が回答されました。この内、起動オプションを付ける方法だけが有効でしたので紹介します。もし、VRで起動した時があるのであれば、ショートカットを2種類作ればよいでしょう。

環境

  • このPCには、SteamのRealFlight EvolutionとRealFlight 9.5Sが入っており、こちらを起動したときは、Meta Horizon LinkとSteamVRが起動しません。
  • RealFlight 8は、Steamで購入したものではありません。なので、Steamのライブラリにはありません。VRには対応しています。
  • スタートアップアプリに、Meta Horizon LinkとSteamVRはありません。Meta Quest Remote Desktop.exeは、無効にしています。
  • タスクスケジューラーのMQRDは、無効にしています。
  • 次のフォルダに、MetaやSteamのショートカットはありません。
    C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup
    C:\Users[user name]\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

2. Copilotが回答した原因(真偽は不明)

RealFlight 8 が “VR 対応アプリ” として起動しているため、Windows が自動的に VR ランタイム(Meta Horizon Link と SteamVR)を呼び出しているのが原因です。
Steam 版の RealFlight Evolution / 9.5S では起きないのは、SteamVR を必要としない通常モードで起動しているためです。
RealFlight 8 は古い世代の VR 対応アプリで、起動時に以下の順番で VR ランタイムを探します:

  1. OpenXR(Meta Horizon Link が登録されている)
  2. OpenVR(SteamVR)
  3. 通常モード
    そのため、RealFlight 8 を起動すると Meta Horizon Link → SteamVR が勝手に起動します。

3. 対策

RealFlight 8 の VR 起動を強制的に無効化する

RealFlight 8 には起動オプションがあります。ショートカットに 「-novr」 を付けると VR を完全に無効化できます。

● 手順

  1. RealFlight 8 のショートカットを右クリック → プロパティ
  2. 「リンク先」に以下のように追記:
"C:\Program Files\RealFlight8\RealFlight8.exe" -novr
  1. OK を押して保存
    これで RealFlight 8 は VR モードを一切起動しなくなり、Meta Horizon Link も SteamVR も起動しない。

4. 余談

Copilotはこれ以外に、OpenXR RuntimeをMeta(Oculus)以外にする、SteamVR の「自動起動」を無効化する、RealFlight 8 の設定ファイルで VR を無効化する、方法を提案してきましたが、これはハルシネーションでした。

| | コメント (0)

Panasonic VIERA TH-43MR770 PCの動画表示 音質評価

1. 前書き

テレビ(TH-43MR770)を購入したので、戸惑った点などを紹介します。

2. ネットワーク機器のコンテンツの再生

1. 取扱説明書

再生にメディアプレーヤーを使うらしいのですが、ビエラ操作ガイドのP.168のメディアプレーヤーに、メディアプレーヤーの起動方法が書かれていません。TVのメニューに「メディアプレーヤー」という表示は無いです。「接続機器一覧」がメディアプレーヤーの入り口なのかも知れません?

ビエラ操作ガイドのP.170の「機器やコンテンツを選択する」に「3.接続機器を選び、... 4.ネットワーク機器も表示されます。」と書いてありますが、パソコンが表示されません。ネットワーク機器の条件を満たしていないためだと思われますが、説明書に必要条件が記載されていません。

2. 原因

パソコンが表示されない原因は、パソコンがDNLAサーバー/メディアサーバーになっていないことです。

3. 対策

1) DNLAサーバーの設定

Windows 11の場合、[Start]-[Windowsツール]-[コントロールパネル]-[ネットワークと共有センター]-[メディアストリーミングオプション]-[メディアストリーミングを有効にする]-[OK]です。

2) フォルダの設定

  • Explorerで再生したい音楽や動画のフォルダを右クリック、[その他のオプションを確認]-[ライブラリに追加]-[ビデオ/ミュージック/ピクチャー]です。
  • Windows Media Player Legacyの[整理v]-[ライブラリの管理>]-[音楽/ビデオ/画像]-[追加]でフォルダを追加し[OK]でも良いです。

4. ミラーリング

ミラーリングとは、PCやスマホなどの端末の画面や音声をTVに出すことです。
ビエラ操作ガイドのP.300の「ミラーリングを使う」に「お手持ちの端末のミラーリング機能については、端末の取扱説明書をご覧になるか、」と書いてあります。それ以上のことは書かれていません。端末であるWindows PCの取扱説明書に、ミラーリングのことは書かれていません。

Google検索したら、次の記事が見つかりました。

操作

  • TVを[ホーム]-[機器設定一覧]-[ミラーリンク]にした状態で、Windows PCの[Windowsマーク]を押しながら[k]を押すと、キャスト先としてTVが表示されるのでそれをクリックします。すると、初回のみTVに許可を求めるメッセージが出るので、決定ボタンで許可するとTVがPCの外部モニタになります。

  • [メニュー]-[≡]-[ネットワーク]-[ミラーリンク]-[かんたんミラーリンク]をオンにすると、TVの電源が入っている状態で、PC側をキャストすると、TVがPCの外部モニタに切り替わります。

  • 外部モニタは、複製にも拡張にも設定できます。[Windowsキー]+[p]で複製/拡張切替。[Shift]+[Windowsキー]+[→/←]でWindowの画面移動。

5. オーディオと音質

前のTV(日立 L37-XR01-2)より聴感で音質が悪いです。現在のテレビは、TV画面の縁が狭くスピーカの搭載場所が悪化し、音質が悪化したようです。

そこで、外部スピーカーを検討したのですが、前のTVとデジタル音声出力の仕様が異なり、同じ仕組みにはできませんでした。前のTVはデジタル音声がLINE OUTで、TVの音量コントロールの影響を受けませんでした。

ビエラは、デジタル音声出力(光)とTV本体のスピーカーの音量調整と消音が共通です。TV本体スピーカーを消音し、デジタル音声出力だけから音を出すことができません。TVと外部スピーカーの両方から音を出すと、両者の音色が異なるので違和感があります。消音の代わりにTVスピーカの音量を絞り外部スピーカーのゲインを上げたら、PCMのS/Nが悪化し駄目です。よって、デジタル音声出力を外部スピーカに使用することを断念しました。

イヤホンとTVスピーカの同時出力をオンにすると、イヤホンの音量はメニューで設定し、スピーカの音量はリモコンで調整する動作になります。メニューのイコライザーや低音強調は、スピーカーのみに働き、イヤホンには働かないようです。そこで、イヤホン出力をアンプ経由で外部スピーカに接続するようにしました。これにより、TVスピーカの音量はTVリモコン、外部スピーカの音量はアンプで調整することができるようになります。アナログ接続である点が残念ですが、REWでのf特測定結果は改善しました。

SONYのBDレコーダのリモコンは、音量ボタンを他社のAVアンプに割付けることができるので、TVとAVアンプをコントロールできます。Panasonicと異なり、AVアンプで外部スピーカを使うことが考慮されています。AVアンプのリモコンは学習リモコンなので、それでもTVとAVアンプをコントロールできます。

外部アンプとの電源連動

TVにHDMI出力が無いので、HDMI-CECによるAVアンプとTVの電源連動はできません。なので、PC電源連動タップ「サンワサプライTAP-RE4MN」を使いました。外部機器用のUSB端子は、TV電源Offでも電源が切れません。録画用のUSB2端子は電源連動タップの信号に使えそうです。しかしUSB制御仕様が不安なので、電流検出タイプを選びました。このTVはスタンバイ時の電流が26mAなので、感度調整無しで使えました。Off時はUSBと同様にタイムラグがあります。

このタップには「本機はパソコン専用です。その他の機器ではご使用できません。」と黄色で大きな注意書きが入っています。最大電力は問題ないですが、アンプは大容量の電源平滑コンデンサを使用しているので、突入電流については注意が必要です。これが大きいとリレーの接点を劣化させ、発火することも考えれれます。オシロスコープとクランプ式の電流プローブで突入電流を測定したところ3.12Aでした。定常電流は78mAなので、ほぼ平滑コンデンサの充電電流でしょう。一般的なリレーの仕様では1桁大きい試験をしているようなので、十分耐えられる数値だと思われます。しかし、メーカーの注意書きを無視した使い方ので、自己責任となります。突入電流を測定できない人は、使用しない方が賢明です。

アンプはONKYO A-V801PROなのですが、その時代の他のONKYOのアンプの回路を見ると、突入電流防止回路のようなものは無さそうです。パワーインフェイズトランスが入っていて、これで多少電流が抑えられているのかも知れません。逆に切断時はこのトランスが悪影響を及ぼしますが、電源OFF時は消費電流も小さいので、それほど心配ないと思われます。
260712tvon

周波数特性

Room EQ Wizardで測定した結果を次に示します。https://www.roomeqwizard.com/

  1. TVスピーカー補正無し(音声モード=ユーザー、サラウンド音場設定=オフ、低音強調=オフ、スポーツ連動=オフ、音量オート=オフ、音量補正=0、明瞭調整=オフ、AVシンク=オフ、ダイアログエンハンスメント=オフ)
  2. TVスピーカー補正あり(イコライザー:150Hz=+3dB、12kHz=+6dB、その他=±0dB。低音強調=オン)
  3. 外部スピーカー(Pioneer S180Ⅲ)https://audio-heritage.jp/PIONEER-EXCLUSIVE/speaker/s-180iii.html

260630rnoeq260630req260630rs180260630r
260630lnoeq260630leq260630ls180260630l

  1. TVスピーカー補正無しの周波数特性は、約150Hz~8kHzくらいです。4K画質にふさわしくないローレゾ音声です。
  2. TVスピーカー補正ありで多少改善しますが、音楽番組は厳しいです。背面スピーカーの反射波の合成音なので、補正は難しいです。
  3. 外部スピーカーは高低音ともよく出ます。左の低音が大きいのは、部屋のコーナー側面壁際に配置しているからです。これは部屋の影響なので、コーナーから離すなど配置を変えないと下がりません。(DSPで多少は補正できるかも知れませんが? https://www.minidsp.com/products/minidsp-in-a-box/minidsp-2x4-hd 115円/USD位のときに買っておけばよかったと後悔)

測定条件

  • マイクの位置 : TV前面中央から約1.2m
  • PCとTVの接続 : 有線LANのキャストで接続です。キャストだと時々僅かな音声ノイズが入ります。HDMI接続の方が良かったですね。
  • マイク : メーカーキャリブレーションデータ付きUMIK-1。https://www.minidsp.com/products/acoustic-measurement/umik-1
  • No timing reference で測定。(Use Acoustic Time Refernceでは、うまく行きませんでした。)
  • 測定音量 : Check Levelsでの値は、約-55dBです。

6. 余談

19年使用した日立L37-XR01-2が壊れたので買い換えました。画面に縦筋が入るのですが、画像によって出る場所や量が異なるので、液晶パネルとその駆動系では無く画像処理系の故障です。画像処理系のLSIの半田をヒートガンで溶かせば直るかも知れませんが、分解が面倒なのと古いので止めました。

TH-43MR770は発売(2023年10月)から約2年8ヶ月経過した機種ですが、IPSパネルで手持ちのラックに入るものがこれしかありませんでした。HDD/BD付という点が良いです。カタログにはまだ掲載されており(2026年7月時点)、2026年製でしたので、一応現行品です。

1) 取扱説明書

昔からPanasonicの取扱説明書やWebページは、分かりにくいです。特にネットワーク関連の情報が不足しています。

2) 性能

  • 動作は速いです。工場出荷時設定では、電源Offでも何かが回っている音がしていました。その後、エコ設定などをしたところ、電源Off時に回っている動作音が無くなり、26mA、0.00W、力率0.0になりました。これでも、起動が速いです。
  • 4Kのアップコンバートはきれいです。SD解像度のものでも、元画像がぼけていなければ、解像感が向上します。
  • 色温度が中だと高いように思えます。低1にしました。
  • 入出力端子は少ないです。ネット機器に接続できます。
  • androidアプリは、既定のものしか入りません。VLC for androidは入りません。なので、再生できるファイルはメジャーなものに限ります。
  • PanasonicのTVを使うのは、初めてです。Panasonicの昔のTVは、音質も売りにしていたような気がするのですが...
  • デジタル音声出力がTVスピーカの音量と連動するという仕様の意図が分かりません。PanasonicのTVオーディオの設計者が何を想定しているのでしょうか? AVアンプやサウンドバーで外部スピーカーに切り替える使い方が一般的だと思うのですが。

| | コメント (0)

« 2026年6月 | トップページ | 2026年8月 »