2017-03-02 6 views
0

저는 SQL에 익숙하며 매개 변수를 전달하기 위해 here이라는 UDF를 사용하여 Great Plains 데이터를 Excel로 직접 끌어 오려고 Power Query를 사용하려고합니다. 통합 문서에서 쿼리로.Microsoft SQL : 열 "dbo"또는 사용자 정의 함수 또는 집계를 찾을 수 없습니다.

(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 쿼리입니다 : 다음은 UDF는

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: Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fnGetParameter", or the name is ambiguous. Details: DataSourceKind=SQL DataSourcePath=dcb-gp15-sql.us.medsolutions.com;MED01 Message=Cannot find either column "dbo" or the user-defined function or aggregate "dbo.fnGetParameter", or the name is ambiguous. Number=4121 Class=16

도움이 될만한 모든 도움을 주실 수 있습니다.

+0

'dbo.fnGetParameter' 란 무엇입니까? [테이블 반환 함수] (https://technet.microsoft.com/en-us/library/ms191165 (v = sql.105) .aspx)이면 스칼라 함수로 사용할 수 없습니다. –

+0

' fnGetParameter'는 Excel 함수입니까? 분명하지 않아. – DavidG

+0

fnGetParameter는 Power Query> From Other Sources> Blank Query> Advanced Editor를 사용하여 작성한 UDF의 이름입니다. 미안하지만, 나는 그 질문에 대해 더 분명히해야만했다. – battery514

답변

1

사용자 정의 "M"함수 fnGetParameter은 Power Query에서 매시업을 실행할 때 정의되며 서버로 보내지지 않습니다.

전원 쿼리에서 네이티브 SQL 쿼리를 지정하면 서버로 보내지는 것입니다. Power Query는 서버에서 사용자 정의 UDF를 정의하는 방법을 제공하지 않습니다.


대신 당신은 전원 쿼리에 AccountTransactions 테이블을 가져올 테이블을 변환하는 "M"변환을 사용할 수 있습니다. UI를 사용하여 행 필터 및 합계 집계를 생성 한 다음 고객 필터를 사용하도록 "M"을 사용자 지정하는 것이 좋습니다.

귀하의 단계 중 하나는 다음과 같습니다 :

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