小编ste*_*rgh的帖子

SSRS和powershell:参数不被接受

我使用Powershell在Microsoft SQL Report Services上运行多个报告,并将结果保存到Word文档.我有一个脚本,其中包含处理与Report Server通信的函数:

## File "qrap-functions.ps1"
function GetRSConnection($server, $instance)
{
    $User = "xxxx"
    $PWord = ConvertTo-SecureString -String "yyyy" -AsPlainText -Force
    $c = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $User, $PWord

    $reportServerURI = "http://" + $server + "/" + $instance + "/ReportExecution2005.asmx?WSDL"

    $RS = New-WebServiceProxy -Class 'RS' -NameSpace 'RS' -Uri $reportServerURI -Credential $c
    $RS.Url = $reportServerURI
    return $RS
}
function GetReport($RS, $reportPath)
{
    $reportPath = "/" + $reportPath
    #$reportPath
    $Report = $RS.GetType().GetMethod("LoadReport").Invoke($RS, @($reportPath, $null))      
    $parameters = @()
    $RS.SetExecutionParameters($parameters, "nl-nl") > $null …
Run Code Online (Sandbox Code Playgroud)

powershell reporting-services

10
推荐指数
1
解决办法
1258
查看次数

请确认:SYSDATETIME()比WHERE子句中的GETDATE()慢

我有一个返回几千个记录的查询,连接在几个表中.在WHERE子句中,过去检查日期不超过两个月.首先,查询将此日期边界设置为变量,并使用WHERE.

DECLARE @startdate as DATE = DATEADD(MONTH, -2, SYSDATETIME())

select [....]
where dateinquestion >= @startdate
Run Code Online (Sandbox Code Playgroud)

这运行得很好(返回4秒内预期的结果),但我想摆脱变量声明并将赋值移动到WHERE子句本身:

select [....]
where dateinquestion >= DATEADD(MONTH, -2, SYSDATETIME())
Run Code Online (Sandbox Code Playgroud)

这运行超过一分钟,吃掉所有CPU.我终止了查询以停止推送服务器,没有给出结果.更改为GETDATE()(我不需要来自SYSDATETIME()的精度)加快速度:

select [....]
where dateinquestion >= DATEADD(MONTH, -2, GETDATE())
Run Code Online (Sandbox Code Playgroud)

结果与方案1类似.

我相信这是因为SYSDATETIME是基于每行进行评估的,因为处理行需要几纳秒,这对SYSDATETIME来说很重要.但是,GETDATE具有更高的更改阈值,不受影响(或受影响较小),并且不会在每行的基础上更改 - 或需要重新评估.

你确定吗?我对这种行为的假设是否正确?

我已经搜索了这个,但除了这个之外找不到任何东西,这只涉及将SYSDATETIME()分配给变量,而不是在WHERE中使用它: SYSDATETIME()的成本是否高于GETDATE()?

此外,在示例中仅使用GETDATE: TSQL日期时间在where子句中起作用

sql-server datetime sql-server-2012

5
推荐指数
1
解决办法
542
查看次数

SSRS和PowerShell:以Excel格式获取报告

我正在尝试让PowerShell向我们的SSRS服务器发送Web请求并捕获结果.我已经使用rs:FORMAT=EXCELSSRS url字符串中的参数敲了一下墙.我有以下内容:

首先,初始化凭证:

$User = "MYDOMAIN\MyUser"
$PWord = ConvertTo-SecureString -String "WooHooStringP$W0rd" -AsPlainText -Force
$c = New-Object –TypeName System.Management.Automation.PSCredential –ArgumentList $User, $PWord
Run Code Online (Sandbox Code Playgroud)

现在,请求报告:

Invoke-WebRequest `
-UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer) `
-Credential $c `
-Uri "http://myserver/ReportServer_DEV/Pages/ReportViewer.aspx?/folder+path/report+name"
Run Code Online (Sandbox Code Playgroud)

这很好用.我甚至可以获取结果(包含此请求并使用().Content).然后,指定格式而不是纯渲染:

Invoke-WebRequest `
-UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer) `
-Credential $c `
-Uri "http://myserver/ReportServer_DEV/Pages/ReportViewer.aspx?/folder+path/report+name&rs:format=HTML4.0"
Run Code Online (Sandbox Code Playgroud)

注意rs:Format规格?奇迹般有效.

然后,对于格兰德结局,给我一个Excel文件:

Invoke-WebRequest `
-UserAgent ([Microsoft.PowerShell.Commands.PSUserAgent]::InternetExplorer) `
-Credential $c `
-Uri "http://myserver/ReportServer_DEV/Pages/ReportViewer.aspx?/folder+path/report+name&rs:format=EXCEL"
Run Code Online (Sandbox Code Playgroud)

不能做,萌芽:

Invoke-WebRequest : The remote server returned an error: (401) Unauthorized.
At line:1 char:11
+ $bytez = (Invoke-WebRequest `
+           ~~~~~~~~~~~~~~~~~~~ …
Run Code Online (Sandbox Code Playgroud)

powershell reporting-services ssrs-2008-r2

4
推荐指数
1
解决办法
6803
查看次数

Filewriter 不会将文本附加到新创建的文件中

我对 Java 还很陌生。我试图将“List:”添加到新文本文件的开头(如果它不存在)。相反,文本文件是空白的,输入内容位于一行空白下方。

File hi = new File("hi.txt");
try{
  if(!hi.exists()){
    System.out.printf("\nCreating 'hi.txt'."); 
    hi.createNewFile();
    String hello = "List:";
    new FileWriter(hi).append(hello);
  }
  else{
    System.out.printf("\nWriting to 'hi.txt'");
  }
  FileWriter writeHere = new FileWriter(hi, true);
  String uling = "hi";
  writeHere.append(uling);
  writeHere.close();
}
//error catching
catch(IOException e){
  System.out.printf("\nError. Check the file 'hi.txt'.");}
Run Code Online (Sandbox Code Playgroud)

java filewriter

2
推荐指数
1
解决办法
6117
查看次数

报表服务器无法连接到其数据库

我正在尝试配置一个 SSRS 实例,但收效甚微。

我已经在服务器 DWHFRONT 上安装了 SSRS。它在网络服务凭据下运行。在 Reporting Services 配置管理器的“数据库”选项卡上,我已将其设置为使用 DWHBACK 上的数据库,该数据库已成功创建。该连接使用域帐户 DOM\SA_DWH。我已为 DOM\SA_DWH 添加到服务器 DWHBACK 的登录名,并且可以看到 Reporting Services Manager 已将授权添加到 SSRS 数据库。配置管理器接受这些连接参数。

但是(在设置 URL、虚拟目录等之后)如果我访问 DWHFRONT/Reports/ 的 URL,我会收到一条错误消息:

该服务不可用。

报表服务器配置不正确。请与您的系统管理员联系以解决该问题。系统管理员:报表服务器无法连接到其数据库,因为它没有这样做的权限。使用 Reporting Services 配置管理器更新报表服务器数据库凭据。

起初我认为这可能是一个问题,因为尚未部署到 SSRS 实例。但是,当我尝试部署某些内容时,在 BIDS 中出现此错误:

报表服务器无法打开与报表服务器数据库的连接。所有请求和处理都需要连接到数据库。---> Microsoft.ReportingServices.Library.ReportServerDatabaseUnavailableException:报表服务器无法打开与报表服务器数据库的连接。所有请求和处理都需要连接到数据库。(Microsoft.ReportingServices.Designer)

sql-server reporting-services

2
推荐指数
1
解决办法
2万
查看次数