LoginSignup
1
2

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-17

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

処理の流れ

  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:「処理の流れ」の箇所を番号付きリストに変更。

1
2
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
1
2