如何在执行具有可调整参数的特定查询之前连接到 Power BI 中的特定表而不加载整个表集?

问题描述 投票:0回答:1

我正在制作一个 Power BI 报告,该报告要求我连接到 SQL 数据库中的特定表。但是,我不希望在打开报告时自动加载整个表集,因为这可能需要大量时间和资源。

我的想法是,我的服务团队可以选择输入特定的 EAN 号码,并且只有在输入此 EAN 号码后才可以在该表上运行特定的查询。这样我们就可以通过根据用户输入仅加载相关数据来优化报告的性能。输出应该是可传输到 Excel 或 CSV 的查询结果。

  1. 是否可以连接到Power BI中的特定(多个)表而不直接加载整个表集?

  2. 如果是这样,我如何确保仅在团队输入特定的 EAN 编号后才针对该表集运行查询?

  3. 是否可以使用

    DECLARE
    执行powerBI直接查询?

以下变量需要是动态的(EAN 和年份),以便服务团队能够根据自己的需求进行调整。服务团队只能使用Power BI,技术能力有限,所以我需要尽可能在后台运行所有内容。

我们使用的查询是:

DECLARE @EAN nvarchar(18) = 'xxxxxxxxxxxxxxxxxx'
DECLARE @Year int = 2023

SELECT DATEFROMPARTS(YEAR(iucr.StartDate)
,MONTH(iucr.StartDate),1) AS 'Month'
,o.Reference, o.Name
, EAN, iucr.StartDate
, iucr.EndDate
, ISNULL(iucr.UsageLDN,0) UsageLDN
, ISNULL(iucr.UsageODN,0) UsageODN
, iucr.Price AS Marktprijs
, pp.Price AS GvO
, ISNULL(cp.Price, gp.Price) + ISNULL(rb.Price,0) AS Opslag
, ISNULL(cpp.Price,gpp.Price) + ISNULL(rbo.Price,0) AS Afslag
, (ISNULL(UsageLDN,0) * (ISNULL(iucr.Price,0) + ISNULL(pp.Price,0) + ISNULL(ISNULL(cp.Price, gp.Price),0) + ISNULL(rb.Price,0)))
- (ISNULL(UsageODN,0) * (ISNULL(iucr.Price,0) + ISNULL(ISNULL(cpp.Price,gpp.Price),0) + ISNULL(rbo.Price,0))) AS Bedrag
FROM CRM.InvoiceUsageCalculationRow iucr
INNER JOIN DWH.EnergieleveringContract ec ON iucr.ContractId = ec.ContractId
INNER JOIN dwh.Connection c ON ec.ConnectionId = c.ConnectionId
INNER JOIN dwh.Organization o ON ec.OrganizationId = o.OrganizationId
LEFT JOIN (SELECT * FROM DWH.PropositionPrice WHERE PriceComponentType = 'Premium') pp ON ec.MeeliftContractPropositionId = pp.PropositionId
LEFT JOIN (SELECT * FROM DWH.PropositionPrice WHERE PriceComponentType = 'GenericSurchargeLDNBase1') gp ON ec.PropositionId = gp.PropositionId
LEFT JOIN (SELECT * FROM DWH.PropositionPrice WHERE PriceComponentType = 'GenericSurchargeODNBase1') gpp ON ec.PropositionId = gpp.PropositionId
LEFT JOIN (SELECT * FROM DWH.ContractPrice WHERE PriceComponentType = 'GenericSurchargeLDNBase1') cp ON ec.ContractId = cp.ContractId
LEFT JOIN (SELECT * FROM DWH.ContractPrice WHERE PriceComponentType = 'GenericSurchargeODNBase1') cpp ON ec.ContractId = cpp.ContractId
LEFT JOIN (SELECT * FROM DWH.ContractPrice WHERE PriceComponentType = 'ResellerBasePremium') rb ON ec.ContractId = rb.ContractId
LEFT JOIN (SELECT * FROM DWH.ContractPrice WHERE PriceComponentType = 'ResellerBaseOdnPremium') rbo ON ec.ContractId = rbo.ContractId
WHERE 1=1
AND C.EAN = @EAN
AND YEAR(IUCR.StartDate) = @Year
AND iucr.AdvancePaymentIsCredi
ted = 0
ORDER BY iucr.StartDate

我尝试连接数据库并运行特定的 EAN。它显示了一个错误(可能是由于

DECLARE
变量),我无法找到表选择的解决方案,然后通过用户输入指定。在 SSMS 中运行正常但使用 DELCARE 运行的查询会出现以下错误:

Microsoft SQL:关键字“DECLARE”附近的语法不正确。 “)”附近的语法不正确。

所需的输出在 SQL 中看起来像这样,我希望在 powerbi 中也有相同的输出,但然后带有动态 EAN 和年份。

desired result

sql-server parameters powerbi ssms directquery
1个回答
0
投票

使用 Power BI 中的分页报表,您可以使用任意 TSQL 并对查询进行显式控制,这些查询仅在用户提供参数值时发送。

将 Power BI 交互式报表与 DirectQuery 结合使用,您将无法成功使用复杂查询。语义模型中的表应映射到基础数据库中的表。请参阅

DirectQuery 模型指南

© www.soinside.com 2019 - 2024. All rights reserved.