Microsoft SQL:找不到列“dbo”或用户定义的函数或聚合

我是新来的SQL,并尝试使用Power Query将Great Plains数据直接使用UDF,我发现这里将工作簿的parameter passing到查询的Excel中。 这是UDF:

(ParameterName as text) => let ParamSource = Excel.CurrentWorkbook(){[Name="Parameters"]}[Content], ParamRow = Table.SelectRows(ParamSource, each ([Parameter] = ParameterName)), Value= if Table.IsEmpty(ParamRow)=true then null else Record.Field(ParamRow{0},"Value") in Value 

这里是SQL查询:

 Declare @accrualDate Date set @accrualDate = dbo.fnGetParameter("Accrual Date") Declare @lookback Date set @lookback = dbo.fnGetParameter("Lookback for Automated Accruals") Declare @lookbackBOP Date set @lookbackBOP = dbo.fnGetParameter("Lookback for Manual Accruals - BOP") Declare @lookbackEOP Date set @lookbackEOP = dbo.fnGetParameter("Lookback for Manual Accruals - EOP") SELECT [Open Year], [History Year], [Period ID], [TRX Date], [Account Number], [Account Description], [Journal Entry], [description], [reference], [Originating Posted Date], Sum([Debit Amount]) AS [Debit Amount], Sum([Credit Amount]) AS [Credit Amount] , Segment1, Segment2, Segment3, Segment4, Segment5, Segment6, Segment7 FROM ['dbName'].[dbo].[AccountTransactions] WHERE Segment2 BETWEEN 6000 AND 6999 and [description] = 'Purchases' and [TRX Date] BETWEEN @lookback AND @accrualDate GROUP BY [Open Year], [History Year], [Period ID], [TRX Date], [Account Number], [Account Description], [Journal Entry],[description],[reference], [Originating Posted Date], Segment1, Segment2, Segment3, Segment4, Segment5, Segment6, Segment7 

我已经自己运行UDF,并确认它从我的“参数”表中返回预期的值。 但是,在运行查询时出现以下错误:

DataSource.Error:Microsoft SQL:无法find列“dbo”或用户定义的函数或聚合“dbo.fnGetParameter”,或名称不明确。 详细信息:DataSourceKind = SQL DataSourcePath = dcb-gp15-sql.us.medsolutions.com; MED01 Message =无法find列“dbo”或用户定义函数或聚集“dbo.fnGetParameter”,或名称不明确。 数字= 4121类= 16

任何帮助将不胜感激。

自定义“M”函数fnGetParameter仅在Power Query中运行混搭时定义,并且不会发送到服务器。

如果你从Power Query中指定一个本地的SQL查询,这就是我们发送给服务器的东西。 Power Query不会给你一种在服务器上定义自定义UDF的方法。


相反,您可以将AccountTransactions表导入Power Query,并使用“M”转换来转换表。 我build议使用UI来生成行筛选器和求和聚合,然后自定义“M”以使用您的客户filter。

例如,你的一个步骤是这样的:

 FilteredRows3 = Table.SelectRows( FilteredRows2, each fnGetParameter("Lookback for Automated Accruals") < [TRX Date] and [TRX Date] < fnGetParameter("Accrual Date") )