【发布时间】:2019-05-31 03:35:48
【问题描述】:
我正在构建一个 SSIS 包,以将 Analysis Services DMV 数据记录捕获到持久的 SQL 表中,以分析用户会话。
这是我正在尝试创建的过程:
服务器上的 Analysis Services DMV
[DISCOVER_SESSIONS]'Server-A' 用作数据源。在“Server-B”上的 SSIS 包[SSISDB/IsolatedPackages/SSASUsageStats.dtsx]写入 自定义数据库表[DBA].[dbo].[UsageStatsLogOLAP]。使用 Excel Powerquery 提取和转换源,加载 到 Excel,并从 Excel 传输到 SQL Server 表。 SSIS 执行 Excel 刷新并将数据传输到 SQL Server。在 SSIS 包完成后,一个 Excel 数据集是 加载到 SQL Server 以添加新记录。 Excel 示例数据集 如下所示。(注意:Excel Powerquery 被选为数据提取 ETL 工具,因为它的 提取“CubeCommand”字段的简单性[子字符串分析], 和“ADUserNameDisplay”字段 [Active Directory 查找来自 ‘SESSION_USER_NAME’])。
这可以分析用户 OLAP 会话超时。 SSIS 包将作为 SQL 代理作业每 15 分钟运行一次以添加新的 自定义 SQL Server 表的会话。
需要帮助:
SSIS 中是否有一种方法可以为 SSIS 执行 PowerShell 脚本以刷新 Excel 连接?另外,请记住凭据 需要对包进行身份验证的 Analysis Services 实例?是 有更好的方法来刷新 Excel(而不是 PowerShell SSIS)?
我研究过的一些刷新选项...
SSIS PowerShell script
SSIS VB script
SSIS C# script
3-party SSIS software (CozyRoc, PowerPack, TaskFactory)
根据 Task Factory 网站,专业版(每台服务器 2,495 美元)包含一个组件“Excel Power Refresh Task”。有没有人有这个插件的经验?我没有尝试下载这个扩展。
请参阅下文了解目前使用的 PoSH 脚本。该软件包是功能性的,但尚未自动化。我需要有关自动刷新 Excel 以完成包的帮助。感谢您的见解...谢谢!
方法:Power Shell 脚本命令:
这个命令的问题是它打开了第二个 power shell 窗口。如果我在 2 个单独的脚本中运行它,Excel 工作簿会成功更新。如果我将其作为单个脚本运行,它将使用我的用户凭据(而不是提供的用户凭据)——Excel 文件已成功保存,但数据数据刷新不成功。
##### STEP 1 ######
# Run powershell as another user account (DOMAIN\?????), for accessing the GCOP039 OLAP DMV
cd C:
# REM: Define domain username and password
$username = 'DOMAIN\bl0040ep'
$password = '!mySecretPwd'
# REM: Convert to a single set of credentials
$securePassword = ConvertTo-SecureString $password -AsPlainText -Force
$credential = New-Object System.Management.Automation.PSCredential $username, $securePassword
# REM: Launch PowerShell (runas) as another user
Start-Process powershell.exe -Credential $credential #-WindowStyle Maximized
##### STEP 2 ######
# Refresh the excel workbook connections and save the updated file
$file = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_Usage Stats.xlsx'
$x1 = New-Object -ComObject Excel.Application
$x1.Visible = $false
$x1.DisplayAlerts = $False
$enddate = (Get-Date).tostring("dd-MM-yy")
$filename = 'C:\SVN\BusinessAnalysts\ExcelTools\DatabaseSSAS_Usage Stats ' + $enddate + '.xlsx'
$wb = $x1.workbooks.Open($file)
$wb.refreshall()
# REM: Use SLEEP to eliminate the message: "This will cancel a pending data refresh. Continue?"
Start-Sleep -Second 20
$wb.SaveAs($filename)
$wb.Close()
$x1.Quit()
Remove-Variable wb,x1
参考文献:
- https://www.youtube.com/watch?v=gWJgYqYhjPo&index=9&list=PLBXFmpniYyOL8foPfqviOtzYEH2yE8jeP&t=0s
- Powershell Script - Open Excel, Update External Data, Save as
方法:自定义 SSIS 扩展(CozyRoc、PowerPack、TaskFactory):
CozyRoc
在开发过程中,我们尝试使用自定义 SSIS 扩展(来自 CozyRoc 的“Excel Source Plus”任务)来利用“重新计算”设置来刷新 Excel 工作簿。这并没有像宣传的那样起作用,当我联系 CozyRoc 支持人员时,他们也进行了验证,并指出:“我们不支持刷新外部数据连接”。
任务工厂
根据 Task Factory 网站,专业版(每台服务器 2,495 美元)包含一个组件“Excel Power Refresh Task”。有没有人有这个插件的经验?我还没有尝试下载此扩展程序。
参考文献:
- https://www.capterra.com/integration-software/compare/146853-111875-170286-178934/API-Driver-vs-COZYROC-SSIS+-Library-vs-SSIS-PowerPack-vs-Task-Factory
- https://www.sentryone.com/products/task-factory/features?hsCtaTracking=dc730d58-98cf-4332-94ea-43a5a80a7c6c%7C694de72f-7002-4ace-97a9-e00d9c08ae0f
- https://www.cozyroc.com/ssis/excel-api
截图
ps-script_excel-refresh-2-windows.png
SSISDB-IsolatedPackages-SSASUsageStats.dtsx.png
exceldataset-DBA.dbo.UsageStatsLogOLAP.png
【问题讨论】:
-
我想在此要求中添加更多信息。我在代码 plex SSIS Excel Refresh Task 上找到了一个开源自定义 SSIS 任务。我下载了文件,但我不确定如何安装自定义任务。有人知道吗?下载附带了很多文件,包括“sourceCode”文件夹和“Microsoft Excel Refresh Task.sln”Visual Studio 解决方案文件。我从The Data Queen 网站找到了说明,但我想我需要更多信息。
标签: sql-server excel powershell ssis permissions