如何克服Power BI,Power View和Power 地图中的地图相关问题

Power BI和Excel中最强大的功能之一就是支持地理空间可视化。在Excel中,我们可以在Power View中使用地图可视化,也可以直接使用Power 地图。如您所知,在Power BI中,有两个内置的可视化来支持地理坐标数据,即Map和Filled map。如果您具有必应地图支持的足够数据,它们可以很好地工作。但是,Power BI和Excel中的地图可视化存在一些问题。在这篇文章中,我将解决一些我自己遇到的问题,并将提供针对这些问题的解决方案。由于Power BI中的“填充地图”和“地图”可视化非常相似,因此我在本文中的重点将放在“地图”可视化上。我的意图不是对Power View和Power 地图进行过多的解释,因此我在本文中的重点将放在Power BI上,而不是其他两个方面。

要求

要试验我在这篇文章中解释的所有内容,您需要具备以下条件:

  • 新的SQL Server示例,WideWorldImportersDW(WWI)。你可以下载 这里
  • 最新版本 Power BI桌面 (当前版本为2.35.4399.381 64位(2016年5月))
  • 电子表格 2016或Excel 2013

如果您使用Excel 2016,则需要 开启Power View.

如果您想了解更多信息,请查看此 电子表格 2016中的BI功能.

在Power BI中获取数据

  • 打开Power BI桌面
  • 从SQL Server数据库获取数据
  • 选择Fact.Sales和Dimension.City,然后加载数据

Power BI桌面

Power BI中的地图问题

Power BI中的错误城市

  • 展开“维度城市”表
  • 选择“城市”列,然后将其数据类别更改为城市(数据类别位于功能区的“建模”选项卡上)

Power BI桌面数据类别

  • 将地图视觉效果放入页面
  • 将“城市”放在位置上
  • 在尺寸上加上“不含税总额”

Power BI桌面地图

如您所见,销售分布在不同的国家/地区,但这并不是很安静。

  • 在页面上放置切片器,然后在切片器上放置“国家/地区”
  • 点击“美国”以过滤地图

Power BI桌面切片器

糟糕!这不是安静的权利。发生的是Bing 地图 Engine混淆了城市名称,以便显示美国以外的同名城市,就像新西兰的新普利茅斯一样,但是数据源中的新普利茅斯是美国爱达荷州的新普利茅斯。

继续阅读 “如何克服Power BI,Power View和Power 地图中的地图相关问题”

Power BI桌面查询参数,第2部分,动态数据屏蔽和查询参数

Power BI桌面和SQL Server动态数据屏蔽

如我所承诺 我以前的帖子,在本文中,我将向您展示如何在SQL Server 2016动态数据屏蔽(DDM)之上使用查询参数来利用Power BI Desktop模型。我还将非常简要地说明如何从AdventureWorksDW2016CTP3数据库的DimCustomer表上启用DDM。然后,我们将在DimCustomer表顶部创建带有查询参数的Power BI Desktop模型。您还将学习如何创建Power BI模板,以便将来在部署时使用它。

注意: 如果您想了解有关使用列表输出的信息 Power BI Desktop的“查询参数”中的内容可以看一下这些系列的下一篇文章“Power BI桌面查询参数,第3部分,列表输出“.

用例

在里面 以前的帖子 我解释了如何使用查询参数创建动态数据源。您还学习了如何在过滤器行中使用查询参数。在这篇文章中,您将学习:

  1. 在SQL Server动态数据屏蔽(DDM)之上使用查询参数
  2. Power BI模板中的查询参数

要求

就像 Power BI查询参数的第1部分,您需要满足以下要求才能关注此职位:

  1. 最新版本 Power BI桌面 (版本:2.34.4372.322 64位(2016年4月)或更高版本)
  2. SQL服务器 2016(您可以免费下载SQL Server 2016 Developer Edition)
  3. AdventureWorksDW

定义

我不会提供有关DDM的太多详细信息,因为您会发现很多信息 这里。但是,为了让您稍微熟悉一下动态数据屏蔽,我将对其进行简要说明。

动态数据屏蔽(DDM)

动态数据屏蔽(DDM)是SQL Server 2016和Azure SQL数据库中可用的一项新功能。 DDM基本上是一种防止敏感数据暴露给非特权用户的方法。它是一项数据保护功能,可将敏感数据隐藏在查询的结果集中。您可以轻松地在现有表上启用DDM,也可以在要创建的新表上启用DDM。假设您的零售数据库中有两组用户。销售人员和销售经理。您有一张客户表,在此帖子中,它是AdventureWorksDW2016CTP3的DimCustomer。该表包含敏感数据,例如客户的电子邮件地址,电话号码及其居住地址。根据您的公司政策,“销售人员”组的成员应该不能查看敏感数据,但是应该可以查看所有其他数据。另一方面,“销售经理”组的成员可以查看所有客户的数据。为了防止销售人员看到敏感数据,您可以在DimCustomer表的敏感列上启用动态数据屏蔽。在这种情况下,当销售人员查询表时,他/她将看到被屏蔽的数据。例如,他看到 [email protected] 而不是 [email protected].

在某些列上使用DDM创建表

很简单,只需将“屏蔽方式(功能=“屏蔽功能”)列定义中的“”。所以它应该看起来像这样:

创建表Table_Name  (ID 整型 IDENTITY主键,   Masked_Column1 varchar(100)屏蔽有(FUNCTION =‘Mask_Function’),   Masked_Column2 varchar(100)屏蔽有(FUNCTION =‘Mask_Function’),

 

)

更改现有表并在所需列上启用DDM

如您所料,您必须使用“更改表“ 然后 ”更改列”。您的T-SQL应该如下所示:

更改表 Table_Name 更改列 Column_Name1添加了屏蔽功能(功能=“屏蔽功能”);

更改表 Table_Name

更改列 Column_Name2添加掩码(功能=“掩码功能”);

有关更多信息,请参阅 MSDN.

Power BI模板

模板基本上是Power BI文件,它代表预定义Power BI Desktop的实例,该实例包括数据模型,报表,查询和参数的所有定义,但不包括任何数据。创建Power BI模板是简化现有模型部署的好方法。创建模板非常容易,您只需单击文件-> Export –>Power BI模板。我们将通过本文更详细地介绍这一点。

情境

要求您对客户的数据(AdventureWorksDW2016CTP3数据库上的DimCustomer)实施更高级别的安全性,以便只有特权用户才能看到客户的电子邮件,电话号码和居住地址。特权用户是“ SalesManager”数据库角色的所有成员。还要求您阻止“ SalesPerson”数据库角色查看敏感数据。但是,“ SalesManager”和“ SalesPerson”数据库角色的所有成员都可以查询DimCustomer表。用户不应具有SQL Server登录名。

继续阅读 “Power BI桌面查询参数,第2部分,动态数据屏蔽和查询参数”

使用T-SQL查询SSRS报告定义

是否要在其报告定义中包含所有使用表格的报告?

您是否正在寻找具有所需参数名称的报告?

您是否编写了SQL视图或存储过程的新版本,并且需要修改在该对象版本之上运行的所有报告,但是您不知道这些报告是什么?

您是否修改了SSAS对象,并且需要知道哪些报告可能会受到影响?

如果您有上述任何问题,或者总的来说,您需要检索所有在报告定义中具有特定字符串的SSRS报告,只需连接到包含您的SQL Server实例   报表服务器 通过SSMS数据库,只需执行以下SQL脚本即可:

选择 C.名称

       , 兑换(NVARCHAR(最大),兑换(XML格式,兑换(VARBINARY(最大),C.内容))) REPORTXML

  报表服务器.DBO.目录 C

哪里  C.内容 空值

              C.类型 = 2

          –AND  C.NAME喜欢‘%REPORT_NAME%’

     兑换(NVARCHAR(最大),兑换(XML格式,兑换(VARBINARY(最大),C.内容))) 喜欢 ‘%DESIRED_STRING%’

请享用!

不使用游标的批索引重建

今天,我与一位客户遇到了多维数据集处理性能问题。因此,我开始了逐步的故障排除,包括优化命名查询。在某些情况下,命名查询实际上是在从源数据仓库中查询某些SQL视图。

毕竟,我创建了约35个新索引,并且需要证明所有这些索引都已真正使用。在逐步的故障排除过程中,我多次处理有问题的多维数据集时,似乎所有这些索引都已使用。

但是,我知道我创建了一些新索引涵盖的索引,并且这些索引赢得了’t be used.

我需要重建所有索引,但是,从SSMS UI重建所有这些索引会很痛苦。因此,我需要进行批量索引重建。

所以我用谷歌搜索’我们已经找到了一些实际上可以完成任务的脚本,但是它们都使用了游标。可悲的是,我讨厌游标,所以它们是我书中的最后一项。的确,我’直到它永远不会使用游标’绝对必要,没有其他更好的选择。

因此,我决定以自己的方式进行操作,并编写了以下脚本。我以为我’d很乐意与大家分享它,因为它也可能对某些人有所帮助。

宣布 @ix varchar(最高), @tbl varchar(最高), @计数器 整型, @CustomIx Varchar(最高)

宣布 @表 (ID 整型, tbl varchar(最高), ix varchar(最高))

@CustomIx = ‘YOUR_INDEX_NAME_STARS_WITH’ –自定义索引名称将类似于MY_IX _ ***

进入 @表 (ID, tbl, ix)

选择   ROW_NUMBER() 过度 (订购 通过 ix.[名称]) ID

           , OBJECT_NAME(ixstat.[OBJECT_ID]) [对象名称]

         , ix.[名称] [索引名称]

     系统.DM_DB_INDEX_USAGE_STATS ixstat

         加入 系统.索引 ix

           ix.[OBJECT_ID] = ixstat.[OBJECT_ID]

              ix.INDEX_ID = ixstat.INDEX_ID

哪里    对象属性(ixstat.[OBJECT_ID],‘IsUserTable’) = 1

            ix.[名称] 喜欢 @CustomIx+‘%’

 

@计数器= (选择 最高(ID) @表)

 

@计数器 >=1

开始

    组 @ix = (选择 ix @表 哪里 ID = @计数器)

    组 @tbl = (选择 tbl @表 哪里 ID = @计数器)

    执行(‘ALTER INDEX ‘+@ix+‘ 上 [dbo].[‘+@tbl+‘]重建分区=全部‘)

    打印 @tbl + ‘.’ +  @ix + ‘ Rebuild successful’

    组 @计数器-=1

结束

继续阅读 “不使用游标的批索引重建”