6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Microsoft Power BIAdvent Calendar 2024

Day 3

Microsoft Fabric Semantic link で Power BI 利用状況レポートのデータを定期保存する - ビジュアルデータ -

Posted at

はじめに

Microsoft Fabric Semantic link で Power BI 利用状況レポートのデータを定期保存する - 生データ - の続きです。

生データを取得することが出来た一方、レポートに表示されているデータを取得する程度のほうが使いやすいというニーズもあるかもしれないので、DAXの結果を取得する方法を記載します。

準備 - 対象 DAX 調査

利用状況レポートはそのままではダウンロードできないので git 統合を利用して Power BI Desktop で開けるファイル形式にしてしまいます。

  1. 利用状況レポートを有効化したら、git統合が有効になったワークスペースにレポートのコピーを保存します。
    image.png

  2. ソース管理からコミットします。
    image.png

  3. Azure Repos でこのように確認可能となります。
    image.png

  4. クローンしてPower BI Desktop で pbir ファイルを開けたら、パフォーマンスアナライザーを使用します。
    image.png

  5. 対象のビジュアルで実行されているDAXクエリをコピーします。これを使用してデータを取得、保存していきます。
    image.png

手順

Evaluate DAXを使用していきます。
workspace の引数があるので、別のワークスペースのセマンティックモデルに接続も可能です。
※xmlaエンドポイントが有効である必要があるので PPU or Fabric のワークスペースが対象となります。

  1. Report open requests の場合は以下のようになりました。

    image.png

    pyspark
    # Report open requests
    dax= """
    // DAX Query
    DEFINE
    	VAR __DS0FilterTable = 
    		TREATAS({FALSE,
    			BLANK()}, 'Workspace reports'[IsUsageMetricsReportWS])
    
    	VAR __DS0FilterTable2 = 
    		TREATAS({FALSE,
    			BLANK()}, 'Reports'[IsUsageMetricsReport])
    
    	VAR __DS0FilterTable3 = 
    		FILTER(
    			KEEPFILTERS(VALUES('Reports'[ReportGuid])),
    			'Reports'[ReportGuid] = "7f5701b1-8771-453b-8602-587b5933ed15"
    		)
    
    	VAR __DS0Core = 
    		SUMMARIZECOLUMNS(
    			'Dates'[Date],
    			__DS0FilterTable,
    			__DS0FilterTable2,
    			__DS0FilterTable3,
    			"Weekly_Views", 'Model measures'[Weekly Views],
    			"Report_views", 'Model measures'[Report views]
    		)
    
    	VAR __DS0PrimaryShowAll = 
    		ADDMISSINGITEMS(
    			'Dates'[Date],
    			__DS0Core,
    			'Dates'[Date],
    			__DS0FilterTable,
    			__DS0FilterTable2,
    			__DS0FilterTable3
    		)
    
    	VAR __DS0BodyLimited = 
    		SAMPLE(3502, __DS0PrimaryShowAll, 'Dates'[Date], 1)
    
    EVALUATE
    	__DS0BodyLimited
    
    ORDER BY
    	'Dates'[Date]
    
    """
    
    df_report_open_requests = fabric.evaluate_dax(
        "Usage Metrics Report",
        dax,
        workspace='<対象のワークスペースID>'
    )
    display(df_report_open_requests)
    
    

    image.png

  2. 取得できたデータを保存します。(パーティション上書きが便利なのでspark で処理していますが、evaluate_daxはpandas データフレームで返答するのでpythonで保存してもいいと思います

    pyspark
    
    sdf_report_open_requests = spark.createDataFrame(df_report_open_requests)
    
    # 動的パーティション上書きを設定して、読みこんだデータフレームに存在するパーティションのみ差し替え
    spark.conf.set('spark.sql.sources.partitionOverwriteMode','dynamic')
    
    # 列名を補正
    sdf_report_open_requests = sdf_report_open_requests\
        .withColumnRenamed("Dates[Date]","Date")\
        .withColumnRenamed("[Weekly_Views]","Weekly_Views")\
        .withColumnRenamed("[Report_views]","Report_views")
    sdf_report_open_requests.write.partitionBy("Date").mode("overwrite").saveAsTable("report_open_requests")
    
    

以上のように、利用状況レポートの DAX を確認して、semantic link を使用することでビジュアルデータのレイクハウスへの保存が可能です。

6
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?