如何在SQL查询中引用Power BI度量?
长时间侦听器,第一次调用…:-) 所以我是Power BI的新手,我希望我能让它发挥作用。我在下面导入了SQL查询:如何在SQL查询中引用Power BI度量?,sql,sql-server,powerbi,Sql,Sql Server,Powerbi,长时间侦听器,第一次调用…:-) 所以我是Power BI的新手,我希望我能让它发挥作用。我在下面导入了SQL查询: DECLARE @RangeStart as varchar(19), @RangeEnd as varchar(19), @ReportStart as date, @ReportEnd as date SET @RangeStart = '2020-01-01 00:00:00' SET @RangeEnd = '2020-05-31 00
DECLARE
@RangeStart as varchar(19),
@RangeEnd as varchar(19),
@ReportStart as date,
@ReportEnd as date
SET @RangeStart = '2020-01-01 00:00:00'
SET @RangeEnd = '2020-05-31 00:00:00'
SET @ReportStart = CAST(@RangeStart as datetime)
SET @ReportEnd = CAST(@RangeEnd as datetime)
SELECT COUNT(screen_client_id) AS SarpyYtdScreenings
FROM dbo.screen
WHERE (screen_date BETWEEN @ReportStart AND @ReportEnd)
因此,从Power Query Editor,它将其“转换”为:
到目前为止,一切顺利。但是我创建了一个名为DateParameters的“表”,其中有些度量值就像用户要使用的参数一样,比如“EndDate”和“FirstDayOfYear”。但我想以某种方式将这些度量传递到我的SQL查询中。我找到了一个网站,上面说我可以用这个度量值替换文字2020-01-01 00:00:00,但我无法让它工作。我试过:
let
Source = Sql.Database("freedom1a", "pretrial", [Query="declare #(lf)@RangeStart as varchar(19),#(lf)@RangeEnd as varchar(19),#(lf)@ReportStart as date,#(lf)@ReportEnd as date#(lf)SET @RangeStart = '"&DateParameters[FirstDayOfYear]&"'#(lf)SET @RangeEnd = '2020-05-31 00:00:00'#(lf)SET @ReportStart = CAST(@RangeStart as datetime)#(lf)SET @ReportEnd = CAST(@RangeEnd as datetime)#(lf)SELECT COUNT(screen_client_id) AS SarpyYtdScreenings#(lf)FROM dbo.screen#(lf)WHERE (screen_date BETWEEN @ReportStart AND @ReportEnd)"])
in
Source
…这几乎奏效了。当我开始键入DateParameters时,它知道我想要哪个表,但无论我引用该表中的哪个度量值,它都无法识别它。除非我的语法错了。我还尝试了DateParameters.FirstDayOfYear,但它也不喜欢这样。这能做到吗?也许它只识别表列而不识别表度量?我是否需要创建一个只保存度量值的列?一定有办法做到这一点
非常感谢任何人能提供的任何帮助!谢谢
Darwin您不能在查询编辑器中使用DAX度量值或使用DAX创建的任何表/列
你有几个选择
假设未使用DirectQuery,则模型包含所有数据,用户选择的参数将应用于Power BI中存储的数据,而不是数据导入。您将使用DAX限制来自完整数据集的报告数据。感谢您的输入,Alexis。对于#1和#2,您推荐哪一种?如果您需要的整个数据集不是太大,则导入允许更大的灵活性()。
let
Source = Sql.Database("freedom1a", "pretrial", [Query="declare #(lf)@RangeStart as varchar(19),#(lf)@RangeEnd as varchar(19),#(lf)@ReportStart as date,#(lf)@ReportEnd as date#(lf)SET @RangeStart = '"&DateParameters[FirstDayOfYear]&"'#(lf)SET @RangeEnd = '2020-05-31 00:00:00'#(lf)SET @ReportStart = CAST(@RangeStart as datetime)#(lf)SET @ReportEnd = CAST(@RangeEnd as datetime)#(lf)SELECT COUNT(screen_client_id) AS SarpyYtdScreenings#(lf)FROM dbo.screen#(lf)WHERE (screen_date BETWEEN @ReportStart AND @ReportEnd)"])
in
Source