Help us understand the problem. What is going on with this article?

Power BI DesktopのファイルからPower Queryでデータを取れる②

前回の記事を踏まえ,すぐ使えるよう再構成したもの.

処理の流れ

  1. Power BI Desktopでデータを抜きたいファイルを開いておく(1個だけ)
  2. PowerShell:接続状況をテキストファイルを出力.
  3. Power Query:当該テキストファイルからlocalhostを得る.
  4. Power Query:localhostでデータベース名を得る.
  5. Power Query:データベース名を使って,pbixとの接続クエリを作る.

PowerShellコード

当方Win7環境を使うことが多いので,netstatなのです.

Export_netstat
#プロセスIDを取る.
[string]$msmdsrv_id =(Get-Process msmdsrv).Id
#接続状況の文字列を得て,絞り込む.
$vStr =netstat -no
#行末がIDなので,それで絞り込む.
$vStr | Select-String (" " + $msmdsrv_id + "$") |Out-File "C:\Users\Public\Documents\localhost.txt"


出力されるテキストファイルはこんな感じ.
image.png

Power Queryコード

DAXコードをパラメータとしてます.テキストファイルのパスはPowershellから固定場所に出力する想定なので,うめこんでます.

fx_FromPBIX
(DAX as text)=>
let
    FromTXT = Table.FromColumns({
                Lines.FromBinary( File.Contents("C:\Users\Public\Documents\localhost.txt"), null, null, 932 )
              }),
    //空白行のごみがあるので,空の削除をしてからの選択となる.
    FirstLine = Table.SelectRows(FromTXT, each [Column1] <> null and [Column1] <> ""){0}[Column1],

    //環境によっては囲んでる文字がちょっと違うかもしれない.その辺は現場対応.
    StrLocalhost = "localhost:" &
                   Text.Trim(
                        Text.BetweenDelimiters(FirstLine,"[::1]:","[::1]")," "
                   ),

    DBName = AnalysisServices.Databases(StrLocalhost, [TypedMeasureColumns=true, Implementation="2.0"])[Name]{0},
    Connect_pbix = AnalysisServices.Database(StrLocalhost, DBName, 
                                    [Implementation="2.0", 
                                     Query= DAX
           ]),
    列名の整理 = Table.TransformColumnNames( Connect_pbix,each Text.BetweenDelimiters(_,"[","]") )
in
    列名の整理

↓呼び出した様子
image.png

更新履歴

2020/2/2:「処理の流れ」の箇所を番号付きリストに変更。

tanuki_phoenix
Power Queryの活用を進めています。Accessも好きです。 よろしくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away