【问题标题】:Microsoft SQL: Cannot find either column "dbo" or the user-defined function or aggregateMicrosoft SQL:找不到列“dbo”或用户定义的函数或聚合
【发布时间】:2017-07-22 12:02:47
【问题描述】:

我是 SQL 新手,我尝试使用 Power Query 将 Great Plains 数据直接提取到 Excel 中,使用我发现 here 的 UDF 将参数从工作簿传递到查询。这是 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:找不到列“dbo”或 用户定义的函数或聚合“dbo.fnGetParameter”,或 名字不明确。细节: DataSourceKind=SQL DataSourcePath=dcb-gp15-sql.us.medsolutions.com;MED01 Message=找不到列“dbo”或用户定义的函数或聚合“dbo.fnGetParameter”,或 这个名字是模棱两可的。 号码=4121 类=16

任何帮助将不胜感激。

【问题讨论】:

  • 什么是dbo.fnGetParameter?如果是table-valued function,则不能将其用作标量函数
  • fnGetParameter 是 Excel 函数吗?不清楚。
  • fnGetParameter 是我使用 Power Query > From Other Sources > Blank Query > Advanced Editor 创建的 UDF 的名称。抱歉,我应该在问题中更清楚地说明这一点。

标签: sql sql-server excel powerquery


【解决方案1】:

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

如果您从 Power Query 指定本机 SQL 查询,这就是我们发送到服务器的字面意思。 Power Query 没有提供在服务器上定义自定义 UDF 的方法。


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

例如您的步骤之一是:

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

【讨论】:

    猜你喜欢
    • 2015-05-26
    • 2020-12-07
    • 2014-01-06
    • 2019-08-01
    • 2011-01-06
    • 2019-02-09
    • 1970-01-01
    • 2012-07-25
    • 1970-01-01
    相关资源
    最近更新 更多