ラベル Excel Services の投稿を表示しています。 すべての投稿を表示
ラベル Excel Services の投稿を表示しています。 すべての投稿を表示

2015/02/26

重複したデータをチェックする - ピボットテーブルの応用

前回は入力されたデータが正しいか、正しくないかをピボットテーブルを使ってチェックする方法を紹介した。今回は「重複したデータのチェック」をピボットテーブルで行う方法を紹介したい。
重複行の削除
以前の投稿で重複行の削除を行ったユニークデータ リスト(テーブル)の作成方法を紹介した。
Power Query を使った重複行の削除
しかし、そもそも入力した段階で「重複してほしくない」というケースは多々ある。Access や SQL Server などを利用するデータベース アプリケーションであればデータベースのテーブル設計で「ユニークなキー」や「一意のデータ」として列に制約をかけて、同じデータを入力させないようにするだろう。
しかしながら、田中メソッドの「入力-計算-出力」の入力でこのような重複データ入力の禁止を Excel で実現するにはいろいろなテクニックを駆使しなくてはならない。
たとえば、Excel の入力規則でユニークデータの制約を行う場合、テーブル、名前、入力規則を組み合わせることで以下のようなチェックが可能になる。
・ 表をテーブルにする(データ増減に対応させるため)
・ 対象となる列を「名前」登録する(入力規則で構造化参照が直接できないため、名前を使う。詳しくはこちらを参照。)
・ 入力規則の [ユーザー設定] の数式を使い、その列でのカウントが2未満の場合だけ入力可能にする
そのほか、条件付き書式を使って重複したら色を変えるなどでチェックする方法もある。
r2co20150226B
一方、入力において SharePoint リストを使っている場合は、いくつかの列の種類の追加設定の [固有の値を適用する] でユニークなデータの列として設定が可能だ。
この追加設定がされた列で重複の列データを入力しようとすると、以下のように「この値は既にリストに存在しています。」と表示されアイテム保存ができなくなる。
SharePointリストユニーク列
実務はもっと複雑だった
実践ワークシート協会の業務で、この重複チェックの必要性が発生するのは複数のスタッフによるセミナー申込登録だった。
複数の人が Office 365 の同一の申込用の共有メールボックスをみて未登録のお申込みを SharePoint リストに登録する業務で、同じお申込みの多重登録を避けたい、という要件だ。
処理をはじめたメールアイテムに Outlook 上で「フラグ」を付けるなどの運用上のルールは設定したが、それにより絶対多重登録がない、とはいえない。
加えて、一意(ユニーク)なデータにする条件が上述の「ユニークキーの設定」で対応できるほど単純ではなかった。
現在、協会の Excel VBA セミナーは「ベーシック」と「スタンダード」の2種類がある。たとえば A さんがこの2つを同時に申し込むと「セット割引」が適用されるため、2つ同時に申し込むことが多く、その時、A さんの名前やメールアドレスはお申込みテーブル上、複数存在することになる。おともだち割引などもお申込みいただいた方のメールアドレスが一意にならないケースがある。同じコースを別の日に受ける再受講といったケースもある。
一意になるのは、受講するコースの、受講する日の、受講者の名前、という組み合わせになる。同じ名前の人が複数人同じ日の同じコースを受講することはない。(同姓同名はカバーできないが)
この制約を実装する方法はいくつかあるが、協会としては 1) SharePoint リスト構造はなるべくシンプルにする 2) SharePoint 開発は行わない と考えていたので、あくまで 1つのお申込み登録リストを使い、入力後に Excel Services / Excel Web Access でチェックする方法を選択した。
この重複チェックにも Excel のピボットテーブルを使っている。
ピボットテーブルで重複データをチェックする
これも入力チェック同様ピボットテーブルの機能を使った実にシンプルな方法である。ただし、Excel のピボットテーブルは単にクロス集計表を作るだけのものではない、という認識が必要だろう。
ピボットテーブルの「値フィルター」を使うことで、受講するコース、受講する日での重複登録された受講生の名前を確認することが可能だ。
以下が、その設定方法と考え方である。
1) ユニークなキーになるための条件である [実施日]、[コース名]、[名前] の順で行を構成し、カウントするために値に [名前]を指定したピボットテーブルを作る
2) ピボットテーブル レポートの [名前] の上で右クリックでメニューを出し、[フィルター] – [値フィルター] を選択する
3) フィルター条件として「2以上だったら」を設定する
この値フィルターは [名前] の上で設定するのがポイントだ。そうすることで日付けとコース名で絞られた後の [名前] の集計に対してフィルターをかけることができる。
コース名や日付の上で [値フィルター] を設定すると、それぞれの集計数に対してのフィルターになるので違った意味になることに注意する。
以下のアニメーション GIF は、岡田さんの登録が多重になっている状態でのピボットテーブルの設定と、多重登録のレコード(行)を削除して、ピボットテーブルを更新するまでの流れである。
r2co20150226A
あとは、このピボットテーブルを Excel Web Access を使って SharePoint の受講申込サイトに貼り付け、入力した後でデータ更新をかけることで、重複登録されているかどうかのチェックが可能だ。
繰り返すが、このような入力業務を数十人でやる場合はお金、時間をかけて入力チェックを組み込んだ入力フォーム、SharePoint アプリを開発すべきだが、10人以下、同時使用も数人という規模であれば、Excel を使うことで対応可能だ。それも VBA を使ったプログラミングではなく、ピボットテーブルと SharePoint と Excel Services の機能を使うことで目的を短期間・低コストで達成できることは中小規模の企業や組織にとっては大きなアドバンテージになると思う。
この投稿がなんらかのヒントになれば幸いである。


[PR] VBAセミナー受講後は、これさえあれば何もいらない

2015/02/24

入力されたデータをチェックする - ピボットテーブルの応用

Excel であったり、SharePoint リストであったり、なんらかの方法で入力されたデータのチェックをする必要が出てきた場合のピボットテーブルの使い方を紹介する。

入力値のチェック

本来、入力時に入力されたデータが正しいかどうかのチェックを行い、もし、間違っているようであれば再入力を促すのが正攻法であろう。Excel ではそのために「入力規則」という機能が用意されている。

[Office Support] セルにデータの入力規則を提供する

また、SharePoint リスト入力でも簡単な入力値のチェックの設定(入力されるデータの「型」の指定など)は可能だ。さらに条件によって入力値のチェックをするのであれば、InfoPath を使ったり、JavaScript/CSS/HTML によるリスト フォームの変更、SharePoint アプリの開発が必要になる。いわゆる「入力フォーム」を作成することになる。

しかし、このフォーム カスタマイズのためのサードパーティーのツールがいくつか提供されているという現状から、すぐに素人が標準機能で作成できるものではなく、それなりにトレーニングを受け、実務で OJT を通して経験を積まなければ、思い描く入力フォームをすぐに作成できないのが現実だ。

アンク様 SharePoint ソリューション

データ入力フェーズとして SharePoint リストや SQL Azure を利用する Office 365 Access アプリといったクラウドサービスの場合は、複数人による利用、入力を前提としている。これらを利用することで Excel 単体のみで「入力ー計算ー出力」の実務データの流れを実装するより、はるかにファイル(ブック)のロックや「他の人が使用中」といった問題、または入力用ブックを多数配布した後の集計をどうするか、といった考慮すべき点が少なくなる。

反面、データの型(文字か、数値か)やデータの範囲の入力制限、ユニークキーといった一意の値の列のみ入力などは容易に設定できるものの、ロジックや条件によって正しいか正しくないかを判定することは、その設定(アプリケーション作成)のハードルがやや高くなることは否めない。

もちろん、この入力業務を数十人以上といった大規模で行うのであれば、お金と時間をかけてでもバリデーションチェックを組み込んだ入力フォームを作るべきだが、3~5人の業務であれば 「注意して入力して!」 と担当者にお願いするのが関の山だ。それでも「誤入力」は起こる。

この誤入力を Excel 側で発見して対応するのが今回の目的である。

VBA は使わない

誤解しないでほしいのは、VBAを使えないわけではない。VBAを使えば、ほぼやりたいことはできる。しかし、VBAは最後の手段としてとっておきたい。理由は「業務上の引継ぎ」での「メンテナンスのためのスキル」からだ。機能や関数はわかっていても VBA はちょっと、、、というユーザーが多いためだが、もうひとつ、その他の要素として Office 365 SharePoint Online との親和性の問題がある。SharePoint Online 上の Excel Online で VBA を動かすことができないからだ。VBA を含んだブック (.xlsm) は一度 PC にダウンロードして、PC 側の Excel で開くことで利用が可能だが、できれば Excel Online だけで完結する方法をまずは検討してみたい。

入力された値が正しいかチェックする

ピボットテーブルというと「クロス集計表」を作るためのもの、と認識されるだろう。ピボットテーブルの主たる目的はそのためであり間違いではない。ただ、ピボットテーブルの「可能性」を認識してもらえば、さらに応用がきく使い方ができる。そのひとつが入力値のバリデーションチェックだ。
バリデーションチェックのパターンとして入力された値が正しいかどうかのチェックをしたい場合がある。 たとえば以下のようなケースだ。

・ 入力された価格が価格テーブルのものと同じかどうか

以下は実践ワークシート協会の VBA セミナーのお申込み管理の事例だが、VBA セミナー(ベーシックコース、スタンダードコース)の標準受講料は 49,800 円である。ただし、割引制度がいくつかあり、割引によって受講料が変わる。

・ 標準受講料 49,800円
・ サポーター割引 39,800円
・ 継続割引 39,800円
・ セット割引 35,000円
・ おともだち割引 35,000円

このような入力の場合は、通常、選択した割引タイプから該当する授業料をもってくるように入力フォームを作成する。Excel であれば、VLOOKUP 関数やリレーションシップを使うことになるだろう。

r2co20150223_001

SharePoint リストの入力でも同様の設定が可能だ。それが 「参照」 列だが、VLOOKUP との大きな違いとして、VLOOKUP は参照した値(49,800 や 39,800)そのものを入力しているのに対し、参照列は値ではなく ID を参照している。たとえば、継続割引を 39,800 円から 35,000 円に変更しようとした場合、もし割引テーブルを参照している状態でテーブルの価格を変えると、新規入力のものだけではなく、過去のデータもすべて変わるという動きをする。この件は過去の投稿で紹介している。

Excel ユーザーのための SharePoint リスト 「参照」 列

そのため、実践ワークシート協会の申込情報入力では、少しでも入力業務を楽にするために、割引タイプをドロップダウン リストから選択し、対応する受講料もドロップダウン リストから選択する形にした。ドロップダウン リストからの選択は「値」の代入となるからだ。

r2co20150223_002

割引タイプに対応する受講料は入力画面の受講料の例に追記しているが、それでも間違って入力(選択)することがないとはいえない。
協会では、そのチェックを SharePoint 側の開発で行わず、Excel それも Excel Services (Excel Web Access) を使って、SharePoint 上で確認している。そこで使っている機能が「ピボットテーブル」である。

ピボットテーブルとリレーションシップを使った値の比較

実は仕組みはいたって簡単だ。入力されたデータと、本来マスターから取得したかったデータを比較し、同じであれば “OK”、違う値であれば “NG” と表示する数式をいれた集計列を追加して、その集計列の OK と NG をピボットテーブルで表示するだけだ。

第1のポイントは「本来取得したかったデータ」をリレーションシップを使って関連付けし、参照していることだろう。協会の仕組みでは、データ接続タイプは Excel Online 上でのデータ接続更新を可能にするため [データ] タブの [その他のデータ ソース] の [OData データ フィード] を使い、リレーションシップと集計列の追加は Power Pivot を使い、最終的にピボット テーブルを作成した。

r2co20150223_003
データ ダイアグラムによるリレーション

r2co20150223_004
集計列 [金額チェック] を追加し、数式を挿入

r2co20150223_005
ピボットテーブルで [金額チェック] の結果を集計する

第2のポイントは、このピボットテーブルを Excel  Services (Excel Web Access) を使い、入力業務ページの SharePoint 上で即時に更新可能に設定していることだ。こうすることで、わざわざローカル PC で Excel ブックを開くことなく、SharePoint 上でピボットテーブルの更新が可能だ。

問題がなければ、つねに「OK」のみの件数が表示され、問題がある場合のみ「NG」が表示され、NG件数がわかる。通常は、入力した直後にこのデータ更新によるチェックをかけるが、もし、複数件の NG が発生した場合は、ピボットテーブルをローカルPCで開き、NG件数をダブルクリックすることで該当データの詳細が表示される。残念ながら Excel Web Access 内でピボットテーブルからのドリルダウンはできないが、ドリルダウンによる分析が主ではないため、それほど問題にはならない。

r2co20150223_006

なお、Excel Web Access / Excel Services によるデータ接続の更新については以下の記事が参考になるだろう。

http://road2cloudoffice.blogspot.jp/2015/01/excel-online-excel-web-access-excel.html

SharePoint 上での Excel Web Access データ接続更新が可能になったおかげで、多くの確認処理を SharePoint サイト上のピボットテーブルで実装することが可能になり、Excel のスキルのみで業務を遂行することが可能になったのは非常に大きな効果である。
上記がなんらかの参考になれば幸いである。

2015/01/11

Excel Online / Excel Web Access (Excel Services) - データ接続の更新 SharePoint リスト

Office 365 SharePoint Online に Excel ブックを保存して他のユーザーと共有する、という使い方でもメリットがあるが、できれば保存したブックの中を簡易的に確認したい、編集する必要はなく参照だけで良い、という使い方もあるだろう。
 
このような場合、Office 365 SharePoint Online では以下の使い方が用意されている。
 
・ Excel Online で Excel ブックを開く
・ Excel Web Access Web パーツ(Excel Services) でサイトのページに貼り付ける
 
いずれの場合も「現時点での最新データを見たい」という目的であることは明確だ。
 
ブックで扱うデータがワークシートへの手入力の場合、Excel ブックの SharePoint に保存した状態を参照できる。ある意味、それが最新であり問題はない。問題になるのは「データ接続」している場合である。
 
Excel はさまざまなデータ ソースに外部データ接続機能を使って接続できるが、今回は SharePoint リストに接続したブックを Excel Online や Excel Web Access Web パーツで扱う場合を紹介したいと思う。
 
注意点としては、一部 TechNet や MSDN に明確に書かれていない方法を紹介することになる。米国マイクロソフトの英語版 Office ブログやフォーラムで Microsoft の担当者からの情報などを参考にしているが、私自身はそれを元に TechNet/MSDN といった公式技術文書で同様の記述をまだ見つけ出すことができていない。その点は留意されたい。
 
1つではない SharePoint リストとのデータ接続方法
 
SharePoint リストのデータを Excel にインポートする方法の代表格は SharePoint リストの「リスト」タブにある「Excel にエクスポート」だろう。
 
 
通常業務でリストのアイテムを Excel に取り込んで PC で集計・分析・レポートを作るのであれば、このエクスポートでほとんど問題がない。
 
ところが、この接続方法を使ったブックを SharePoint に保存し、それを Excel Online で開こうとして以下のようなメッセージを見たことがある人は多いだろう。
 
 
[詳細の表示] ボタンをクリックすると以下のダイアログが表示される。
 
 
このメッセージを見れば、多くの人は「SharePoint リストを使った Excel ブックは Excel Online で使えないのか」と思っても仕方ない。この接続方法を含んだブックのデータ接続は Excel Online で使えない、サポートされていないことは事実である。
 
実は SharePoint リストのデータを Excel にエクスポートする方法は数種類ある。区別を明確にするために、「接続のプロパティ」の「接続の種類」で使われている名称を使って分類したものが以下だ。
 
a) 接続の種類 : SharePoint リスト
SharePoint の [リスト] タブの [Excel にエクスポート] を使ったデータ接続。
 
b) 接続の種類 : Office データ接続
Excel のデータ タブの [その他のデータソース] の [OData データ フィード] を使ったデータ接続。
データ モデルは強制的に作成される。
 
c) 接続の種類 : OLE DB クエリ
PowerQuery の [その他のデータソース] の [OData フィードから] を使ったデータ接続。
ただし、データモデルの作成はしていないタイプ。
 
d) 接続の種類 : モデル OLE DB クエリ
PowerQuery の [その他のデータソース] の [OData フィードから] を使ったデータ接続。
データ接続作成の際、データモデルの作成も指定。
 
Excel と Office 365 SharePoint Online との接続という意味では上記の4つがある。
 
「SharePoint リスト」という接続の種類を含んだブックは Excel Online では利用できないが、MSDN や TechNet、Office Online などを調べると、OData フィードによる接続は Excel Online で利用可能、という記述を見つけることができる。
 
 
ところが、OData フィードによる接続も上記のように「Office データ接続」、「OLE DB クエリ」、「モデル OLE DB クエリ」の3種類存在し、かつ、そのまま利用しても、いずれの OData フィードのデータ接続でデータ接続の「更新」(refresh)ができないのが現状だ。

結論からいえば、ある「設定」をすることで、Excel Online や Excel Web Access Web パーツでもブックのデータ接続を更新して最新のデータを見ることが可能だ。その手順およびそれに対応した接続方法を紹介する。
 
Office データ接続で SharePoint リストをエクスポートする
 
Excel Online や Excel Web Access Web パーツ(Excel Services) での利用を考えているならば、SharePoint リストからのデータ取得は接続の種類「Office データ接続」を使うべきと言える。この接続方法であれば、ある設定(アプリ権限の付与)をすることで Excel Online 上でデータ接続更新が可能になる。
 
では、Office データ接続による OData データ フィードの構成をしてみよう。
 
1) エクスポートしたい SharePoint リストの URL を控える。
 
たとえば、以下のようにブラウザで SharePoint リストを表示した時、控えておきたい URL は "_layouts/15/start.aspx#/Lists/Seminar/" の前にある "https://jpwa.sharepoint.com/sites/r2co/" を控えておく。

 
2) Excel のデータ タブ - その他のデータ ソース の OData データ フィードで接続を構成する。
 
データ タブの [OData データ フィード」を開く。
 
 
データ接続ウィザードのダイアログが開く。
控えておいた URL の後に "_vti_bin/listdata.svc " と入力して [次へ] をクリックする。
このサンプルの場合は、"https://jpwa.sharepoint.com/sites/r2co/_vti_bin/listdata.svc "と入力する。
 
 

[追記] ここで Office 365 へのサインイン画面が表示される場合がある。一度、接続に対してアカウントとパスワードを登録することで、接続情報を削除しない、パスワードを変えないかぎり、接続の際のサインイン画面をスキップすることが可能になる。
[追記終わり]

テーブルの選択をする。ここでのテーブルは SharePoint の「リスト」を指している。
取り込みたいリストにチェックを入れて [次へ] をクリックする。
 
 
ファイル名や説明を変更できる最終ダイアログが表示される。Excel Services などの認証は変更せずにこのまま [完了] ボタンをクリックする。
 
 
データのインポート ダイアログが開く。表示方法の選択肢があるが、テーブルとしてインポートするのであれば、そのまま [OK] をクリックする。ここで [このデータをデータ モデルに追加する] オプションがチェック済みになっていてグレイアウトされている。強制的にデータ モデルを作成していることがわかる。
 
 
SharePoint Online のリストが Excel のテーブルとしてインポートされた。
 
 
この素のままのテーブル データを見るより、ピボット テーブルを使ってレポート形式にした方が実用的だ。このテーブルを利用してピボット テーブルを作成する。もちろん、この前の処理でのデータ インポートで「ピボット テーブル レポート」を選択して、素のテーブルを取り込まないことも可能だ。
 


OData データ フィード接続を含んだブックを SharePoint に保存する

このブックを SharePoint Online のドキュメントライブラリに保存する。
一旦ローカルに保存したものをアップロードしてもよいし、直接 SharePoint Online のドキュメントライブラリーを指定してもよい。この時、上で作ったピボットテーブルだけを Excel Online で表示・参照させたい場合は、ブラウザーオプションでピボットテーブルだけを指定しておく。
 


ではこのブックを SharePoint Online から Excel Online を使って開いてみる。
SharePoint リスト接続と違うのは、ブックを開いたとき、SharePoint リスト接続のような警告メッセージは表示されずに、指定したピボットテーブルが表示される。
 

なお、この状態でピボットテーブルのフィールドリストを操作してデータの分析が可能であり、これだけでも使い道は多いにあるだろう。

しかし、まだ、これだけでは SharePoint とのデータ接続のデータ更新は成功しない。Excel Online でデータ更新しエラーになる状況をアニメーションGIFでとったものが以下である。なお、データは上記とは別のブックで、データ接続更新設定をしていない別のテナント(Office 365) で実施したものになる。


SharePoint リスト接続とは違う以下のエラーメッセージが表示され、データ更新に失敗している。

----
外部データの更新が失敗しました。
ブック内のデータ モデルを処理しているときにエラーが発生しました。もう一度やりなおしてください。

このブックに指定されている1つ以上のデータ接続を更新できません。
以下の接続を更新できませんでした:
----

接続名はデータ接続ファイルを保存した時に指定したものが表示される。

Excel Online でデータ接続更新を可能にする設定(アプリ権限付与)を行う

冒頭に述べたように私自身が Office Online/TechNet/MSDN 内で公式な技術文書として探し出せていないのが、この設定である。ただし、この情報ソースは米国マイクロソフトの英語による社員ブログやフォーラムでマイクロソフト社員より提供されているものである。

(参照)
Office Blogs - Project Online and Excel Web App: Cloud data improves reporting
Project Online の OData フィードを Excel Web App で利用しデータ更新を可能にする設定について書かれたブログ(2013年3月29日)
http://blogs.office.com/2013/03/29/project-online-and-excel-web-app-cloud-data-improves-reporting/

[SOLVED] Excel service refresh issue
SharePoint リストを OData データ フィードで Excel 2013 で取り込み、Excel Online でデータ更新できない件について、MSFT Support から、この設定を提示しているフォーラムの投稿(2014年12月20日)
http://community.office365.com/en-us/f/172/t/284523.aspx

もし、Office データ接続 OData データ フィードを使った Excel Online でのデータ更新が成功している場合、すでにこの設定が他の管理者権限を持っているユーザーによって行われていると考えられる。この設定登録はサイト コレクションレベルでの登録だが、設定そのものはOffice 365 の「テナント」レベル(契約している Office 365 全体)にも登録される。そのため、例えば、テスト用のサイト コレクションでアプリ権限付与設定を行い、テスト終了後にサイト コレクションに登録された権限付与設定を削除しても、テナントレベルの登録を削除しない限り、テナント全てのサイト コレクションで有効状態になっている。そのため、該当するサイト コレクションで登録していなくてもデータ接続更新が可能になっている場合がある。

[追記] 上記の表現は正確でなかった。リンク先の記事の XML で「テナント」範囲での指定をしているからだ。スコープの指定がサイト コレクションであれば、登録したサイト コレクションのみ有効になる。サイト コレクションのみ有効になる XML は追記した。
[追記終わり]

登録するアプリのプリンシパル ID は "00000009-0000-0000-c000-000000000000" である。現在このプリンシパル IDのアプリ名は "Power BI" もしくは "Microsoft Power BI Reporting and Analytics" となっているはずだ。上述の Office Blogs では "Microsoft Azure Analysis Services" だった。(2013年3月末)
今後もアプリ名(Title)が変わる可能性があることに注意されたい。

1) テナントでの権限付与状態の確認

上記のプリンシパル ID のアプリへの権限がテナントに登録されていないことを一応確認する。
この確認は全体管理者権限を持っていないとできないのでユーザーの権限に注意すること。

管理ポータルを開く。


もしくは、以下から管理ポータルを開く



SharePoint 管理センターに移動する。


SharePoint アプリの管理へ移動する。左サイドバーの [アプリ] をクリックする。


アプリの権限をクリックする。


アプリの表示名に「Power BI」もしくは「Microsoft Power BI Reporting and Analytics」が無い、もしくは、「00000009-0000-0000-c000-000000000000」を含んだアプリIDが無いことを確認する。


なお、登録されているアプリはそれぞれのテナント環境で違うので上記図と同じにならない場合もあることを留意されたい。

2) サイト コレクションレベルでの確認とアプリの登録

登録は管理センターからはできず、サイト コレクションから行う。どのサイト コレクションから登録しても結果としてテナント レベルの登録になるが、一応、Excel Online で使いたいブックを含んだサイトから登録する。

[追記] テナントレベルの登録になるのは、後述する XML によるアプリの権限要求でテナントレベルを指定したためだった。
参考: http://msdn.microsoft.com/ja-jp/library/office/fp142383(v=office.15).aspx
追記したアプリの権限要求 XML で登録作業をしたサイト コレクションのみ有効にすることが可能。
[追記終わり]


SharePoint サイトに移動して右上の「歯車アイコン」から「サイトの設定」を選択する。


[サイト コレクションの管理] の [サイト コレクションのアプリの権限] をクリックする。
サブサイトのサイトの設定画面を開いている場合は [トップ レベルのサイト設定に移動] をクリックして、[サイト コレクションのアプリの権限] をクリックすること。


Microsoft Power BI Reporting and Analytics が無いことを確認する。



次はアプリの登録とアクセス権の設定をするのだが、これまで行ってきたメニューからの操作が現状ではできない。登録画面の URL を直接入力することになる。

現在、[サイトの設定 > サイト コレクションのアプリの権限] の画面を開いている。その URL は以下のようなものだ。/_layouts/ より前の部分はそれぞれの環境で違うが、/layouts/ 以降は同じだ。

https://hogehoge.sharepoint.com/sites/hoge/_layouts/15/start.aspx#/_layouts/15/appprincipals.aspx

この appprincipals.aspxappinv.aspx に変更して Enter キーを押す。

すると以下の画面が表示される。


アプリID: に 00000009-0000-0000-c000-000000000000 を入力し、[参照] ボタンをクリックする。
タイトルに [Power BI](違う場合もある)、アプリ ドメインに [analysis.windows.net] が表示される。タイトルはテナントの SharePoint Online のリリースによって違う場合があることを確認している。

アプリの権限要求 XML に以下の XML をコピーして貼り付け、[作成] ボタンをクリックする。

<AppPermissionRequests><AppPermissionRequest Scope = "http://sharepoint/projectserver/reporting" Right="Read"></AppPermissionRequest><AppPermissionRequest Scope = "http://sharepoint/content/tenant" Right="FullControl"></AppPermissionRequest></AppPermissionRequests>

[追記] http://msdn.microsoft.com/ja-jp/library/office/fp142383(v=office.15).aspx を参考にして、必要ない projectserver の AppPermissionRequest Scope を除き、サイト コレクションでの権限にしたものが以下になる。

<AppPermissionRequests>
  <AppPermissionRequest Scope = "http://sharepoint/content/sitecollection" Right="FullControl"></AppPermissionRequest>
</AppPermissionRequests>

この XML で Excel Online のデータ接続更新が可能を確認している。
[追記終わり]


タイトル名のアプリを信頼しますか?という確認画面がでるので、[信頼する] ボタンをクリックする。



サイトの設定画面にもどるので再度[サイト コレクションのアプリの権限]を開いて登録されていることを確認する。繰り返しになるが、アプリのタイトルはテナントのリリースによって違うことが確認されている。重要なのはアプリIDであることに留意されたい。


この状態で、(追記: アプリ権限要求の XML で Scope をテナント指定していれば)再度テナントレベルを確認すると以下のようにアプリが登録されていることがわかる。


なお、上記の操作でアプリのタイトルが「Power BI」になっているが、この操作をしたテナントでは Power BI for Office 365 のサブスクリプションは購入していない。

もし Power BI for Office 365 をすでに購入していた場合は、テナントレベルでのアプリの権限で「Power BI」というアプリの表示名が表示されるが、そのアプリ ID は 00000009-0000-0000-c000-000000000000 ではない。これで判別ができるだろう。

3) Excel Online でデータ接続更新の確認

Office データ接続 OData データ フィードによるデータ接続を使ったブックをアップロードし、レポートのアプリ ID を登録してアクセス権を付与した状態で、はじめて Excel Online 上でのデータ接続更新が可能になる。実際に試してみよう。

以下は、上述でアニメーションGIFで失敗例としてあげた使ったブックと同じものである。
上記手順でアプリの登録と権限付与を行い、データ ソースである SharePoint リストでアイテムを追加登録した状態で Excel Online でデータの更新をした。


Excel Web Access Web パーツをサイトに貼り付け、データ更新を実行したのが以下だ。



いつものお約束 - 注意点

実務で実際にこの機能を運用すると、以下の事にすぐ気づくはずだ。

1) データ更新しても、その状態でブックは保存されていない

よって、次に開いたときやブラウザを F5 でリロードすると「元のデータ」に戻る。

これは、通常のローカル PC の Excel のピボットテーブルを考えてもらえれば想像に難くない。データ更新しても、ブックを保存しないで Excel を終了させているようなものだ。

ただ、この設定をすることで、[Excel Online で編集] においてもデータ接続の更新が可能になるので、編集モードにしてデータ接続の更新をすれば「保存」したことになり、データも最新になった状態になる。

結局、参照のみの Excel Online でのデータ更新や、Excel Web Access Web パーツでのデータ更新より、Excel Online の編集モードでデータ更新、そして保存、という運用になってしまう。PC の Excel で更新、アップロード、という手間がなくなった、ということだ。

2) データ接続の自動更新はできない

データ接続のプロパティで自動更新のオプションがあることを知っている人も多いだろう。


これは使えない。設定してもなんの変化もない。
理由は、データ モデルが更新されていないためである。データ モデルはピボットキャッシュのようなものだと考えれば理解できる人もいるだろう。実データはデータ モデルを介してサーバー側からとりこむため、データ モデルを更新しないかぎり、ピボットテーブル レポートのデータは更新されない。そして、データ モデルの接続プロパティの [定期的に更新する] オプションはグレイアウトされて設定不可能になっている。


3) Office データ接続のみ有効で PowerQuery によるデータ接続の更新はできない

PowerQuery のデータ モデルを使った接続 (モデル OLE DB クエリ)であっても、上記のアプリ ID とアプリ権限設定後、Excel Online や Excel Web Access Web パーツ内でのデータ更新はできない。

以下のメッセージが表示されエラーになる。

外部データの更新が失敗しました
ブック内のデータ モデルを処理しているときにエラーが発生しました。もう一度やり直してください。
このブックに指定されている 1 つ以上のデータ接続を更新できません。
以下の接続を更新できませんでいた:
Power Query - List01
接続: Power Query - List01
エラー: OnPremise エラー:問題が発生しました。もう一度やり直してください。
テーブル "List01" の処理中にエラーが発生しました。
トランザクションの別の操作が失敗したため、現在の操作は取り消されました。


もう一度やりなおして、、、とあるが、何度やり直してもデータの更新はできない。
Power Query によるモデル OLE DB クエリ / OData フィードは Power BI for Office 365 の Power BI サイトで使用する。

現状、複数あるデータ接続が、使用する機能別に用意されているため難解になっていることは否めないが、ここは過去の資産の蓄積と将来のために追加された新機能として理解するしかないかもしれない。

まとめ

Office 365 SharePoint リストと Excel 連携を最大限に活用するならば、SharePoint のリスト タブにある「Excel へエクスポート」(SharePoint リスト接続)を使わず、Excel のデータ タブにある「OData データ フィード」(Office データ接続)を使ったほうが便利になりそうなことは理解できたと思う。

しかし、ものすごく便利になるか、といえば微妙であるのは否めない。
ローカル PC の Excel で集計・分析し、それを SharePoint にアップロード、アップロードした時点での情報を Excel Online/Excel Web Access Web パーツで表示、という運用で多くはカバーできるのも事実である。

Office データ接続の OData データ フィードで、Excel Online / Excel Web Access Web パーツのデータ更新が可能になるメリットを享受できるが、たぶん、実務でこの機能を求めるのであれば「自動更新」というニーズがあるはずだ。
残念ながら、Excel Online と OData データ フィードだけでは自動更新のニーズを満たすことはできない。

この自動更新のニーズを満たすのが Power BI だと考えている。

事実、Power BI には以下の設定オプションがある。


残念ながら PowerBI はサブスクリプション購入したばかりで実務運用のレベルまで使っておらず、かつ、その設定も確実に理解していないため、これ以上の紹介はできないが、近いうちに紹介することができるだろう。

非常に長いエントリーになってしまったが、マイクロソフトによる日本語ドキュメントがまだ整備されていないようなので、何等かの参考になれば幸いである。

2014/12/16

入力としての Excel アンケート

Excel ユーザーが「入力・計算・出力」の考え方で Excel や Office 365 のサービス/仕組みを適所適材で使うことが Office 365 の活用の早道である。

Excel Services が出力Office 365 SharePoint リストが入力で活用できることはすでに述べたが、もうひとつ Excel ユーザーとしてぜひ知っておきたいクラウド機能がある。

それが、Excel アンケート機能だ。

Excel アンケートとは

実は Excel アンケート機能は Office 365 だけの機能ではない。マイクロソフトがコンシューマー向けに提供している OneDrive でも Excel アンケートを利用できる。

OneDrive の Excel アンケート

企業向けの Office 365 OneDrive for Business さらには外部共有を許可した SharePoint Online のドキュメント ライブラリーでも Excel アンケートを作成することができる。外部共有を許可していないサイト コレクションのドキュメント ライブラリーでは作成からメニュー表示されないので注意していただきたい。

SharePoint ドキュメント ライブラリーの Excel アンケート

この Excel アンケートは、アンケートをお願いしたいユーザーに Excel を送るようなものではない。
アンケートを作成すると、そのアンケートは Web ページとなる。Excel アンケートの URL を受け取ったユーザーが Web を通してアンケートに答えると、その結果が OneDrive や SharePoint ドキュメント ライブラリーの Excel に入力される、というものだ。

アンケートを作成するのはいたって簡単だ。Web ページを作るといった感覚は全くない。

アンケートを作成する

OneDrive でも SharePoint Online ドキュメント ライブラリーでも Excel アンケートの作成方法は一緒だ。Excel アンケートを選ぶと「アンケートの編集」画面が表示される。「タイトル」や「説明」の入力欄がある。


さらに質問項目のエリアをクリックすると質問設定入力のエリアが表示される。


回答のタイプとして7種類用意されている。「段落の内容」はわかりづらい表現だが、「テキスト」が一行テキストであり、「段落の内容」は複数行テキストボックスである。

数値タイプでは書式が選択可能だ。「通貨」は自動的に日本の場合は円(\)が設定される。

選択肢タイプでは選択項目を入力・設定することが可能だ。

こうやってアンケートを完成させると、質問が列名の Excel ワークシートができあがる。


アンケートを共有する

作成されたワークシートのリボンのテーブルのセクションに「アンケート」がある。▼ を押して「アンケートの共有」を選択する。

アンケートの共有ダイアログに URL が表示される。これをコピーしてアンケート対象者に送る。SharePoint Online の場合は、URL がかなり長いので URL 短縮サービスを使うことをお勧めする。コンシューマー向けの OneDrive には共有リンク作成の際に URL 短縮機能がついている。


URL を開くと以下のような Web ページが表示される。


このアンケートの各質問項目に答えて [送信] をユーザーが押すと、その内容が Excel に反映されるのだ。

一度作ったアンケートの修正も可能だ。また、アンケートの URL を無効にすることもできる。

注意点はまだ微妙な実装があるところだろう。致命的ではないが、たとえば、[Yes/No] はアンケートでは [はい/いいえ] になるが、入力される値は既定値のままだと英語で、ドロップダウンリストから選択すると日本語になったり(この対応は選択肢タイプで「はい/いいえ」を作ればよい)、数値で書式をパーセンテージにして 10 と入れると 1000% になる。 0.1 といれれば 10% といったものだ。日付の入力などはYYYY/MM/DD を入力させるよりは日付ピッカーが欲しいところだ。このあたりは実際に試して確認することをお勧めする。

ピボットテーブルで計算、Excel Services で出力

このアンケート機能によって入力部分におけるメリットはすぐに理解できるだろう。アンケート結果は自動的に Excel に入力されるが、本質は「集計」である。この集計をピボットテーブルで行うことを前提として質問項目を設定するのがポイントだ。(フリーでなるべく入力させずに、選択肢から選択させることでデータを集計しやすくする、など)もちろん、アンケート結果は「テーブル」形式であり、ピボットテーブルは元データの範囲を指定しなおすことなくデータの増減に対応する。さらにピボットテーブルからグラフを作成し、ダッシュボード的なシートを作って Excel Services で表示することで、即時に結果を確認することが可能になる。(ただし、現状(2014/12)確認している限りでは Excel Services からのピボットデータ更新は不安定なときがある。(更新されない)ローカルの Excel で開いてピボットの更新、保存で対応する必要がある。)

まだ安定しているとは言えないが、今後のクラウドにおける Excel の方向性と可能性を感じることができるサービスであることは間違いない。コンシューマー向けの OneDrive でも利用可能なので、是非体験してほしい。

残念ながらできないこと

Excel アンケートは匿名アクセスを許可しているようなものなので「だれが」入力したかをシステム的に知ることはできない。そのため名前や ID などをアンケートの質問項目として自己入力してもらう必要がある。

さらに、「いつ入力したか」を知る術も現在のところない。Excel には TODAY() や NOW() などの関数があるが、アンケートからは関数を既定値として入力することができず、また、Excel ユーザーであれば気づくと思うが、この関数を使ってしまうと「常に再計算」される可能性があり、入力時点の日付や時間ではないことに気が付くだろう。

これらを解決したいのであれば、SharePoint の外部ユーザー招待を使って SharePoint リストでアンケートを実施するしかない。しかし、そうなると匿名アクセスはできず(だれが、を知るには当たり前だが)、必ずマイクロソフト アカウントもしくは Office 365 の組織アカウントでサインインしてもらう必要が出てくる。Office 365 ユーザー同志であれば問題ないが、一般ユーザーがアカウントの使い分けを熟知しているケースは少ないため、実際問題としては広く活用することはないだろう。

[参照] SharePoint Online 環境の外部共有を管理する
https://support.office.com/ja-jp/article/SharePoint-Online-%E7%92%B0%E5%A2%83%E3%81%AE%E5%A4%96%E9%83%A8%E5%85%B1%E6%9C%89%E3%82%92%E7%AE%A1%E7%90%86%E3%81%99%E3%82%8B-c8a462eb-0723-4b0b-8d0a-70feafe4be85
Powered by Blogger.

自己紹介

自分の写真
1989年新卒で日本IBMに入社しダウンサイジング担当としてホストコンピュータと繋げるオフコン、UNIX、PCサーバーのプロジェクトを担当。1997年 MSKK(現日本マイクロソフト)入社、NT4出荷に伴い企業向けサポート部門のビジネスマネージャーとして Excel 使いとなり、2002年 にMSMVPなどをサポートするユーザーコミュ二ティ部門を設立、部門をリード。2006年にMSKK退職後、企業向けのITトレーニング会社・団体に携わり、2014年頃よりPowerBI勉強会主催メンバーの一人として参画、そのコミュニティ活動で MSMVP for Data Platform PowerBI 2017受賞。https://mvp.microsoft.com/ja-jp/PublicProfile/5002635 同年にMVP Awardを返上し、アマゾン ウェブ サービス ジャパンに入社、コミュニティプログラム担当として現在に至る。