快速技巧,Power BI Desktop,查询参数,第4部分,将Power Query参数值传递到SQL 服务器存储过程

我过去写过3篇关于查询参数的博文。

这是快速提示形式的第四篇。这是场景。我的一位客户要求从SQL 服务器的存储过程中获取数据。她需要将值从“查询参数”传递回SQL 服务器,并在Power BI中获得结果。

解决方案有点简单。我在中创建了一个简单的存储过程 AdventureWorksDW2019 如下:

CREATE PROCEDURE SP_Sales_by_Date 
	@date 在t
AS
BEGIN
	SET NOCOUNT ON;
	SELECT *
	FROM [dbo].[FactInternetSales]
	WHERE OrderDateKey >= @date
END
GO

在Power BI Desktop中,从SQL 服务器获取数据,然后:

  • 输入 服务器 名称
  • 输入 数据库 名称
  • 选择 数据连接模式
  • 展开 高级选项
  • 输入一个 的SQL语句 调用存储过程,如下所示:
exec SP_Sales_by_Date @date = 20140101
  • 点击确定
使用Power BI Desktop中的SQL语句从SQL 服务器获取数据
  • 请点击 转换资料
在Power BI Desktop中转换数据

现在我们需要创建一个查询参数。在我的示例中,我创建了一个 日期键 小数 数据类型:

在Power BI Desktop中创建新的查询参数
继续阅读 “快速技巧,Power BI Desktop,查询参数,第4部分,将Power Query参数值传递到SQL 服务器存储过程”

快速提示: 时间 Dimension with 时间 Bands at Seconds Granularity 在 Power BI 和 SSAS表格

时间 Dimension with 时间 Bands at Seconds Granularity 在 Power BI 和 SSAS表格

过去我也写过其他有关此主题的文章,您可以找到它们 这里 这里。在第一篇文章中,我解释了如何创建“Time”时间带的维度 分钟 粒度。然后,我的一位客户要求“Time”几秒钟内的尺寸,这鼓励了我写第二篇博客文章。在第二篇博文中,虽然我没有’t做时间带,所以我在这里写第三篇文章,这是第二篇文章支持5分钟,15分钟,30分钟,45分钟和60分钟的时间带的变体。“Time”尺寸降至秒。在这篇快速文章中,我直接跳到重点,向您展示如何生成“Time”维度以三种不同的方式,即在SQL 服务器中使用T-SQL,使用Power Query(M)和DAX。然后是这里:

时间 Dimension at Second Grain with 功率查询 (M) Supporting 时间 Bands:

在查询编辑器中复制/粘贴以下代码’s Advanced Editor to generate 时间 dimension 在 功率查询:

let
Source = Table.FromList({1..86400}, Splitter.SplitByNothing()),
    #"Renamed Columns" = Table.RenameColumns(Source,{{"Column1", "ID"}}),
    #"时间 Column Added" = Table.AddColumn(#"Renamed Columns", "时间", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0,0,0,[ID]))),
    #"Hour Added" = Table.AddColumn(#"时间 Column Added", "Hour", 每 时间.Hour([Time])),
    #"Minute Added" = Table.AddColumn(#"Hour Added", "Minute", 每 时间.Minute([Time])),
    #"5 Min Band Added" = Table.AddColumn(#"Minute Added", "5 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/5) * 5, 0))  +  #duration(0, 0, 5, 0)),
    #"15 Min Band Added" = Table.AddColumn(#"5 Min Band Added", "15 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/15) * 15, 0))  +  #duration(0, 0, 15, 0)),
    #"30 Min Band Added" = Table.AddColumn(#"15 Min Band Added", "30 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/30) * 30, 0))  +  #duration(0, 0, 30, 0)),
    #"45 Min Band Added" = Table.AddColumn(#"30 Min Band Added", "45 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/45) * 45, 0))  +  #duration(0, 0, 45, 0)),
    #"60 Min Band Added" = Table.AddColumn(#"45 Min Band Added", "60 Min Band", 每 时间.From(#datetime(1970,1,1,0,0,0) + #duration(0, 0, Number.RoundDown(Time.Minute([Time])/60) * 60, 0))  +  #duration(0, 0, 60, 0)),
    #"Removed Other Columns" = Table.SelectColumns(#"60 Min Band Added",{"时间", "Hour", "Minute", "5 Min Band", "15 Min Band", "30 Min Band", "45 Min Band", "60 Min Band"}),
    #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"时间", type time}, {"Hour", 在t64.Type}, {"Minute", 在t64.Type}, {"5 Min Band", type time}, {"15 Min Band", type time}, {"30 Min Band", type time}, {"45 Min Band", type time}, {"60 Min Band", type time}})
in
#"Changed Type"
继续阅读 “Quick Tips: 时间 Dimension with 时间 Bands at Seconds Granularity 在 Power BI 和 SSAS表格”

快速提示:如何从Power Query中的其他查询中按另一列过滤一列

从Power Query中的不同查询中按列过滤列

不久前,我拜访了一个客户,询问他们是否可以按Power BI中另一个查询的列来过滤查询数据。我当然可以。在这篇文章中,我解释了如何在Power Query中实现。关键是要知道如何引用查询以及如何在Power Query中引用该查询的列。当您有一个可从Power Query中每个受支持的数据源中获取的查找表,并且想要按查找查询中的相关列过滤另一个查询的结果时,这很有用。那样的话’会有一种动态过滤。因此,每当您刷新了模型(如果新记录已更改或添加到查找查询的源中)时,表将在Power Query的过滤步骤中自动包括新值。

引用查询

这很简单,您只需要使用查询的名称。如果查询名称包含特殊字符(例如空格),则需要用数字符号和双引号将其引起来,例如 #”QUERY_NAME”。因此,如果我要引用另一个查询,请在一个新的空白查询中使用Power Query(M)脚本,如下所示:

let
    Source = Product
in
    Source

或类似的东西

let
    Source = #"Product Category"
in
    Source

引用列

引用列也很简单。当您引用一列时,您需要在前面提到引用查询名称以及括号中的列名称。因此,格式将如下所示:”QUERY_NAME”[COLUMN_NAME]。结果是该特定列的值的列表。

let
    Source = #"Product Category"[Product Category Name]
in
    Source
从另一个查询中引用列
继续阅读 “快速提示:如何从Power Query中的其他查询中按另一列过滤一列”

快速提示: 时间 Dimension with Granularity of Seconds 在 Power BI 和 Analysis Services Tabular Models

快速提示: 时间 Dimension with Granularity of Seconds 在 Power BI 和 Analysis Services Tabular Models
摄影者 马库斯·斯皮克(Markus Spiske)

我前阵子发表的文章 I showed different methods of creating 时间 dimension 在 Power BI 和 Tabular models. The 时间 dimension I explained was 在 Minutes. 在 this post I show you simple way to create 时间 dimension supporting Seconds. As this is a quick tip, I only show you how to get the 时间 和 ID columns 在 the 时间 dimension. If you need to add time bands (time buckets) 查看此以获取更多详细信息.

时间 Dimension 在 Seconds Grain with 功率查询 (M):

Copy/paste the code below 在 Advanced Editor to generate 时间 dimension 在 功率查询:

let
Source = Table.FromList({1..86400}, Splitter.SplitByNothing()),
#"Renamed Columns" = Table.RenameColumns(Source,{{"Column1", "ID"}}),
#"时间 Column Added" = Table.AddColumn(#"Renamed Columns", "时间", 每 时间.From(#datetime(1970,1,1,0,0,0)+#duration(0,0,0,[ID]))),
#"Changed Type" = Table.TransformColumnTypes(#"时间 Column Added",{{"ID", 在t64.Type}, {"时间", type time}})
in
#"Changed Type" 
时间 Dimension 在 功率查询

时间 Dimension 在 Seconds Grain with 达克斯:

在Power BI或SSAS表格模型的新计算表中运行以下DAX表达式:

时间 在 达克斯 = ADDCOLUMNS(
                       通用系列(1, 86400, 1)
                        , "时间", TIME(0, 0, 0) + [Value]/86400
                        )
时间 Dimension 在 Seconds Level with 达克斯
继续阅读 “Quick Tips: 时间 Dimension with Granularity of Seconds 在 Power BI 和 Analysis Services Tabular Models”