Open Kesin11 opened 4 years ago
例えば、以下のような「CIのビルド履歴情報データ」に対してSUCCESSの割合を表示したいケース。
これは当然円グラフを使えば一発で作ることができます。
しかし、例えば日毎のSUCCESSの割合推移を折れ線グラフで表現したい場合、DataStudioではグラフの種類や設定だけではそれを実現することはできません。 単純にグラフを描こうとすると、ステータス毎の推移を出すことしかできません。
割合を表現するためには、SUCCESSのレコード数 / 総レコード数の数値を算出する必要があります。手元のデータではstatusカラムはSUCCESS | FAILED | ABORTED いずれかの文字列なので、これをどうにかSUMで数えるための数値に変換する必要があります。
SUCCESSのレコード数 / 総レコード数
status
そのような場合は、DataStudioで既存のカラムを加工して新しいカラムを作成する機能を使います。 ここでは式を書くことができるので、このようにCASE WHENとCONTAINS_TEXT()を使って"SUCCESS"であれば1、それ以外は0とする新しいカラムを作成します。
この新しいカラムをsuccess_countと仮に呼びましょう。"SUCCESS"のレコードだけが1, それ以外のレコードには0となるので、SUM(success_count) = SUCCESSのレコード数となります。 最終的にはSUCCESSのレコード数 / 総レコード数を表現したいわけですが、これはAVG(success_count)と一致します。
success_count
SUM(success_count) = SUCCESSのレコード数
AVG(success_count)
というわけで、折れ線グラフの指標にstatus_countをセットしてデフォルトのSUMからAVGに変更します。すると、このように所望のグラフを手に入れることができます。
(下の表は検算用。グラフ上のSUCCESSの割合が正しいことがわかります)
たまにこういうグラフを描きたいのですが、自分でもやり方をよく忘れるので今回備忘として書かせていただきました。 ちなみに、この方法は元々海外のスレで見つけたものなので参考として貼っておきます。 conditional count - Data Studio Community
最初はSUCCESSのものだけをカウントすればよいだろうと考えて、表に以下のようなフィルターを設定しました。
しかし、これでは上手くいきません。その理由は、フィルターをかけるということはグラフの描画対象となるレコードそのものを絞ることになるためです。 つまり、SUCCESSのレコード数 / 総レコード数の"総レコード数"そのものが"SUCCESSのレコード数"になってしまうのです。
それでは平均を計算したところで当然常に1の値になってしまいます。そのような理由でこの方法は上手くいかないです。
"success_count"をDataStudio側で新しいカラムとして作成してもいいのですが、もしも同じデータを複数のDataStudioレポートで使う可能性があるのであれば元データの方でこれと同じカラムを作ってしまった方が良いでしょう。
DataStudioのレポートをコピーするときにデータリソースを別物として新しく作成する場合は、DataStudio側で作成した新しいカラムなどは引き継がれません。 コピー時の手作業が増えることになるので、それなりの数をコピーする予定があるのであれば元データ側で対応してしまう方が楽です。
例
例えば、以下のような「CIのビルド履歴情報データ」に対してSUCCESSの割合を表示したいケース。
これは当然円グラフを使えば一発で作ることができます。
しかし、例えば日毎のSUCCESSの割合推移を折れ線グラフで表現したい場合、DataStudioではグラフの種類や設定だけではそれを実現することはできません。 単純にグラフを描こうとすると、ステータス毎の推移を出すことしかできません。
解決策
割合を表現するためには、
SUCCESSのレコード数 / 総レコード数
の数値を算出する必要があります。手元のデータではstatus
カラムはSUCCESS | FAILED | ABORTED いずれかの文字列なので、これをどうにかSUMで数えるための数値に変換する必要があります。そのような場合は、DataStudioで既存のカラムを加工して新しいカラムを作成する機能を使います。 ここでは式を書くことができるので、このようにCASE WHENとCONTAINS_TEXT()を使って"SUCCESS"であれば1、それ以外は0とする新しいカラムを作成します。
この新しいカラムを
success_count
と仮に呼びましょう。"SUCCESS"のレコードだけが1, それ以外のレコードには0となるので、SUM(success_count) = SUCCESSのレコード数
となります。 最終的にはSUCCESSのレコード数 / 総レコード数
を表現したいわけですが、これはAVG(success_count)
と一致します。というわけで、折れ線グラフの指標にstatus_countをセットしてデフォルトのSUMからAVGに変更します。すると、このように所望のグラフを手に入れることができます。
(下の表は検算用。グラフ上のSUCCESSの割合が正しいことがわかります)
たまにこういうグラフを描きたいのですが、自分でもやり方をよく忘れるので今回備忘として書かせていただきました。 ちなみに、この方法は元々海外のスレで見つけたものなので参考として貼っておきます。 conditional count - Data Studio Community
試したがダメだった方法
最初はSUCCESSのものだけをカウントすればよいだろうと考えて、表に以下のようなフィルターを設定しました。
しかし、これでは上手くいきません。その理由は、フィルターをかけるということはグラフの描画対象となるレコードそのものを絞ることになるためです。 つまり、
SUCCESSのレコード数 / 総レコード数
の"総レコード数"そのものが"SUCCESSのレコード数"になってしまうのです。それでは平均を計算したところで当然常に1の値になってしまいます。そのような理由でこの方法は上手くいかないです。
さらにtips
"success_count"をDataStudio側で新しいカラムとして作成してもいいのですが、もしも同じデータを複数のDataStudioレポートで使う可能性があるのであれば元データの方でこれと同じカラムを作ってしまった方が良いでしょう。
DataStudioのレポートをコピーするときにデータリソースを別物として新しく作成する場合は、DataStudio側で作成した新しいカラムなどは引き継がれません。 コピー時の手作業が増えることになるので、それなりの数をコピーする予定があるのであれば元データ側で対応してしまう方が楽です。