しばらく山とランは遠のいています

仕事、そしてコロナの関係でしばらく山やランからは遠ざかっています。来年の春から復帰できるようそろそろ運動再開していきたいと思います。ちなみに今、BIツールのPower BIが半分趣味になって、完全な運動不足になっています。20201020

2022年3月31日木曜日

新しいコーヒー豆、エチオピアの豆

新しいコーヒー豆仕入れました。
エチオピアのイルガチェフェ豆(モカ)です。

ケニアのマサイ豆に加えてこの二つの豆が気に入ったので1KG購入しました。
コーヒーはテレワークの友です。


2022年3月30日水曜日

【Power BI】BRAVOというPower BI Desktop用のプラグインツールがとっても便利

QiitaでSutoさんが紹介していたこのBravoというツールがとても便利です。
https://qiita.com/hanaseleb/items/d32f535ff112cf457bba?fbclid=IwAR06VwCPzdWPvyc3jpH7TKBZO7qipbT5N0VUxAX-GsZLCFHDwpQXo5EqHqs

BRABOダウンロードサイト  https://bravo.bi/

わたしが便利さを感じる場面は、大きなCSVをエクスポートしたい場合です。Power BIやExcel上でのデータセットからのエクスポートはサイズに限界があるので、このツールは役立ちします。実際に1000万以上のデータで試しましたがダウンロードできました。

DAXのコードを整形してくれる機能があるのですが、これは二度目にエラーが出ました。まだプレビューバージョンなので、これもご愛敬かな。

2022年3月29日火曜日

大阪のコロナ重傷者、未だに断トツ、びっくり

大阪のコロナ、以前からひどくてボロカス言われてますが、
まん延防止の解除された今でもにコロナの重傷者数の多さにびっくり、他県より一桁多いのです。大阪はまるだ別の国のようです。これって某政党が仕切ってきた大阪の保健衛生政策の結果なんでしょうね、きっと。

2022年3月28日月曜日

3月のレスパイト、いつもの病院ではやはり無し

 3月は別の公的施設で一度だけレスパイトが実現しましたが、いつもの病院はやはり無し。通院だけとなりました。コロナは母親に少しも休みを与えません。この状態、やはり長すぎますね。残念ながら桜はまだなので花見に立ち寄ることもなく。


2022年3月26日土曜日

さすがに今年の丹後は無理かな

 丹後ウルトラの案内のはがきが来ました。ここの案内の写真はとても綺麗で、また出たいとは思うのですが、この体と体力であの100kmをとても走れるように思えません。でも締め切りまでまだかなり期間があるので、頑張ってみようかな。


2022年3月25日金曜日

【出張ラン】千葉駅周辺散策ランしました

 千葉駅の近くで泊まったので、今朝は時間がないけど少しだけ駅周辺を散策ラン。残念ながら今回はランコースを見つけることはできませんでした。次回は海の方に向かって走ってみよう


2022年3月24日木曜日

今週は千葉に来ました

寒いのか温かいのかわけのわからん天気ですね。

今週は千葉にいます。江戸川河川敷ってなかなかいいですね。残念ながらここで宿泊はしないので走ることはできませんが。


千葉駅近くのコンビニ行ったら、さすが千葉だな、落花生が袋入りで売っていました。でもよく見ると中国産、なあんだ。


2022年3月23日水曜日

エンドウの実

 3月も後半なのに、寒い日が多いですね。
でもエンドウがたくさん生りだしました。今年の春も豆づくしです。

不思議なんですが、豆は鳥が食べに来ないのですね。もうこの時期は他に餌もいっぱいあるかでしょうか。


2022年3月22日火曜日

【Power BI】円グラフ等で、「その他」を表示させる方法

 現在のPower BIでは残念ながら、上位Nのアイテムをグラフに表示させるフィルターは存在していますが、下位のアイテムをその他にまとめて表示する機能はありません。円グラフ等の割合を示すグラフではしばしばこのその他を表示させたくなります。


円グラフなどのビジュアルパーツにはその機能がないのですが、それを乗り越える方法があることを教えてもらいました。とっても面倒で、かなりの時間がかかりますが、どうしても必要な時は、以下の手順で円グラフにその他を表示させることが出来ます。一日もはやく、割合を示す円グラフや積み上げのグラフはこの機能を標準的に備えてほしいです。

0)「その他」を表示しないもともとある数値計算メジャー
_CiteScore平均_重複排除 = AVERAGEX(ALLSELECTED('MFRD_Article'[RDID-U]),[_CiteScore_重複排除])

1)「その他」を表示するためのテーブルを作成する
作成するテーブルは「その他」を加えるために新たに作成するものです。
元々あるテーブルとリレーションを張ります。その方向は単方向にして余分なフィルタがかかり、「その他」が消えないようにする。
CiteScoreMetrix_ASJCコード_親_その他表示用 = 
 UNION ( ALLNOBLANKROW ('CiteScoreMetrix_ASJCコード_親'[Description]),  { "その他" })

2)TopNの指定をするテーブルを作成する
追加するテーブルは、特別に他のテーブルとリレーション関係を持たせないようにする。複数のグラフで共通で利用することも可能。
その他表示用TopN = GENERATESERIES(2, 50, 1) 

さらに以下のメージャーをスライサ選択用に作成します。
_TopN値 = SELECTEDVALUE('その他表示用TopN'[TopN], 10)

3)「その他」がない場合のアイテム順位を設定するメジャーを作成する
_CiteScore平均順位_重複排除 = RANKX(ALLSELECTED('CiteScoreMetrix_ASJCコード_親'[Description]),[_CiteScore平均_重複排除],,,Skip)

4)「その他」がある場合のアイテム順位を設定するメジャーを作成する
_CiteScore平均順位_重複排除_その他表示 = 
    var VAL1=CALCULATE([_CiteScore平均_重複排除],ALLSELECTED('MFRD_Article'[RDID-U]))
    var VAL_RankOthers=
     RANKX(ALLSELECTED('CiteScoreMetrix_ASJCコード_親_その他表示用'[Description]),
                CALCULATE([_CiteScore平均_重複排除],ALLSELECTED('MFRD_Article'[RDID-U])),,,Skip)
    return
         IF(ISINSCOPE('CiteScoreMetrix_ASJCコード_親_その他表示用'[Description]),
         IF(SELECTEDVALUE('CiteScoreMetrix_ASJCコード_親_その他表示用'[Description])="その他",
                        'その他表示用TopN'[_TopN値]+1,
                         IF(VAL1>0,
                            IF(VAL_RankOthers>'その他表示用TopN'[_TopN値],
                                'その他表示用TopN'[_TopN値]+1,VAL_RankOthers)
                         ,BLANK())),
                         VAL1)

5)その他を表示する数値計算を行う
_CiteScore平均_重複排除_その他表示 = 
    var VAL_NoOthers=AVERAGEX(ALLSELECTED('MFRD_Article'[RDID-U]),[_CiteScore_重複排除])               return
        IF(ISINSCOPE('CiteScoreMetrix_ASJCコード_親_その他表示用'[Description]),
            var VAL1=IF([_CiteScore平均順位_重複排除_その他表示]>'その他表示用TopN'[_TopN値],
                           BLANK(),[_CiteScore平均_重複排除])
            var Table_Temp=ADDCOLUMNS(
                           ALLSELECTED('CiteScoreMetrix_ASJCコード_親_その他表示用'),
                                                 "Temp_VAL",
                                                  [_CiteScore平均_重複排除])
            var VAL_TopNTotal=SUMX(TOPN('その他表示用TopN'[_TopN値],  Table_Temp,[Temp_VAL]),                                                              [Temp_VAL])
            var VAL_ALLTotal=SUMX(Table_Temp,[Temp_VAL])
            return
                IF(SELECTEDVALUE('CiteScoreMetrix_ASJCコード_親_その他表示用'[Description])="その他",
                      VAL_ALLTotal-VAL_TopNTotal , VAL1)
         ,VAL_NoOthers)

2022年3月21日月曜日

長野マラソン、今年は開催しそうですね

長野マラソンの参加者案内が送られてきました。

今回は開催しそうですね。残念ながらわたしは完走できる体力はまったくないですが。
健康チェックがコロナの中の大会を物語っています。


2022年3月20日日曜日

2年ぶりにふるさとの同級生と飲み会 貴重なレコードをもらいました

土曜日は、朝10時に同級生と集合して、そのまますっかり夜まで飲み会でした。最後はお世話になった同級の奥さんに追い出されました。

同級生から、レコードもらいました。このレコード、まず中古レコード屋では見かけない、貴重なレコードです。中古レコード屋の人と話していたら、数年前までは300円でも売れなかったのにレコードブームの今は高額取引だとか。感謝です。今年は祭り開催できませんでしたが、来年はちゃんと開催されることを願い、地元愛知県半田市の乙川駅から神戸まで帰りました。



2022年3月19日土曜日

名古屋で朝ラン

昨日、東京からの帰りは名古屋で途中下車、本日はふるさとの半田で飲み会なんです。
今朝はちょっとだけ、名古屋を朝ラン。庄内川を走る時間はなかったので、街中を散策しながら走ったのですが、兜や鯉のぼりのお店を見つけました、名古屋らしいね。最近はこういうお店はほんと見かけなくなりました。でもわたしの住んでるところは、ちょっと遠出すると鯉のぼりいっぱい上がっていますけどね。


 

2022年3月18日金曜日

東京の帰りはエスニック

東京に来ると、やはり〆はエスニック。 東京はいろいろなエスニック料理店があるから、わたしみたいなエスニック好きは結構楽しめます。 パッタイ食べて帰ります。

 

2022年3月17日木曜日

久しぶりに新幹線に乗ります

やっと、新幹線乗れました。
以前のコロナ明けの新幹線と違って結構混雑していますね。
今回は無理やり営業入れて東京に行きます。ほんと不安なんです。

 

2022年3月15日火曜日

買っちゃいました、車のハンドルにつけるテーブル

 前から欲しかった、ハンドルにつけるテーブル、ついに買いました。

これ、わた市は娘の通院に使います。最近は病院の待合室で待っているのは気持ち悪いので駐車場の車の中で過ごすことが多く、いつもPC開きながら不自由していました。

はやく車でいろいろところに営業したいですけどね。


2022年3月14日月曜日

神戸の春、いかなごはまだ手に入りました

神戸の春はいかなごのくぎ煮、大阪湾は早々に終わってしましたが、3月14日現在、スーパーに出ていました。思わず購入。これは播磨灘の漁が続いているからですが、持ち帰ると、これでおしまいだからねときつく言われました。ずいぶん安くなりました。朝食のごはんにいかなごのくぎ煮、ほんと美味しいです。


2022年3月13日日曜日

鳥は豆の葉が好きですね、

 エンドウの収穫時期になりましたが、今年も結構鳥に葉が食べられました。
豆が攻撃されている形跡はないのですが、葉は結構ボロボロ。

これって空中でホバリングしながら食べているのでしょうか、つかまるにはあまりに不安定のように思うのですが。まだ、エンドウの葉を食べている鳥の姿に遭遇はしていません。


2022年3月12日土曜日

【Power BI】テーマ設定、デザインの統一

 Power BIを実際に仕事に使っていくと、どうしてもたくさんのグラフの設定をしなければならないケースが出てきます。これ気まぐれで設定していくとフォントサイズなどばらばらになってしまい、最後に再度設定しなおすなど、このビジュアルの設定を操作している時間がかなりかかります。そこで活躍するのが、Power Pointにもあるテーマ設定機能です。設定の各種デフォルト値の設定、カラーパレット、背景の設定などができます。

ただ、まだたいへんですね、画面からデフォルト値を設定できるのはごくわずかです。PowerPointのように自分で設定したないようを既定値に登録するような機能はまだなく、コツコツでJSON形式の設定ファイルを作っていくことになります。でも一度作ってしまえば、しばらくは使えると思うので、デザインの統一、作業の効率化に貢献すると思います。

2022年3月11日金曜日

【Power BI】日本人が好きなレーダーチャート

 日本人は、このレーダーチャートが好きですね。
で、Power BIにもこのレーダーチャートが存在しますが、機能がとってもプアーなんです。だからまともに仕事で使おうとするといくつも課題があり、時間もかかります。

大きな課題として、
①各軸のスケールを固定にできません。わたしの場合は、最大値あるいは平均値の割合を計算して使っています。とっても面倒です。

②値がないと軸が消えます。下記の図では7軸ですが、この軸を固定にできず、値がないと消えてします。nullだと消えるので、ゼロをデータの中に必ずいれればいいのですが、これがなかなかの手間がかかります。

最近、このレーダーチャートをどうしてもしたいと言われるユーザが現れたので、再度いろいろ試してみました。それで、以下の図の灰色の7角形の図を見てください。これは基準値で、基準値を持つ(平均値とか最大値)をテーブルを作って本来のテーブルとリレーションを張ります。これを表示しておけば、軸もなくならず、基準値とも比較できます。

いずれ時間ができたら、このレーダーチャートのビジュアルはオープンソースなので改造してやろうと思っています。軸のスケールを固定にする機能は絶対にほしいです。

なおレーダチャートは数値軸が多いため、普通の棒グラフのような短時間では作れません。軸の数分、棒グラフのビジュアルを設定する以上に時間かかると思います。ここはこのグラフを要望される方によく説明した方がいいです。


2022年3月10日木曜日

【Power BI】ソースデータの更新日を取得する方法

 Power BIは、一度レポートを作ってしまえば、あとはソースデータを何度でも更新できのがとても便利です。ただ、このデータ更新日をデータとして取り込む機能が現在はありません。そのため、以下のようなクエリをちょこんと追加しておくという方法がよく使われます。Power BIでデータを更新するとクエリが一斉に動くので、その時間を記録してデータとして保存するしくみです。


このコードはよく注意して記述ください
時間を取得する相手がPower BIデスクトップの場合は、自分のPCですが、Power BI サービスにアップロードするとそのサーバから時間を取得します。この時間はUTCとなります。上記コードでは、PBIデスクトップでもPower BIサービスでも日本時間を表示するように、時間取得を必ずUTCで取得できる関数にして、日本時間に変換しています。

まあ、いずれにしてもデータ更新時間はこんな細工しなくても自動的に取得して記録に残す機能を備えてほしいですね。

2022年3月9日水曜日

【Power BI】レポートの目次及びリンクが簡単に作れます

これ便利です。
こんなの前からあったでしょうか。

Power BIでレポートを作っているとどんどんページが増えてきます。その目次とリンクを作りたくなります。以前はコツコツと作るしかなかったのですが、今はボタンメニューから簡単に作れます。あとはデザインだけです。


2022年3月8日火曜日

神戸の春、いかなご

神戸の春は、いかなごのくぎ煮
ここ数年、不漁で高値です。
今年も高いですねえ。でも買いました。

でも、夕方にまたこのスーパーに来たら半額だったんですよねえ。


 

2022年3月7日月曜日

3月、本日はたった一泊のレスパイトが実現しました

たった一泊ですが、今月はレスパイトが実現できました。ほんと久しぶりです。娘を神戸のしあわせの村に連れてきました。外で検査、その結果が出るまで待たされます。


 

2022年3月6日日曜日

生豆を焙煎してコーヒをいれると膨らみます

コーヒー生豆から焙煎してコーヒーをいれるのに最近こっています。
最近知ったのですが、焙煎したての生きのいい豆はお湯を注ぐとお餅のようにふくれます。
これ不思議だったのですが、「珈琲いかがでしょう」というドラマで知りました。
このドラマよかったですね。



 

2022年3月5日土曜日

【Power BI】レポートビューでフィールドをフォルダで整理する

 いつのまにか、クエリのフィールドをフォルダで整理する機能が追加されていました。
これ便利です。ただ、まだ発展途上なのか、モデルビューでしかフォルダ管理ができません。
フィールドが膨大になってくるととっても便利なんです。




2022年3月4日金曜日

【Power BI】順位を計算するときのコツRANKX

計算結果の順位を求める場合、RANKX()という関数を使ってメジャーを書きますが、これ結構難しいです。たぶん最初は、全部1位になってしまう経験をした人が多いです。

RANKX(<table>, <expression>[, <value>[, <order>[, <ties>]]])
https://docs.microsoft.com/ja-jp/dax/rankx-function-dax

順位 = RANKX(
            ALLSELECTED(①コンテキストフィルタを外したい列名を指定),
            DISTINCTCOUNT(②集計対象列),,Asc,Skip)

順位を計算するテーブルを関数の中に設定しますが、このテーブルは、コンテキストフィルターが効かないようにALL系のフィルタ関数を設定する必要があります。メジャーはコンテキストのテーブルの中で行ごとに(コンテキストフィルタ)計算されるもので、この際に順位を出す対象が1行ではなく、テーブル全体の行の中での順位を計算できるようにALL系のフィルター関数でコンテキストフィルタをクリアします。

これを気を付ければ順位が算出されます。

2022年3月3日木曜日

【Power BI】ソースデータのファイルを読み込む必要がないときにエラーが出ないようにする

Power BIで多数のソースデータのファイルをインポートモードで読み込むことでレポートを作っていて、それをデータを変えていろいろなところで使うことはよくあると思います。

その際に、すべてのソースデータをすべてそろえる、手に入らなければダミーファイルを置くなどしないといけなく、とても煩わしいです。

最近わたしは以下のようなコードをクエリの先頭に記載します。_Loding_from_researchmapはファイルを読み込むか読み込まないかを設定するパラメータです。

let
   ソース = if _Loding_from_researchmap="OFF"
  then
   #table({"search_key","doi","issn","cinii_na_id","rm:research_project_id",},{})
  else 
   ソース=「ソースデータを読み込むための処理」
in ソース

ソースデータのファイルを読み込みたくないときは、エラーが出ないように空テーブルを設定します。ここで空テーブルに設定する列は、以降の処理でエラーが出ないようにするのと、設定したリレーション設定が消えないように設定します。時々リレーションが消えてしまい、計算がおかしくなっていることがあるので注意が必要です。


2022年3月2日水曜日

Power BIが重くなった時のBufferの使い方

 Power BIを使い込んでくると必ずといっていいほど、速度問題にぶち当たります。

グラフの表示などレポート表示側の速度問題は、1ページあたりのビジュアル数を制限することに尽きるのですが、ソースデータの更新に時間がかかり出すと、このPower Query側の問題はなかなか解決できず困っている人が多いと思います。インポートモードからDirect Queryモードにするのはなかなかなハードルが高いですし、わたしもずっと苦労しています。

わたしは、まず、EXCELやJSON,XMLなど構造を持ったデータをソースデータにするのを諦めてCSVにすることだと思っています。使っていてこれらのタイプは便利なのですが、実感としてCSVとはかなり速度差があるように思います。

次にソースデータを読み込むときの様子を観察していると、同じソースが何度も読み込まれていることに気が付きます。この回数を減らさないといけません。これはPower Queryの特長で、分析に利用するデータセットに必要なクエリは毎回すべて動きます。またそれぞれのクエリは独立に動くので、同じデータセットが何度も読み込まれます。これを解決するのがTable.Buffer()、List.Buffer()、Binary.Buffer()ですが、よく理解して配置しないとほとんど効果がありません。効果を発揮する場所は限定的です。

MSのドキュメントにクエリ参照について説明があり、そこでにBufferについて言及があります。
https://docs.microsoft.com/ja-jp/power-bi/guidance/power-query-referenced-queries

クエリの参照は便利なのでよく使われると思います。ここで上記ドキュメントにある図を利用させていただきます。わたしも勘違いしていましたが、以下のQuery1の最後にTable.Buffer()を配置すると早くなるような気がします。でもこれは効果がないケースがほとんどです。以下の図のように、Power BIは以下のような参照構造のクエリは、結局3のクエリが動いていることになり、Query1のBufferは共有されず、3つ作られます。Bufferは一つのクエリの中でしか効果がなく、クエリ間では共有されません。

で、効果が出るのは、一つのクエリの中で、何度も同じテーブルを参照する(繰り返し処理など)ケースで効果が出ます。インポートモードの場合、Binary.Buffer()で根本をおさえ、あ重い処理で作成したテーブルやリストをクエリ内で何度も参照する場合は、Table.Buffer()、List.Buffer()が有効になります。
要するには一つ一つのクエリの処理が少ないケースではほとんどBufferは効果がないです。

また、クエリ参照でテーブルをいくつも作る場合、DAX側で「新しいテーブル」で作ればデータの再読み込みはないので、処理は速くなると思います。ただし、メモリを結構使うので、あまりたくさんこの方法でテーブルを作るとメモリ不足に陥る可能性もあります。

なお、Power BI デスクトップの設定にキャッシュサイズの設定があります。これはPower Queryエディタのステップ実行の画面のキャッシュで、ソースデータの読み込みの速度改善にはまったく効果はないです。

2022年3月1日火曜日

【Power BI】アイテム列の順位を定義したときに要注意 RANKXでの問題

Power BIは、データ項目ごとに、順番を他の数値列などを利用して定義することが出来ます。ただ、この設定には副作用があることがわかりました。

以下のRANKXで順位を計算したのですが、うまくいきませんでした。
その原因は、、下記の'[種別名]に他の列を利用して順位設定していました。その参照した列が、自動的にコンテキストの中に組み込まれていて、ALLSELECTEDにその参照した列を追加しないと正しい結果が出ないことがわかりました。これ、まさに副作用です。

_順位 = IF(CALCULATE([_度数計算メジャー],ALLSELECTED('TableA'[INDEX]))>0,      RANKX(ALLSELECTED('TableA'[種別名]),
     CALCULATE([_度数計算メジャー],ALLSELECTED('TableA'[INDEX])),,      DESC,Dense),BLANK())  

以下のページに詳しく書いています。要注意です。