新しいコーヒー豆仕入れました。
エチオピアのイルガチェフェ豆(モカ)です。
ケニアのマサイ豆に加えてこの二つの豆が気に入ったので1KG購入しました。
コーヒーはテレワークの友です。
QiitaでSutoさんが紹介していたこのBravoというツールがとても便利です。
https://qiita.com/hanaseleb/items/d32f535ff112cf457bba?fbclid=IwAR06VwCPzdWPvyc3jpH7TKBZO7qipbT5N0VUxAX-GsZLCFHDwpQXo5EqHqs
BRABOダウンロードサイト https://bravo.bi/
わたしが便利さを感じる場面は、大きなCSVをエクスポートしたい場合です。Power
BIやExcel上でのデータセットからのエクスポートはサイズに限界があるので、このツールは役立ちします。実際に1000万以上のデータで試しましたがダウンロードできました。
DAXのコードを整形してくれる機能があるのですが、これは二度目にエラーが出ました。まだプレビューバージョンなので、これもご愛敬かな。
大阪のコロナ、以前からひどくてボロカス言われてますが、
まん延防止の解除された今でもにコロナの重傷者数の多さにびっくり、他県より一桁多いのです。大阪はまるだ別の国のようです。これって某政党が仕切ってきた大阪の保健衛生政策の結果なんでしょうね、きっと。
3月は別の公的施設で一度だけレスパイトが実現しましたが、いつもの病院はやはり無し。通院だけとなりました。コロナは母親に少しも休みを与えません。この状態、やはり長すぎますね。残念ながら桜はまだなので花見に立ち寄ることもなく。
丹後ウルトラの案内のはがきが来ました。ここの案内の写真はとても綺麗で、また出たいとは思うのですが、この体と体力であの100kmをとても走れるように思えません。でも締め切りまでまだかなり期間があるので、頑張ってみようかな。
寒いのか温かいのかわけのわからん天気ですね。
今週は千葉にいます。江戸川河川敷ってなかなかいいですね。残念ながらここで宿泊はしないので走ることはできませんが。
千葉駅近くのコンビニ行ったら、さすが千葉だな、落花生が袋入りで売っていました。でもよく見ると中国産、なあんだ。 現在の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)
前から欲しかった、ハンドルにつけるテーブル、ついに買いました。
これ、わた市は娘の通院に使います。最近は病院の待合室で待っているのは気持ち悪いので駐車場の車の中で過ごすことが多く、いつもPC開きながら不自由していました。
神戸の春はいかなごのくぎ煮、大阪湾は早々に終わってしましたが、3月14日現在、スーパーに出ていました。思わず購入。これは播磨灘の漁が続いているからですが、持ち帰ると、これでおしまいだからねときつく言われました。ずいぶん安くなりました。朝食のごはんにいかなごのくぎ煮、ほんと美味しいです。
エンドウの収穫時期になりましたが、今年も結構鳥に葉が食べられました。
豆が攻撃されている形跡はないのですが、葉は結構ボロボロ。
これって空中でホバリングしながら食べているのでしょうか、つかまるにはあまりに不安定のように思うのですが。まだ、エンドウの葉を食べている鳥の姿に遭遇はしていません。
Power BIを実際に仕事に使っていくと、どうしてもたくさんのグラフの設定をしなければならないケースが出てきます。これ気まぐれで設定していくとフォントサイズなどばらばらになってしまい、最後に再度設定しなおすなど、このビジュアルの設定を操作している時間がかなりかかります。そこで活躍するのが、Power Pointにもあるテーマ設定機能です。設定の各種デフォルト値の設定、カラーパレット、背景の設定などができます。
ただ、まだたいへんですね、画面からデフォルト値を設定できるのはごくわずかです。PowerPointのように自分で設定したないようを既定値に登録するような機能はまだなく、コツコツでJSON形式の設定ファイルを作っていくことになります。でも一度作ってしまえば、しばらくは使えると思うので、デザインの統一、作業の効率化に貢献すると思います。 日本人は、このレーダーチャートが好きですね。
で、Power BIにもこのレーダーチャートが存在しますが、機能がとってもプアーなんです。だからまともに仕事で使おうとするといくつも課題があり、時間もかかります。
大きな課題として、
①各軸のスケールを固定にできません。わたしの場合は、最大値あるいは平均値の割合を計算して使っています。とっても面倒です。
②値がないと軸が消えます。下記の図では7軸ですが、この軸を固定にできず、値がないと消えてします。nullだと消えるので、ゼロをデータの中に必ずいれればいいのですが、これがなかなかの手間がかかります。
最近、このレーダーチャートをどうしてもしたいと言われるユーザが現れたので、再度いろいろ試してみました。それで、以下の図の灰色の7角形の図を見てください。これは基準値で、基準値を持つ(平均値とか最大値)をテーブルを作って本来のテーブルとリレーションを張ります。これを表示しておけば、軸もなくならず、基準値とも比較できます。
いずれ時間ができたら、このレーダーチャートのビジュアルはオープンソースなので改造してやろうと思っています。軸のスケールを固定にする機能は絶対にほしいです。
なおレーダチャートは数値軸が多いため、普通の棒グラフのような短時間では作れません。軸の数分、棒グラフのビジュアルを設定する以上に時間かかると思います。ここはこのグラフを要望される方によく説明した方がいいです。
Power BIは、一度レポートを作ってしまえば、あとはソースデータを何度でも更新できのがとても便利です。ただ、このデータ更新日をデータとして取り込む機能が現在はありません。そのため、以下のようなクエリをちょこんと追加しておくという方法がよく使われます。Power BIでデータを更新するとクエリが一斉に動くので、その時間を記録してデータとして保存するしくみです。
これ便利です。
こんなの前からあったでしょうか。
Power BIでレポートを作っているとどんどんページが増えてきます。その目次とリンクを作りたくなります。以前はコツコツと作るしかなかったのですが、今はボタンメニューから簡単に作れます。あとはデザインだけです。
計算結果の順位を求める場合、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系のフィルター関数でコンテキストフィルタをクリアします。
これを気を付ければ順位が算出されます。
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 ソース
ソースデータのファイルを読み込みたくないときは、エラーが出ないように空テーブルを設定します。ここで空テーブルに設定する列は、以降の処理でエラーが出ないようにするのと、設定したリレーション設定が消えないように設定します。時々リレーションが消えてしまい、計算がおかしくなっていることがあるので注意が必要です。
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