准备工作
- 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
- 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
- 在屏幕左上角,点击开始实验即可开始
Customize native derived tables using derived columns
/ 50
Customize native derived tables using filters
/ 50
Looker 是 Google Cloud 中的现代化数据平台,支持您以交互方式分析和可视化数据。您可以使用 Looker 展开深入数据分析、整合来自不同数据源的分析洞见,构建切实可行的数据驱动型工作流,以及创建自定义数据应用。
在本实验中,您将学习如何利用原生派生表来回答复杂问题、处理高级应用场景,以及使用内置参数自定义派生表。
您将学习如何:
为取得最佳学习成效,您必须熟悉 LookML,另外建议您先完成了解如何在 Looker 中使用 LookML 这一技能徽章课程,然后再开始本实验。
请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。
此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。
为完成此实验,您需要:
准备就绪时,点击开始实验。
此时您会看到“实验详细信息”窗格,其中包含您在进行该实验时必须使用的临时凭据。
如果该实验需要付费,系统会打开一个弹出式窗口供您选择支付方式。
请注意,“实验详细信息”窗格中会显示实验凭据。您需要使用这些凭据来登录 Looker 实例以进行该实验。
点击打开 Looker。
在电子邮件地址和密码字段中输入提供的用户名和密码。
用户名:
密码:
点击登录。
登录成功后,您会看到用于本实验的 Looker 实例。
原生派生表是派生表的一种类型,其功能与编写的 SQL 查询相同,但区别在于使用 LookML 语言原生表示。
为什么要使用原生派生表?回想您在上一个实验中创建的 user_facts SQL 派生表。您将订单 ID 的 COUNT 结果命名为 lifetime_order_count,并将 sale_price 的 SUM 结果命名为 lifetime_revenue。您或许还没注意到,这些汇总结果已经以度量的形式纳入到您的模型中了!您的 order_items 视图已经包含 order_count 和 total_sales。
原生派生表的好处在于,它们体现了 LookML 的核心原则,即可重用性。它们允许您继承已有的维度、度量,甚至是“探索”和联接逻辑。由于您尽可能减少了“硬编码”的数据库引用数量,因此从长远来看,这能大幅度降低模型的维护难度。
在本部分中,您将创建一个名为 brand_order_facts 的原生派生表,其中包含一个派生列,用于按总收入为品牌排名,并且可以使用动态日期范围和/或用户输入进行过滤。您还将创建新的维度,用于将行标记为前 5 大品牌或非前 5 大品牌(即,将排名第 6 位及以后的所有品牌归入“6) Other”这一个品牌名称)。
首先,在 Looker 界面的左下方,点击切换按钮进入开发模式。
在 Looker 导航菜单中,点击探索。
在 E-Commerce Training(电子商务培训)下,点击 Order Items。
点击 Inventory Items 视图下的 Product Brand 维度。
点击 Order Items 视图下的 Total Revenue 度量。
点击运行。
点击运行(位于页面右上角)旁边的“设置”齿轮图标 (),然后选择获取 LookML。
切换到派生表,点击框中的 LookML 代码并将其复制到剪贴板。
前往 Looker IDE(开发 > qwiklabs-ecommerce),点击“文件浏览器”旁的加号 (+) 图标,然后选择创建视图。
将新视图命名为 brand_order_facts,然后点击创建。
点击 brand_order_facts.view,并将其拖放到 views 文件夹下。
清除所有自动生成的示例代码,然后粘贴复制自“探索”的代码。别忘了将自动生成的视图名称修正为 brand_order_facts。您的视图应如下所示:
至此,您已经为原生派生表奠定了基础。下一个任务是对品牌进行排名,这在大多数 SQL 方言中都可以通过 ROW_NUMBER() 函数实现。
为此,您需要向原生派生表的 explore_source 添加 derived_column。在原生派生表中,您可以使用 derived_column,指定由 explore_source 参数指定的“探索”中尚不存在的列。在本例中,您将这个列命名为 brand_rank。
column: total_revenue {} 定义下,首先定义 brand_rank 派生列:只要创建派生列,就需要为其添加维度。这与常规数据库表中的列相同;此类列在 LookML 中需要表示为维度。您是否注意到,自动生成的维度不带 sql 参数?原因在于,如果您未为维度指定 sql 参数,Looker 会假定该维度应指向底层数据中与该维度完全同名的列。如果您愿意,可以在项目的其他方面将利用这一原理,将其作为一种实用的快捷方法,但一般来说,更好的做法是尽可能明确指定。在这种情况下,您至少应该指定类型。否则 Looker 默认会使用字符串类型,而这并不是您想要的。
product_brand 维度正上方的位置,添加以下代码:您的新视图现在应如下所示:
点击保存更改。
在同一页面中,点击 model 文件夹中的 training_ecommerce.model 文件,修改其内容。
找到 explore: order_items 定义。
在 explore: order_items 定义中,通过指定以下内容添加一个新的 brand_order_facts 联接:
点击保存更改。
您的模型文件现在应如下所示:
现在,您已将 brand_order_facts 视图联接到“探索”,接下来请前往 Order Items 的“探索”页面。
在 Brand Order Facts 视图下,选择 Brand Rank、Product Brand 和 Total Revenue 维度。
将“行数上限”设置为 10。
点击运行。结果应如下所示:
至此,一切都很顺利。但如果您的业务用户希望品牌名称显示为“1) Example Brand”这样的形式,而不仅仅是“Example Brand”,该怎么办?如何实现这一目标?在这种情况下,您可以创建一个维度,将其他两个维度值串联在一起。
返回到 brand_order_facts 视图。
创建另一个名为 brand_rank_concat 的维度,用于串联品牌排名和产品品牌:
brand_rank,因为业务用户可能只需要在新的 brand_rank_concat 中查找排名编号,不需要再使用一个单独的排名字段:brand_rank_concat 添加标签,使其更便于用户理解。使用“Brand Name”标签:在最后一步中,您需要将排名第 6 位及更靠后的所有品牌归入“Other”类别。为此,您首先要创建一个起到过渡作用的维度,用于评估一个品牌的排名是否在前 5 位。
brand_rank_top_5 的新维度,并使用以下参数:brand_rank_grouped 的新维度,并使用以下代码将 brand_rank_top_5 整合到其中:现在,您的视图应如下图所示:
返回到 Order Items 的“探索”页面。
在 Brand Order Facts 视图下,选择 Brand Name Grouped 维度。
选择 Order Items 视图下的 Total Revenue 度量。将“行数上限”设置为 10。
点击运行。
确保 Brand Name Grouped 列按先后顺序排列,然后点击“可视化图表”标签页下的饼图。
验证您的可视化图表类似下图:
点击运行(页面右上角)旁的“设置”齿轮图标 (),然后选择保存 > 作为 Look。
将此 Look 命名为 Ranked Brand Revenue。
点击保存。
返回到 brand_order_facts 视图。
点击验证 LookML,然后点击提交更改并推送。
添加提交消息,然后点击提交。
最后,点击部署到生产环境。
太棒了!希望这有助于您了解这种做法的实用性:将应用场景或所需逻辑分解为单独的基本维度,随后可以组合多个基本维度,或是在此基础上进行构建,以回答特定业务问题。在 LookML 开发最佳实践中,经常会看到许多类似的隐藏过渡性维度和度量。
点击检查我的进度,验证您已完成上述任务。
现在,假设商家只关心过去 365 天内提交的近期订单。或许在几年前,这些排名前 5 位的品牌还非常受欢迎,但随着趋势变化,它们在过去一年中的排名可能发生了变化。
在本部分中,您将了解到 LookML 中可用于原生派生表的各类过滤条件。可以利用 filters 参数来对派生表应用过滤条件,效果类似于过滤后的度量。它会添加 WHERE 或 HAVING 子句。
首先返回到 brand_order_facts 视图。
在 derived_column 定义下添加一个过滤条件,对原生派生表进行限制,使其仅包含过去 365 天内创建的订单:
返回到 Order Items“探索”。
在 Brand Order Facts 视图下,选择 Brand Name Grouped。
选择 Order Items 视图下的 Total Revenue 测量。
点击运行。
在数据栏中点击 SQL 标签页,查看过滤条件在查询中的使用方式。
您添加了针对 Ordered Items Created Date 的过滤条件,仅查看过去 365 天内的订单,因此 WHERE 条件仅在我们所说的外层查询中生成。这是任何维度过滤条件的默认行为;您无法指示它进入派生表的通用表表达式,也无法使外层 WHERE“向下渗透”到内层查询中。此时向 NDT 本身添加过滤条件就很有用了。
如果商家发现,将数据限制为仅包含过去 365 天内的订单过于严格,该怎么办?有时,用户可能希望分析过去两年间的排名。使用 filters: [order_items.created_date: "365 days"] 时,您将对时间范围进行硬编码。
在此类情况下,bind_filters 可能比单纯的过滤条件更有用。您可以指明要从外层“探索”中“向下渗透”到原生派生表内层查询的字段 (from_field),以及该字段应映射到的原生派生表字段 (to_field)。在绝大多数情况下,这两个值应该都是相同的。
explore_source 的 bind_filters 子参数会将“探索”查询中的特定过滤条件传递到原生派生表子查询中:
to_field 是作为过滤条件应用目标的原生派生表中的字段。to_field 必须是底层 explore_source 中的字段。from_field 用于指定从“探索”中获取过滤条件的字段(如果用户在运行时指定了过滤条件)。返回到 brand_order_facts 视图。
要使用绑定过滤条件,请先移除您在上一部分中创建的派生表定义中的静态日期过滤条件。
随后在 derived_column 定义下添加以下 bind_filters 模板:
在这种情况下,您需要获取 from_field: order_items.created_date 过滤条件,并使其影响或应用于 to_field: order_items.created_date。
返回到 Order Items“探索”。
在 Brand Order Facts 视图下,选择 Brand Name Grouped。
选择 Order Items 视图下的 Total Revenue 测量。
同样在 Order Items 视图的 Created Date 维度下,选择 Date 字段,然后选择 Date 旁的“过滤”按钮。
在过滤条件定义中,将过滤条件指定为:is in the past 1000 days。出于演示目的,您使用 1000 天来确保过滤条件不会过于严格,并且能够捕获过去 3 年间的数据。
点击运行。
如您所见,这种方式要更加灵活!如果您按照过去 3 个季度内创建的订单进行过滤,原生派生表将相应地计算过去 3 个季度内的排名。如果您按照特定日期范围内创建的订单进行过滤,原生派生表也会在其 WHERE 条件中使用此日期范围。
现在,在 Users 字段下,选择 Country 和 Age,并为其添加过滤条件;将它们分别设置为 Country is equal to USA 和 Age is greater than 21。
点击运行。
请注意,派生表的 WHERE 条件不会受到影响。如果除了 Ordered Items Created Date 之外,业务用户还有其他条件,该怎么办?如果他们只想查看由位于美国的客户或是男性客户所下订单的排名,该怎么办?
当然,您可以继续添加 bind_filters,但请留意观察 Order Items“探索”中有多少个字段。为所有这些变量添加 bind_filters 需要花费很长时间。此时,另一个参数 bind_all_filters 就非常有用了。
点击检查我的进度,验证您是否完成了上述任务。
如需将过滤条件从“探索”传递到原生派生表子查询,最简单的方法莫过于在原生派生表的 explore_source 参数中指定 bind_all_filters: yes。这会将“探索”的所有运行时过滤条件传递到原生派生表子查询。
如果您想在其他“探索”中使用原生派生表,请改用上一部分所述的 bind_filters 参数。
首先,请移除您在上一部分中创建的派生表定义中的 bind_filter。
在 derived_column 定义下添加 bind_all_filters: yes 定义,这样不仅可将 order_created_date 绑定到自身,还可将每个过滤条件都绑定到自身:
返回到 Order Items“探索”。
在 Brand Order Facts 视图下,选择 Brand Name Grouped。
选择 Order Items 视图下的 Total Revenue 测量。
同样在 Order Items 视图下,找到 Created Date 维度,然后点击 Date 旁的“过滤”按钮。
在过滤条件定义中,将过滤条件指定为:is in the past 365 days。
在 Users 视图下,添加针对 Country 和 Age 的过滤条件;将它们分别设置为 Country is equal to USA 和 Age is greater than 21。
点击运行。
点击 SQL 标签页。请注意,派生表的 WHERE 条件现在会动态更新!
虽然 bind_all_filters 非常有用,但只有在您将原生派生表联接到其 explore_source 时,它才能正常发挥作用。换句话说,您能在此处使用它,是因为您将 brand_order_facts 联接回了与 explore_source order_items 相同的“探索”。
为什么?因为 bind_all_filters 意味着 Looker 需要知道如何为整个“探索”中的任意字段生成 WHERE 条件。如果您的原生派生表使用 order_items 的 explore_source,但您将其联接到其他“探索”,则另外这个“探索”可能具有任意数量的联接视图和 order_items 中不存在的字段,因此在 order_items 的环境中毫无意义。Looker 将无从得知如何使用其他这些字段过滤派生表。
至此,您已经了解了 bind_all_filters 的实际应用,不妨尝试使用几种不同的“探索”过滤条件,看看它们会如何影响原生派生表的编译方式。
点击验证 LookML,然后点击提交更改并推送。
添加提交消息,然后点击提交。
最后,点击部署到生产环境。
在本实验中,您利用原生派生表回答了复杂问题,并使用派生列处理了高级应用场景,还更新了这些原生派生表,以使用内置过滤条件参数生成动态值。您还了解了业务用户如何利用自定义的原生派生表,来回答复杂问题。
…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。
本手册的最后更新时间:2024 年 3 月 4 日
本实验的最后测试时间:2024 年 3 月 4 日
版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。
此内容目前不可用
一旦可用,我们会通过电子邮件告知您
太好了!
一旦可用,我们会通过电子邮件告知您
一次一个实验
确认结束所有现有实验并开始此实验