定义数据粒度

已完成

数据粒度指数据中表示的详细信息,这意味着数据粒度越多,数据中的详细信息级别就越高。

对于所有数据分析师,数据粒度都是一个重要主题,而无论你使用的是何种 Power BI 工具。 定义正确的数据粒度可能对 Power BI 报表和视觉对象的性能及可用性产生重大影响。

定义数据粒度

考虑你的公司管理 1000 辆冷藏半挂车的方案。 每隔几分钟,每辆车都会使用 Microsoft Azure IoT 应用程序记录其当前温度。 此温度对你的组织而言很重要,因为如果制冷出现故障,可能让整车货物变坏,并导致数千美元的损失。 卡车如此之多,传感器也如此之多,每天都会生成大量数据。 你的报表用户不想通过仔细查看大量记录来查找他们特别感兴趣的记录。

如何更改数据的粒度以使语义模型更有用?

在此方案中,你可能希望通过使用每辆卡车的每日平均值来导入数据。 这种方法会将数据库中的记录减少到每天每辆车一条记录。 如果认为该方法足以跟踪成本和错误,则可以使用该数据粒度。 或者,你可以选择最后记录的温度,也可以只导入高于或低于正常温度范围的记录。 其中任何一种方法都会减少导入的记录总数,同时仍然提供全面而有价值的数据。

对于不同的方案,可以确定每周、每月或每季度进行定义的数据粒度。 一般而言,使用的记录越少,报表和视觉对象的运行速度就越快。 此方法可提高整个语义模型的刷新率,这可能意味着可以更频繁地刷新。

但是,该方法有一个缺点。 如果用户想深入了解每个事务,汇总粒度时将阻止他们执行此操作,这可能会对用户体验产生负面影响。 与报表用户协商数据粒度级别很重要,这样他们才能了解这些选择的含义。

更改数据粒度以在两个表之间生成关系

在 Power BI 中的表之间生成关系时,数据粒度也会产生影响。

例如,假设你正在为 Tailwind Traders 的销售团队生成报表。 需要使用“Calendar”、“Sales”和“Budget”表生成一段时间内的总销售额和预算的矩阵。 你会注意到,“Sales”表的基于时间的详细信息的最低级别为按天,例如 5/1/2020、6/7/2020 和 6/18/2020。 “Budget”表仅为月级别,例如,预算数据为 2020/5 和 2020/6。 这些表中有不同粒度,需要先对它们进行调节,然后才能在表之间建立关系。

下图显示当前语义模型。

如上图所示,“Budget”和“Calendar”之间的关系缺失。 因此,需要先创建此关系,然后才能生成视觉对象。 请注意,如果将“Calendar”表中的“Year”和“Month”列转换为新列,并在“Budget”表中进行相同的转换,则可以匹配“Calendar”表中“Date”列的格式。 然后,可以在两列之间建立关系。 要完成此任务,需要连接“Year”和“Month”列,然后更改格式。

在功能区上选择“转换数据”。 在“应用的步骤”的右窗格中,右键单击最后一步,然后选择“在以下项后面插入步骤”。

在主页功能区上的“添加列”下,选择“自定义列”。 输入以下公式,将“Year”和“Month”列连接,然后在列名之间添加短划线。

Column = Table.AddColumn(#"Renamed Columns", "Custom", each [Year] & "-" &[Month])

将数据类型更改为“日期”,然后重命名该列。 “Budget”表应类似于下图。

现在,可以在“Budget”和“Calendar”表之间创建关系。

创建表之间的关系

Power BI 会自动检测关系,但也可以转到“管理关系”>“新建”,然后在“Date”列上创建关系。 关系应类似于下图。

完成此任务后,可确保不同表之间的粒度相同。 现在,需要创建 DAX 度量值来计算“Total Sales”和“BudgetAmount”。 转到 Power BI Desktop 上的“数据”窗格,选择“新建度量值”,然后使用以下公式创建两个度量值:

TotalSales = SUM(Sales[Total Sales])
BudgetAmount = SUM (Budget[BudgetAmount])

在“可视化效果”窗格中选择表视觉对象,然后在“值”字段中输入这些度量值和“Date”。 现在,你已完成生成一段时间内的总销售额和预算矩阵的目标。