I need some help. Please if someone has good experience with connecting SQL code to Power BI I will appreciate your response/help.
I have a SQL code that I try to add to Power BI but when I add it, I get an error
Create connections Query2 Microsoft SQL: Incorrect syntax near the keyword 'DECLARE'. Incorrect syntax near ')'.
Can someone review and let me know what is wrong? My code works just fine is Microsoft SQL Server Management Studio.
DECLARE @CurrentDateTime DATETIME = GETDATE();
DECLARE @CurrentDate DATE = @CurrentDateTime;
DECLARE @LastWeekDt DATE = DATEADD(WW, -1, DATEADD(DD, 7 - DATEPART(dw, @CurrentDate), @CurrentDate));
DECLARE @LastWeekDATE VARCHAR(8) = convert(varchar(8),cast (@LASTWEEKDT as date),112);
DECLARE @LastYearLWDt DATE = DATEADD(WW, -104, DATEADD(DD, 7 - DATEPART(dw, @LastWeekDt), @LastWeekDt));
DECLARE @LastYearLWDATE VARCHAR(8) = convert(varchar(8),cast (@LastYearLWDt as date),112);
SET ARITHABORT OFF
SET ANSI_WARNINGS OFF
Select AGENCY, MASTER_CHAIN, CHAIN, STORE_NBR, WK_ENDING,
sum(OB_UNITS) as 'OB_UNITS', sum(RET_UNITS) as 'RET_UNITS', sum(ob_units) - sum(ret_units) AS 'NET_UNITS',
sum(pos_units) as 'POS_UNITS', CAST(ROUND(sum(RET_UNITS) / sum (OB_UNITS) * 100,2) as decimal (10,2)) AS '%RET_UNITS',
CAST(ROUND(sum(pos_units) / sum(ob_units) * 100,2) as decimal (10,2)) AS '%POS_Sell-Thru_Units', sum(ob_msrp) as 'OB_MSRP',
sum(RET_MSRP) as 'RET_MSRP', sum(OB_MSRP) - sum(RET_MSRP) as 'NET_MSRP', sum(POS_MSRP) as 'POS_MSRP', CAST(ROUND(sum(RET_MSRP) / sum(OB_MSRP) * 100,2) as decimal (10,2)) AS '%RET_MSRP',
CAST(ROUND(sum(POS_MSRP) / sum(OB_MSRP) * 100,2) as decimal (10,2)) AS '%POS_Sell-Thru_MSRP',
CAST(sum(ob_billing) as decimal (10,2)) as 'OB_BILLING', CAST(sum(RET_BILLING) as decimal (18,2)) as 'RET_BILLING',
CAST(ROUND(sum(ob_billing) - sum(ret_billing),2) as decimal (10,2)) AS 'NET_BILLING', CAST(sum(POS_BILLING) as decimal (10,2)) as 'POS_BILLING',
CAST(ROUND(sum(RET_BILLING) / sum(OB_BILLING) * 100, 2) as decimal (10,2)) AS '%RET_BILLING',
CAST(ROUND(sum(POS_BILLING) / sum (OB_BILLING) * 100,2) as decimal (10,2)) AS '%POS_Sell-Thru_BILLING', sum(Retailer_On_Hand_Units) AS 'Retailer_On_Hand_Units'
FROM
(SELECT s.DEAGY AS 'AGENCY', l.cmschn AS 'MASTER_CHAIN', s.DECHN AS 'CHAIN', s.DESTR AS 'STORE_NBR', s.DEWEDT AS 'WK_ENDING',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY ELSE 0 END AS 'OB_UNITS',
0 AS 'RET_UNITS', 0 AS 'NET_UNIS', 0 AS 'POS_UNITS', 0 AS '%RET_UNITS', 0 AS '%POS_Sell-Thru_Units',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERPRC ELSE 0 END AS OB_MSRP, 0 AS 'RET_MSRP', 0 AS 'NET_MSRP', 0 AS 'POS_MSRP', 0 AS '%RET_MSRP', 0 AS '%POS_Sell-Thru_MSRP',
CASE WHEN s.DEIO='O' AND s.DEAGY = 10 AND s.DECHN = 'WM' THEN s.DEQTY * s.DERSP ELSE '0'END AS OB_BILLING, 0 AS 'RET_BILLING', 0 AS 'NET_BILLING', 0 AS 'POS_BILLING', 0 AS '%RET_BILLING', 0 AS '%POS_Sell-Thru_BILLING', 0 AS 'Retailer_On_Hand_Units'
--INTO ##temp1
FROM REPIT.SMPDTA.SMPDTLM s
JOIN REPIT.LEVYDTA.LDSCHNM l
ON s.DEAGY=l.CMAGY AND s.DECHN=l.CMCHN
--JOIN LEVYDTA.SMPRTNM sm
--ON s.DEAGY=sm.DEAGY AND s.DECHN=sm.DECHN AND s.DESTR=sm.DESTR AND s.DEWEDT=sm.DEWEDT AND s.DEITM#=sm.DEITM#
where s.DEWEDT between @LastYearLWDATE and @LastWeekDATE AND s.DEAGY=10 AND s.DECHN='WM' and deqty > 0
union all
select p.PDAGY as 'AGENCY', lm.CMSCHN as 'MASTER_CHAIN', P.PDCHN AS 'CHAIN', P.PDSTR AS 'STORE_NBR', P.PDWEDT AS 'WK_ENDING',
0 AS 'OB_UNITS', 0 AS 'RET_UNITS', 0 AS 'NET_UNITS', P.PDQSLD AS 'POS_UNITS', 0 AS '%RET_UNITS', 0 AS '%POS_Sell-Thru_Units', 0 AS 'OB_MSRP',0 AS 'RET_MSRP', 0 AS 'NET_MSRP',
P.PDQSLD * P.PDRPRC AS 'POS_MSRP', 0 AS '%RET_MSRP', 0 AS '%POS_Sell-Thru_MSRP',
0 AS 'OB_BILLING', 0 AS 'RET_BILLING', 0 AS 'NET_BILLING', P.PDQSLD * P.PDRSP AS 'POS_BILLING', 0 AS '%RET_BILLING', 0 AS '%POS_Sell-Thru_BILLING', p.PDQOH AS 'Retailer_On_Hand_Units'
from repit.LEVYDTA.posdtlm p LEFT OUTER JOIN
REPIT.LEVYDTA.LDSCHNM lm ON P.PDAGY = LM.CMAGY AND P.PDCHN = lm.CMCHN
WHERE p.PDWEDT between @LastYearLWDATE and @LastWeekDATE and p.PDAGY = 10 and p.PDCHN = 'wm'
union all
select sm.DEAGY as 'AGENCY', lm.cmschn AS 'MASTER_CHAIN', sm.DECHN AS 'CHAIN', sm.DESTR AS 'STORE_NBR', sm.DEWEDT AS 'WK_ENDING',
0 AS 'OB_UNITS',
CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN -1 * sm.DEQTY ELSE 0 END AS 'RET_UNITS', 0 AS 'NET_UNITS',
0 AS 'POS_UNITS', 0 AS '%RET_UNITS', 0 AS '%POS_Sell-Thru_Units', 0 AS 'OB_MSRP',
CASE WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN ( -1 * sm.DEQTY) * sm.DERPRC ELSE 0 END AS 'RET_MSRP', 0 AS 'NET_MSRP',
0 AS 'POS_MSRP', 0 AS '%RET_MSRP', 0 AS '%POS_Sell-Thru_MSRP',
0 AS 'OB_BILLING',
CASE
WHEN sm.DEIO='I' AND sm.DEAGY = 10 AND sm.DECHN = 'WM' THEN (-1 * SM.DEQTY) * sm.DERSP ELSE 0
END AS RET_BILLING, 0 AS 'NET_BILLING', 0 AS 'POS_BILLING', 0 AS '%RET_BILLING', 0 AS '%POS_Sell-Thru_BILLING', 0 AS 'Retailer_On_Hand_Units'
from REPIT.LEVYDTA.SMPRTNM sm LEFT OUTER JOIN
REPIT.LEVYDTA.LDSCHNM lm ON sm.DEAGY=LM.CMAGY AND sm.DECHN=lm.CMCHN
WHERE sm.DEWEDT between @LastYearLWDATE and @LastWeekDATE AND sm.DEAGY=10 and sm.DECHN='WM'
)
x
group by Agency, MASTER_CHAIN, chain, STORE_NBR, WK_ENDING
order by STORE_NBR
Your advice strongly appreciated!!
Power BI constructs a query like this:
select * from ( ... your query goes here ... ) as SourceQuery
So when it puts your query between the parenthesis, it isn't a valid query anymore. Power BI does that, because it needs to be able to add joins and filters to your query. Either rebuild the logic inside Power BI using M and DAX, or put your query in a view in the data source and select from it.
The same thing happened when I tried the same syntax. what I did was to change the “declare” statements to "select as" statements, this worked for me. Hope you try this and please do let me know if it worked.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.