SSAS表格模型中的角色扮演维度

首先,我想解释一下角色扮演维度的真正含义。然后,我将说明您可以在SSAS表格模型中实施该方法的方式。

当您将维度多次链接到事实表以获取逻辑上独特的角色时,您正在使用角色扮演维度。

关键点是:

1.       您要将事实表多次链接到维。通过将事实表中的多个外键链接到维表中的单个键来定义关系。

2.       每个链接代表一个角色或概念

最受欢迎的角色扮演维度是DimDate和DimTime。是否要查看如何在Power BI中实现角色扮演维度,请单击 这里这里.

注意:该示例来自SQL Server 2012的Microsoft“ AdventureWorksDW”,可能与您自己的数据仓库设计不同。

例如,在销售系统中,您具有诸如FactInternetSales事实表之类的东西,该表具有指向DimDate或DimAddress的多个链接或关系,以实现不同的概念,例如“订购日期”,“装船日期”和“到期日期”。

如您所见,以上所有列显然表示日期的不同含义。在数据仓库设计中,您将看到以下内容:

角色扮演维度01

尽管在关系数据库层中这绝对可以,但是在表格模型中不允许这种关系,那么我们应该怎么做?

让我们看一下SQL Server数据工具(SSDT)中的表格模型,看看直接从SQL Server数据源导入模型时的外观。

·         打开SSDT并创建一个新的Analysis Services表格项目(我假设您知道如何在SSDT中创建一个新项目)

·         单击“从数据源导入”,然后选择“ Microsoft SQL服务器”,然后单击“下一步”

角色扮演维度02

·         输入服务器名称,然后从数据库列表中选择“ AdventureWorksDW”,然后单击“下一步”。

角色扮演维度03

·         输入模拟身份信息,然后单击“下一步”

角色扮演维度04

·         点击下一步”

角色扮演维度05

·         在这里,您可以选择需要导入表格模型的所有表和视图。在我们的示例中,我们只需要“ FactInternetSales”和“ DimDate”表。因此,勾选“ FactInternetSales”和“ DimDate”表,然后单击“完成”。

角色扮演维度06

·         关闭“表导入向导”

角色扮演维度07

·         切换到“图解视图”。如您所见,只有一个 活性 DimDate和FactInternetSales表之间的关系以及其他两个关系是 不活跃 这意味着你不能 将导入的DimDate用于需要覆盖“订购日期”,“装船日期”和“到期日期”的所有三个应用程序。这意味着您无法将切片和切块 单一措施 并同时具有所有角色,在我们的示例中为``订购日期'',``发货日期''和``到期日期''。我会在这篇文章的后面详细解释。

 

角色扮演维度08

解决方案:

1.       多次将DimDate导入表格模型:

在我们的示例中,我们需要将其导入三次以覆盖“订购日期”,“发货日期”和“到期日期”。

一种。       删除不活动的关系

角色扮演维度09

b。      双击DimDate表名称,将其重命名为用户友好名称。将其命名为“订购日期”。

角色扮演维度10

C。       为了使我们的示例更加不可测试,我创建了一个名为“订单日期详细信息”的新层次结构,其中包括“ CalendarYear”,“ EnglishMonthName”和“ FullDateAlternateKey”。 A还重命名了各列,以使用户对“年”,“月”和“全日期”更加友好。另外,我将DimDate表中的所有其他列设置为“从客户端工具隐藏”。我还将“ FactInternetSales”表重命名为“ Internet Sales”。

角色扮演维度11

d。       我们已经成功设置了“订单日期”日期,现在我们需要再次导入DimDate表以支持“发货日期”。为此,请从“模型”菜单中选择“现有连接…”

角色扮演维度12

e。      点击“打开”

角色扮演维度13

F。        点击下一步”

角色扮演维度14

G。       再次从列表中选择DimDate,然后单击“完成”。此过程将再次将DimDate表导入模型。然后,我们将其设置为涵盖“发货日期”。为此,请将“ Internet Sales”表中的“ ShipDateKey”链接到“ DimDate”表中的“ DateKey”。

角色扮演维度15

H。      现在,从 bg 但是,将“ DimDate”表命名为“ Ship Date”。再次重复上述部分,以将“到期日期”添加到模型中。

一世。         我们完成了,我们可以根据上述所有日期简单地切片和切块。

角色扮演维度16

j。        由于表格模型无法自动检测到度量,因此我们需要至少定义一个度量以测试解决方案。为此,切换到“网格视图”并选择“ Internet销售”,然后定义“总销售金额”的度量。为此,只需单击“ SalesAmount”列中的“ Measures”部分,然后单击Sigma(clip_image021)按钮。然后将创建的度量重命名为“总销售额”。

角色扮演维度17

k。       现在我们可以通过从“模型”菜单中选择“在Excel中分析”来测试解决方案

角色扮演维度18

 

l。         勾选“总销售额”和“到期日详细信息”层次结构。您可以深入到月份和日期级别。

角色扮演维度19

    您可以对其他每个日期执行相同的操作,或者如果需要此报告,可以合并日期。

角色扮演维度20

2.       在数据库中创建几个SQL Server视图:

在我们的示例中,在“ AdventureWorksDW”数据库中,我们为每个角色(订单日期,发货日期,到期日期)创建三个视图。我们在现有DimDate之上创建这些视图,它们的名称类似于三个不同的角色。然后,我们将这些视图导入表格模型,并使用适当的外键将每个视图链接到“ Internet Sales”表。由于整个过程与我们在第一个解决方案中所做的相同,因此我不再赘述。因此,归根结底,我们在数据库中将具有以下内容:

 

角色扮演维度21

现在,您可以将上述视图导入表格中,而不必多次导入整个DimDate表。这将减小数据库的大小,并且更容易理解。但是,此解决方案与第一个解决方案非常相似。基本上,架构是相同的,但是,我们管理表的方式略有不同。

 

角色扮演维度22

和在Excel中相同的结果:

角色扮演维度23

3.制定若干措施: 

第三种解决方案可能是大多数用例的最佳解决方案,与我们迄今为止所做的完全相反。好吧,我可以说架构是完全不同的。在此解决方案中,我们 不要 除掉 不活跃 人际关系 and 此外,我们 不要 导入多个“日期”维度副本。

SSAS表格中的角色扮演维度

在这种情况下,我们应该为每个角色创建新的措施,这意味着我们在示例中将采取以下三个措施:

1-按订单日期的总销售额

2-按发货日期的总销售额

3-按截止日期的总销售额

在此解决方案中,我们正在做的是设法使用与角色相关的关系。为此,我们只需要执行数据模型来激活我们需要的关系即可。我们可以使用以下方式轻松在DAX中建立活动和不活动的关系 用户名 功能。 用户名函数,首先禁用所有活动关系,然后激活所需的 关系。 用户名函数可以用作将过滤器作为参数的其他函数的一部分。这意味着我们总是将USERELATIONSHIP用作CALCULATE函数(或其他接受过滤器参数的函数)的一部分。因此,以上三种措施将如下所示:

1- 订单日期的总销售金额:= SUM(‘互联网销售” [销售金额])

2- 按发货日期的总销售金额:= CALCULATE(SUM(‘互联网销售” [销售金额]), 用户名(‘Date'[DateKey], ‘互联网销售” [ShipDateKey])

3- 截止日期的总销售金额:= CALCULATE(SUM(‘互联网销售” [销售金额]), 用户名(‘Date'[DateKey], ‘互联网销售” [DueDateKey]))

如您所见,第一个措施是’t使用了USERELATIONSHIP。原因是度量使用模型中默认为活动的关系,因此我们不’无需再次执行。另一方面,其他两个措施正在强制措施中使用相关关系。

使用度量管理SSAS表格中的角色扮演维度

最后,这是在Excel中分析模型时的外观:

使用Excel中的度量值管理SSAS表格中的角色扮演维度

优点和缺点:

上面讨论的三个解决方案中的每一个都有优点和缺点。

前两个解决方案的优点,导入了多个Date维度:

1-如果您的模型是小型模型,则开发模型会更快

2-最终用户拥有不同的“日期”选项会更加容易。每个角色在可视化层中都将具有单独的切片器。

3-您只能使用一种度量并将其切成薄片并分别由不同的角色切成小块

缺点:

1-如果您的模型不小并且您要扮演的角色扮演维度要多得多,那么您’最终会多次导入这些尺寸,效率不高

2-在整个模型中,角色扮演维度各不相同,这对于最终用户确实会造成混淆,您真的需要花费更多的时间/金钱来培训最终用户

3-您消耗了更多的存储和内存,这又不是那么有效 

最后一个解决方案的优点,可采取多种措施:

1-您可以并排使用所有角色,因为您实际上对每个角色都有单独的衡量标准

2–您没有导入角色的多个副本,例如,您只有一个“日期”维度,可用于对整个模型中的所有度量进行切片和切块

3-在存储和内存消耗方面更高效

4-当你不穿衣服时,你的模特会更整洁’在模型中扮演多个角色

缺点:

1-在具有许多不同角色的大型模型中,创建许多不同的措施来支持不同的角色既费时,又难以维护

2-小节名称变长

3-对于最终用户而言,拥有许多看起来非常相似的不同度量可能会使您感到困惑 

全部做完!

 

有什么想法吗?在这里与我们分享:

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.