Discourse Data Explorer と Power BI の連携
最近、Discourse の Data Explorer からデータを最小限のオーバーヘッドで直接 Power BI に取得する、便利な Power BI 関数を作成しました。
もしあなたが私と同じように、Power BI アプリを通じてデータを自動的に取得・更新したいと考えているなら、Power BI の「詳細エディター」に以下の関数コードを貼り付けてください。
(queryID) => let
resultCount = 1000,
otherNameForPage = 0,
GetPage = (otherNameForPage) =>
let
content1 = "params={""page":"""" & Number.ToText(otherNameForPage) & """}",
RawData = Json.Document(Web.Contents(
"https://forumURL/admin/plugins/explorer/queries",
[RelativePath=Number.ToText(queryID) & "/run",
Query=
[
params="{"page":"""" & Number.ToText(otherNameForPage) & """}"
],
Headers = [
#"api-username"="yourAPIUsername",
#"api-key"="yourAPIKey",
#"Content-Type" = "application/x-www-form-urlencoded"],
Content = Text.ToBinary(content1)
]
) ),
resultCount = RawData[result_count]
in
if RawData[result_count] = 0 then null else RawData,
Pages = List.Generate(
() => [i = 0, RawData = GetPage(i)],
each [RawData] <> null,
each [i=[i]+1, RawData = GetPage(i)],
each Table.Combine(let raw = [RawData] in List.Transform(raw[rows], each Table.FromRows({_}, raw[columns])))),
Output = Table.Combine(Pages)
in
Output
また、以下はサンプルの Data Explorer クエリです。上記の関数が正しく機能するためには、ページネーションが必須となります(クエリが 1 ページしか返さない場合でも必要です)。
--[params]
-- integer :page = 0
SELECT count(*) from badges
OFFSET :page * 1000
LIMIT 1000
(既存のクエリも、上記の最初の 2 行と最後の 2 行を追加するだけで簡単に適応できます)
この関数は、結果がなくなるまで自動的にページを反復処理し続けます。
動作させるには?
Power BI にこの関数をロードした後、以下の 2 点を設定する必要があります。
-
api-username と api-key の設定(上記の関数内のプレースホルダーを参照):
Headers = [ #"api-username"="yourAPIUsername", #"api-key"="yourAPIKey", -
クエリ ID の設定。
データを取得するには、クエリ URL で簡単に確認できるクエリ ID を指定するだけです。

Power BI で関数をクリックした後、以下のように表示されるはずです。
サンプル出力
これはサンプルクエリの出力結果です。

これで完了です!あとはお好みのようにデータを整形して利用できます。










