使用维度

已完成

生成星型架构时,你将拥有维度表和事实数据表。 事实数据表包含有关事件的信息,例如销售订单、发货日期、经销商和供应商。 维度表存储有关业务实体(例如产品或时间)的详细信息,并通过关系连接回事实数据表。

可以将层次结构用作帮助在维度表中查找详细信息的源。 这些层次结构通过数据中的自然分段形成。 例如,可以具有将日期按年、月、周和天分段的日期层次结构。 层次结构很有用,因为它们使你可以向下钻取数据的详细信息,而不是仅查看粗略的数据。

层次结构

生成视觉对象时,Power BI 会自动输入日期类型的值作为层次结构(如果该表尚未标记为日期表)。

层次结构示例的屏幕截图。

在前面的“日期”列中,日期按年、季度、月和日以详细程度越来越高的方式显示。 你也可以手动创建层次结构。

例如,考虑要创建“按类别和子类别划分总销售额”堆积条形图的情况。 可以通过在“Product”表中为类别和子类别创建层次结构来完成此任务。 若要创建层次结构,请转到 Power BI 上的“字段”窗格,然后右键单击要用于层次结构的列。 选择“新建层次结构”,如下图所示。

“Product”表中新层次结构的屏幕截图。

接下来,将子类别列拖放到创建的新层次结构中。 此列将作为层次结构上的子级添加。

嵌套了类别名称和子类别名称的类别名称层次结构的屏幕截图。

现在,可以通过在“可视化效果”窗格中选择堆积条形图来生成视觉对象。 在“轴”字段中添加“类别名称层次结构”,在“值”字段中添加“Total Sales”。

“轴”字段中具有“类别名称层次结构”,且“值”字段中具有“TotalSales”的屏幕截图。

你可以向下钻取视觉对象,以查看“类别”和“子类别”,具体取决于要查看的内容。 层次结构使你可以在单个视图中查看级别递增的数据。

一个视觉对象上的两个视图的屏幕截图。

现在,你已了解层次结构,接下来可以更进一步,查看父子层次结构及其在事实数据表和维度表之间的多个关系中的角色。

父子层次结构

在下面的示例中,数据库中有一个 Employee 表,该表告知有关员工、其经理和其 ID 的重要信息。 查看此表时,你会注意到“Roy F”在“Manager”列中重复出现多次。 如图所示,多个员工可以拥有相同的经理,这指示经理和员工之间的层次结构。

包含“员工 ID”、“员工”、“经理 ID”和“经理”列的员工表的屏幕截图。

“Manager”列确定层次结构,因此是父级,“子级”则是员工。 在本示例中,你希望能够看到此层次结构的所有级别。 Power BI 不会默认显示层次结构的所有级别,因此,你负责确保自己可以看到此层次结构的所有级别或“平展”它,以便可以看到更多数据粒度。

平展父子层次结构

基于顶级父级查看多个子级的过程称为“平展层次结构”。 在此过程中,你将在一个表中创建多个列,以在同一记录中显示父级到子级的层次结构路径。 你将使用 PATH()(一个简单的 DAX 函数,该函数为每个员工返回管理路径的文本版本)和 PATHITEM()(将此路径分隔为每个管理层次结构级别)。

重要

尚未介绍 DAX;但将在另一个模块中进行讨论。 本部分包括此函数是因为它可解释层次结构。 如果对于在此方案中使用 DAX 感到困惑,请参阅 DAX 模块,然后再返回本部分。

在表上,转到“建模”选项卡,然后选择“新建列”。 在显示的公式栏中,输入以下函数,该函数将创建员工和经理之间的文本路径。 此操作将在 DAX 中创建一个计算列。

Path = PATH(Employee[Employee ID], Employee[Manager ID])

用于平展父子层次结构的 DAX 量度值的屏幕截图。

员工和经理之间的完整路径在新列中显示,如以下屏幕截图所示。

Power BI 中的 PATH 函数表的屏幕截图。

如果查看 Roger M,则 ID 的路径为“1010 | 1011 | 1013”,这意味着 Roger M (ID 1013) 的上一个级别是他的经理 Pam H (ID 1011),而后者的上一个级别是她的经理 Roy F (ID 1010)。 在此行中,Roger M 在层次结构的底部(位于子级),而 Roy F 在层次结构的顶部(位于父级)。 将为每个员工创建此路径。 若要平展层次结构,可以使用 PATHITEM 函数分隔每个级别。

若要分别查看层次结构的全部三个级别,可以通过输入以下公式,以与之前相同的方式创建四个列。 将使用 PATHITEM 函数来检索位于层次结构相应级别中的值。

  • 级别 1 = PATHITEM(Employee[Path],1)
  • 级别 2 = PATHITEM(Employee[Path],2)
  • 级别 3 = PATHITEM(Employee[Path],3)

使用 PATHITEM 函数的屏幕截图。

完成后,请注意,现在拥有表中层次结构的每个级别。 Roy F 在层次结构的顶部,当你浏览级别 2-3 时,请注意,经理和员工相互映射。

平展父子层次结构的屏幕截图。

现在,可以像之前那样在“字段”窗格上创建层次结构。 右键单击“级别 1”,因为这是第一个层次结构级别,然后选择“新建层次结构”。然后,将“级别 2”和“级别 3”拖放到此层次结构中。

员工级别的新建层次结构的屏幕截图。

现在,你已成功平展层次结构,以便可以查看各个级别。

之前,你考虑了与事实数据表仅具有一个关系的维度。 但是,确实会发生维度表将与事实数据表具有多个关系的情况。

角色扮演维度

角色扮演维度具有与事实数据表的多个有效关系,这意味着同一维度可用于筛选数据的多个列或表。 因此,可以根据需要检索的信息来以不同方式筛选数据。 此主题很复杂,因此仅在本部分中介绍。 使用角色扮演维度需要复杂的 DAX 函数,这将在稍后的部分中进行讨论。

模型中角色扮演维度的屏幕截图。

上图显示了“Calendar”、“Sales”和“Order”表。 “Calendar”是维度表,而“Sales”和“Order”是事实数据表。 维度表具有两个关系:一个是与“Sales”的关系,另一个是与“Order”的关系。 本示例具有角色扮演维度,因为“Calendar”表可用于对“Sales”和“Order”中的数据进行分组。 如果要生成“Calendar”表引用“Sales”和“Order”表的视觉对象,则“Calendar”表将充当角色扮演维度。