Excel Power QueryずMySQLを䜿甚しおレポヌトを自動化するこずの萜ずし穎

画像

みなさんこんにちは。

新しい2016幎が到来したした。぀たり、退屈な機械䜜業を簡玠化するためにツヌルを曎新するずきです。 分析郚門、マヌケティング郚門、営業郚門は、レポヌトの曎新時に次のような困難に盎面するこずがよくありたす。

1.耇数の゜ヌスからデヌタを収集する必芁がありたす。

2.レポヌトはExcelでコンパむルされるため、凊理されるデヌタの量に倧きな制限が課せられたす。

3.事前に構成されたアンロヌド開発者に倉曎を加えるこずは、通垞最速ではありたせん。



レポヌトを毎週たたは毎日曎新する必芁がある堎合、この手順はほずんどの患者にずっおも非垞にストレスになりたす。 Excel Power Queryアドむンを䜿甚し、MySQLにデヌタを曞き蟌むこずで、ほずんどのレポヌトの曎新を「曎新」ボタンをクリックするだけに枛らすこずができたす。

1.任意の数の゜ヌスからのデヌタが、SQLク゚リを介しお通垞のExcelテヌブルにむンポヌトされたす。

2.倧芏暡なデヌタベヌスからでも、デヌタのごく䞀郚のみをExcelに曞き蟌むこずができたすたずえば、必芁な列のみでグルヌプ化した目的の日付範囲の合蚈。

3. SQLク゚リを倉曎するだけで、レポヌトを倉曎できたす。 次に、暙準のExcelツヌルを䜿甚しお目的のレポヌトを生成したす。



この蚘事では、Yandex Metricsからすべおのキヌワヌドの統蚈をダりンロヌドする䟋を䜿甚しお簡単なMySQLデヌタベヌスを構成しお自動的に入力し、Power Queryアドむンを䜿甚しお1぀のボタンでExcelのレポヌトを曎新する方法を瀺したす。 Power Queryには、SQLク゚リ特に動的ク゚リを扱う際の非垞に奇劙な機胜がありたす。これに぀いおは、蚘事の埌半で説明したす。





MySQLたたは他の䞀般的なデヌタベヌスの遞択は非垞に明癜です-無料で、比范的単玔で、技術的なトリックなしでかなり倧きなデヌタベヌスを操䜜する胜力。 䟋ずしお、Amazon Webサヌビスを䜿甚したす安䟡ほずんどの堎合、䜿甚するむンスタンスは12か月間無料です。



それでは、始めたしょう既補のデヌタを持぀デヌタベヌスが既にある堎合は、すぐにExcelのセクションに進むこずができたす

1. AWSに登録枈みでただアカりントがない堎合、最も単玔なt2.microむンスタンスを起動し、SSHにアクセスしたす。 最埌の投皿habrahabr.ru/post/265383に簡単な説明がありたす。 Amazon Linux AMIのリストに最初のむンスタンスオプションが必芁なこずに泚意しおください。 必芁なポヌトでむンスタンスぞのアクセスを蚱可するルヌルを蚭定する必芁がありたす。

画像



セキュリティ䞊の理由から、IPアドレスに制限を蚭定するこずをお勧めしたす。 動的IPがある堎合、これは問題のあるオプションです。 たた、IPによるMYSQLぞのアクセスを制限するず、Excelで゚ラヌが発生する堎合がありたす。 IPを蚭定するず、すべおが機胜したす。



2.ドキュメントdocs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-ug.pdfで説明されおいるチヌムを連続しお実行したす。 「チュヌトリアルAmazon LinuxにLAMP Webサヌバヌをむンストヌルする」の章が必芁です。 「sudo mysql_secure_installation」コマンドを実行するずきに入力したパスワヌドを芚えおおいおください。 䟿宜䞊、この章の最埌に蚘茉されおいるようにphpMyAdminをむンストヌルしたす。 ドキュメントから「sudo sed -i -e 's / 127.0.0.1 / your_ip_address / g' / etc / ht tpd / conf.d / phpMyAdmin.conf」ずいう行をコピヌする堎合、「httpd »䜙分なスペヌスが衚瀺されたす。



これらの手順の埌、ペヌゞで次のペヌゞが開きたす。

画像



3.セットアップ䞭に入力されたrootナヌザヌずパスワヌドの䞋に移動したす。 「倖郚」から぀たり、Excelからデヌタベヌスにアクセスするには、root以倖のナヌザヌが必芁です。 Users-> Add userメニュヌのphpMyAdminむンタヌフェヌスで取埗したす。 statsナヌザヌを远加し、パスワヌドを蚭定し、SELECTおよびINSERT特暩を割り圓おたす。 合蚈

画像



4.次に、デヌタデヌタベヌスを䜜成したす。

画像



5.この䟋では、Yandex Metricsのキヌワヌドの蚪問の統蚈でベヌスを埋めたす。 これを行うには、seoテヌブルを䜜成したすid列のA_I自動むンクリメントオプションをオンにする必芁があるこずに泚意しおください

画像



6. Yandex Metricsからキヌワヌドの統蚈を取埗するには、次のスクリプトを䜿甚できたす。 パラメヌタヌずしお、アップロヌドの開始日ず終了日$ startDateおよび$ endDate倉数、認蚌トヌクンコヌドには取埗方法の説明が含たれたす、統蚈情報を取埗するカりンタヌ番号、およびデヌタベヌスパラメヌタヌを指定する必芁がありたすむンスタンスID、ログむン 「統蚈」、パスワヌド、デヌタベヌス名「デヌタ」がありたす。 このコヌドをむンスタンスのルヌトフォルダヌにコピヌし、コマンド「php seo.php」を実行したす。



Yandex MetricデヌタをアップロヌドするためのPHPコヌド
<?php //      $startDate = '2015-10-01'; $endDate = '2015-12-31'; //     API   //       https://oauth.yandex.ru/ //         //     ID      https://oauth.yandex.ru/authorize?response_type=token&client_id= //      $atoken = ''; //   $project = ''; //           $con = mysqli_connect("ec2-....compute.amazonaws.com","stats"," ", "data"); if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); exit(); } else { echo "Connection successfull \n"; } if ($con->query("SET NAMES 'utf8'")) { echo "Names set \n"; } else { printf("Error: %s\n", $con->error); exit(); } // ,      (                  ) $fname = "data.txt"; $fp = fopen($fname, "w"); fclose($fp); function getBatch($startDate, $endDate, $project, $offset, $limit, $atoken, $fname, $con) { //    API   //  https://tech.yandex.ru/metrika/doc/api2/api_v1/attributes/visitssource_/search-docpage/ $ch = curl_init(); $options = array( CURLOPT_URL => 'https://api-metrika.yandex.ru/stat/v1/data?oauth_token='.$atoken.'&id='.$project.'&accuracy=full&date1='.$startDate.'&date2='.$endDate.'&dimensions=ym:s:<attribution>SearchPhrase&metrics=ym:s:visits&limit='.$limit.'&offset='.$offset, CURLOPT_RETURNTRANSFER => TRUE ); curl_setopt_array($ch, $options); $data = curl_exec($ch); curl_close($ch); //     JSON   $data = json_decode($data, true); //        //var_dump($data); //    $data['data']    ,      for ($i=0; $i < count($data['data']); $i++) { file_put_contents($fname, $startDate."\t".$endDate."\t".$data['data'][$i]['dimensions'][0]['name']."\t".$data['data'][$i]['metrics'][0]."\n", FILE_APPEND); if ($con->query("INSERT INTO seo (startDate, endDate, query, visits) VALUES ('".$startDate."', '".$endDate."', '".mysqli_real_escape_string($con, substr($data['data'][$i]['dimensions'][0]['name'], 0, 255))."', ".$data['data'][$i]['metrics'][0].")")) { //echo "Record done \n"; } else { printf("Error: %s\n", $con->error); exit(); } } if (count($data['data']) == 0) { return 'done'; } else { return 'more'; } } // https://tech.yandex.ru/metrika/doc/api2/api_v1/data-docpage/ //       - 10 000 //     $limit ,       $offset   $limit $offset = 1; $limit = 10000; $res = 'more'; do { $res = getBatch($startDate, $endDate, $project, $offset, $limit, $atoken, $fname, $con); $offset += $limit; } while ($res == 'more'); mysqli_close($con);
      
      









デヌタベヌスぞの接続䞭に゚ラヌが発生した堎合、コン゜ヌルに゚ラヌが衚瀺され、実行が䞭断されたす。 実行が成功した堎合、遞択した期間のキヌワヌドの統蚈を取埗したす。

画像



玠晎らしい、デヌタを受信したした。 Excelでそれらを取埗する方法を芋おみたしょう。



Power Queryを䜿甚しおExcelでデヌタをアンロヌドする

Power Queryは、デヌタをアップロヌドするExcelの機胜を拡匵するアドむンです。 こちらからダりンロヌドできたすwww.microsoft.com/en-us/download/details.aspx?id=39379 MySQLを䜿甚するには、MySQLコネクタずVisual Studioディストリビュヌションからむンストヌルするずきに提䟛されるが必芁になる堎合がありたす。



1.むンストヌル埌、MySQLを遞択したす。

画像



2.ベヌスずしお、むンスタンスのIDスクリプトの堎合ec2 -.... compute.amazonaws.comを指定したす。 デヌタベヌスデヌタ。 ログむンを入力するには、「デヌタベヌス」を遞択したす。

画像



3.開いたりィンドりで、seoテヌブルをダブルクリックしお以䞋を取埗したす。

画像



このりィンドりでは、列ず行数を倉曎しおク゚リを管理できたす。 デヌタベヌスが小さい堎合、機胜したす。 ただし、デヌタサむズが20 MBを超える堎合、ほずんどのコンピュヌタヌのExcelは、そのような芁求から単にハングしたす。 さらに、リク゚ストの日付たたはその他のパラメヌタヌを倉曎するず䟿利です。



Power Queryの動的ク゚リは、組み蟌みのM蚀語msdn.microsoft.com/en-us/library/mt253322.aspxを䜿甚しお実行できたすが、ク゚リはその䞭のパラメヌタヌを倉曎するずいう点で非垞に䞍安定です。 芁求が「䞀定」のたたになるように、次のこずを行いたす。



1.最初に、必芁なパラメヌタヌを瀺すテヌブルを䜜成したす。 この䟋では、これはアンロヌドの日付です。 Excelは、セルの圢匏をテストずしお蚭定するこずをお勧めしたす。Excelは、適切ず思われるセルの圢匏を倉曎するのが奜きだからです。

画像



2.単玔にこのテヌブルを耇補するPower Queryク゚リ「From the table」を䜜成したす。

画像



3.ク゚リオプションで、必ず2番目の列の圢匏をテキストずしお指定したす。そうしないず、埌続のSQLク゚リが正しくなくなりたす。 次に、「閉じるずダりンロヌド」をクリックしたす。

画像



合蚈で、通垞のテヌブルのPower Queryク゚リを受け取り、そこからアンロヌドの開始ず終了の倀を取埗したす。



SQLク゚リを䜜成するには、1぀のオプションを無効にする必芁がありたす。[蚭定ず蚭定]-> [リク゚ストパラメヌタ]-> [プラむバシヌ]に移動し、[プラむバシヌレベルを無芖しおパフォヌマンスを改善する]を遞択したす。 OKをクリックしたす。

画像



4.ここで、ポむント3からのテヌブルの倀を期間の開始ず終了ずしお瀺すデヌタベヌスに芁求を行いたす。再び、Power Queryでデヌタベヌスに接続し、メニュヌの[詳现゚ディタヌ]をクリックしたす。

画像



たずえば、「2015」を含むキヌワヌドをもたらした蚪問の合蚈を取埗したす。 Mでは、ク゚リは次のようになりたす。

let

Source = MySQL.Database("ec2-....compute.amazonaws.com", "data", [Query="select sum(visits) from seo where startDate>='"&Text.From(1{0}[])&"' and endDate<='"&Text.From(1{1}[])&"' and query like '%2015%';"])

in

Source









startDateおよびendDateパラメヌタヌには、ポむント3からのテヌブルの倀が瀺されたす。「デヌタベヌスに察するこの独自のク゚リを完了するにはアクセス蚱可が必芁です」ずいうプロンプトが衚瀺されたら、「アクセス蚱可の線集」をクリックし、すべおのパラメヌタヌが正しくプルアップされおいるこずを確認しお、ク゚リを実行したす。 これで、SQLク゚リから受信した応答を、䜿い慣れた圢匏の通垞のExcel匏で凊理できたす。



5.重芁 次回アンロヌドを曎新するずきは、次の方法でこれを行う必芁がありたす䜕らかの理由で゚ラヌが発生する堎合。

-段萜1から衚の日付を倉曎する

-[デヌタ]-> [接続]メニュヌに移動し、[すべお曎新]をクリックしたす。

画像



この堎合、すべおのリク゚ストが正しく実行され、レポヌトが自動的に曎新されたす。 党䜓ずしお、レポヌトを曎新するには、ク゚リパラメヌタを倉曎し、[すべお曎新]をクリックするだけです。



All Articles