BI-TV #23: Редактирование кода скриптов Power Query в VS Code - решение Ben Gribaudo

Редактирование кода скриптов Power Query в VS Code - решение Ben Gribaudo: https://bengribaudo.com/blog/2020/07/16/5356/editing-report-spreadsheet-mashups-in-vscode#more-5356

  1. Устанавливаем VS Code https://code.visualstudio.com/Download. При установке ставим галку “Add to Path”.

  2. В VS Code устанавливаем расширение “Power Query / M Language” (ctrl+shift+P - установить расширение - вводим название).

  3. Устанавливаем PowerShell Core 7 c github: https://github.com/powershell/powershell#get-powershell.

  4. Устанавливаем Data Mashup Cmdlet, для этого вводим PowerShell Core 7 команду:

     Install-Module -Name DataMashup -AllowPrerelease
    

    Если выдает ошибку - чтобы заработала возможность установки скриптов из галереи используем команду.

     [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
    

    Решение найдено здесь.

  5. В скрипте функции заменяем code на путь до VS Code на вашем компьютере:

     function Edit-DataMashup {
     param (
         [Parameter(Mandatory=$True, Position=0)]
         [string]$File
     )
    
     $originalMashup = Export-DataMashup -Raw $File -ErrorAction Stop
           
     $tempFile = New-TemporaryFile -ErrorAction Stop
           
     try {
         $tempFile = Rename-Item $tempFile ($tempFile.Name + ".m") -PassThru -ErrorAction Stop
    
         $originalMashup | Out-File $tempFile -NoNewline -ErrorAction Stop
         Start-Process "code" "`"$($tempFile)`"" -Wait 
         $postEditMashup = Get-Content $tempFile -Raw -ErrorAction Stop
               
         if ($originalMashup -eq $postEditMashup) { 
             $successful = $true
             return
         }
               
         Import-DataMashup -Raw $File -Experimental -Mashup $postEditMashup -ErrorAction Stop
         $successful = $true
     }   
     finally {
         if ($successful -ne $true) {
             Write-Error "Failed to Save Modified Power Query mashup:`r`n$($postEditMashup)"
         }
          
         Remove-Item $tempFile
     }
     }
    
  6. Создаем файл Profile, чтобы положить в него функцию, чтобы после перезапуска Power Shell она была доступна

     if (!(Test-Path -Path $PROFILE)) {
        New-Item -ItemType File -Path $PROFILE -Force
      }
    
  7. Открываем файл Profile командой ниже, вставляем в notepad функцию из шага 6, сохраняем файл.

     notepad $PROFILE
    
    
  8. Перезапускаем PowerShell 7

  9. Редактируем код Power Query XLSX и PBI файлов в VS Code командой:

    Edit-DataMashup SomeFile.xlsx
    

Дополнение от Ярослава Тихонова:

Открываем папку в проводнике %AppData%\Microsoft\Windows\SendTo\

Создаем текстовый файл. Название файла - это название операции, лучше выбрать что-то вроде Edit M Code. В файле прописываем текст

```
Dim objShell
Set objShell = WScript.CreateObject( "WScript.Shell" )
objShell.Run("pwsh -command " & chr(34) & "Edit-DataMashup " & chr(39) & WScript.Arguments(0) & chr(39) & chr(34))
Set objShell = Nothing
```

Сохраняем. Закрываем. Меняем расширение на vbs.

Теперь можно щелкнуть правой кнопкой мыши и в группе Отправить будет пункт с редактированием M кода