借助 LookML 通过原生派生表回答复杂问题

实验 20 分钟 universal_currency_alt 免费 show_chart 中级
info 此实验可能会提供 AI 工具来支持您学习。
此内容尚未针对移动设备进行优化。
为获得最佳体验,请在桌面设备上访问通过电子邮件发送的链接。

GSP935

Google Cloud 自学实验的徽标

概览

Looker 是 Google Cloud 中的现代化数据平台,支持您以交互方式分析和可视化数据。您可以使用 Looker 展开深入数据分析、整合来自不同数据源的分析洞见,构建切实可行的数据驱动型工作流,以及创建自定义数据应用。

在本实验中,您将学习如何利用原生派生表来回答复杂问题、处理高级应用场景,以及使用内置参数自定义派生表。

学习内容

您将学习如何:

  • 创建原生派生表,并使用派生列回答复杂问题。
  • 更新原生派生表,以使用内置过滤条件参数生成动态值。
  • 了解业务用户如何利用自定义的原生派生表回答复杂问题。

前提条件:

为取得最佳学习成效,您必须熟悉 LookML,另外建议您先完成了解如何在 Looker 中使用 LookML 这一技能徽章课程,然后再开始本实验。

设置和要求

点击“开始实验”按钮前的注意事项

请阅读以下说明。实验是计时的,并且您无法暂停实验。计时器在您点击开始实验后即开始计时,显示 Google Cloud 资源可供您使用多长时间。

此实操实验可让您在真实的云环境中开展实验活动,免受模拟或演示环境的局限。我们会为您提供新的临时凭据,让您可以在实验规定的时间内用来登录和访问 Google Cloud。

为完成此实验,您需要:

  • 能够使用标准的互联网浏览器(建议使用 Chrome 浏览器)。
注意:请使用无痕模式或无痕浏览器窗口运行此实验。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。
  • 完成实验的时间 - 请注意,实验开始后无法暂停。
注意:如果您已有个人 Google Cloud 账号或项目,请不要在此实验中使用,以避免您的账号产生额外的费用。

如何开始实验并登录 Looker

  1. 准备就绪时,点击开始实验

    此时您会看到“实验详细信息”窗格,其中包含您在进行该实验时必须使用的临时凭据。

    如果该实验需要付费,系统会打开一个弹出式窗口供您选择支付方式。

    请注意,“实验详细信息”窗格中会显示实验凭据。您需要使用这些凭据来登录 Looker 实例以进行该实验。

    注意:如果您使用其他凭据,将会收到错误消息或承担相关费用
  2. 点击打开 Looker

  3. 电子邮件地址密码字段中输入提供的用户名和密码。

    用户名:

    {{{looker.developer_username | Username}}}

    密码:

    {{{looker.developer_password | Password}}} 重要提示:您必须使用本页面上“实验详细信息”窗格中的凭据。请勿使用您的 Google Cloud Skills Boost 凭据。如果您有自己的个人 Looker 账号,请不要在此实验中使用。
  4. 点击登录

    登录成功后,您会看到用于本实验的 Looker 实例。

任务 1. 使用派生列自定义原生派生表

原生派生表是派生表的一种类型,其功能与编写的 SQL 查询相同,但区别在于使用 LookML 语言原生表示。

为什么要使用原生派生表?回想您在上一个实验中创建的 user_facts SQL 派生表。您将订单 ID 的 COUNT 结果命名为 lifetime_order_count,并将 sale_price 的 SUM 结果命名为 lifetime_revenue。您或许还没注意到,这些汇总结果已经以度量的形式纳入到您的模型中了!您的 order_items 视图已经包含 order_counttotal_sales

原生派生表的好处在于,它们体现了 LookML 的核心原则,即可重用性。它们允许您继承已有的维度、度量,甚至是“探索”和联接逻辑。由于您尽可能减少了“硬编码”的数据库引用数量,因此从长远来看,这能大幅度降低模型的维护难度。

在本部分中,您将创建一个名为 brand_order_facts 的原生派生表,其中包含一个派生列,用于按总收入为品牌排名,并且可以使用动态日期范围和/或用户输入进行过滤。您还将创建新的维度,用于将行标记为前 5 大品牌或非前 5 大品牌(即,将排名第 6 位及以后的所有品牌归入“6) Other”这一个品牌名称)。

创建一个原生派生表,按总销售额对前 5 大品牌进行排名

  1. 首先,在 Looker 界面的左下方,点击切换按钮进入开发模式

  2. Looker 导航菜单中,点击探索

  3. E-Commerce Training(电子商务培训)下,点击 Order Items

  4. 点击 Inventory Items 视图下的 Product Brand 维度。

  5. 点击 Order Items 视图下的 Total Revenue 度量。

  6. 点击运行

  7. 点击运行(位于页面右上角)旁边的“设置”齿轮图标 (settings-gear-icon.png),然后选择获取 LookML

  8. 切换到派生表,点击框中的 LookML 代码并将其复制到剪贴板。

  9. 前往 Looker IDE(开发 > qwiklabs-ecommerce),点击“文件浏览器”旁的加号 (+) 图标,然后选择创建视图

  10. 将新视图命名为 brand_order_facts,然后点击创建

  11. 点击 brand_order_facts.view,并将其拖放到 views 文件夹下。

  12. 清除所有自动生成的示例代码,然后粘贴复制自“探索”的代码。别忘了将自动生成的视图名称修正为 brand_order_facts。您的视图应如下所示:

“文件浏览器”页面,其中显示 brand_order_facts.view 代码

  1. 点击保存更改

添加品牌排名派生列

至此,您已经为原生派生表奠定了基础。下一个任务是对品牌进行排名,这在大多数 SQL 方言中都可以通过 ROW_NUMBER() 函数实现。

为此,您需要向原生派生表的 explore_source 添加 derived_column。在原生派生表中,您可以使用 derived_column,指定由 explore_source 参数指定的“探索”中尚不存在的列。在本例中,您将这个列命名为 brand_rank

  1. column: total_revenue {} 定义下,首先定义 brand_rank 派生列:
derived_column: brand_rank {}
  1. 接下来,在大括号内为该列添加以下 sql 参数:
derived_column: brand_rank { sql: row_number() over (order by total_revenue desc) ;; }

只要创建派生列,就需要为其添加维度。这与常规数据库表中的列相同;此类列在 LookML 中需要表示为维度。您是否注意到,自动生成的维度不带 sql 参数?原因在于,如果您未为维度指定 sql 参数,Looker 会假定该维度应指向底层数据中与该维度完全同名的列。如果您愿意,可以在项目的其他方面将利用这一原理,将其作为一种实用的快捷方法,但一般来说,更好的做法是尽可能明确指定。在这种情况下,您至少应该指定类型。否则 Looker 默认会使用字符串类型,而这并不是您想要的。

  1. derived_table 定义之外 product_brand 维度正上方的位置,添加以下代码:
dimension: brand_rank { type: number }

您的新视图现在应如下所示:

“文件浏览器”页面,其中显示 brand_order_facts.view 代码

  1. 点击保存更改

  2. 在同一页面中,点击 model 文件夹中的 training_ecommerce.model 文件,修改其内容。

  3. 找到 explore: order_items 定义。

  4. explore: order_items 定义中,通过指定以下内容添加一个新的 brand_order_facts 联接:

join: brand_order_facts { type: left_outer sql_on: ${inventory_items.product_brand} = ${brand_order_facts.product_brand} ;; relationship: many_to_one }
  1. 点击保存更改

  2. 您的模型文件现在应如下所示:

“文件浏览器”页面,其中显示 training_ecommerce.model 代码

  1. 现在,您已将 brand_order_facts 视图联接到“探索”,接下来请前往 Order Items 的“探索”页面。

  2. Brand Order Facts 视图下,选择 Brand RankProduct BrandTotal Revenue 维度。

  3. 将“行数上限”设置为 10

  4. 点击运行。结果应如下所示:

输出结果表,在如下这些列标题下方显示 10 行数据:Brand Order Facts Brand Rank、Brand Order Facts Product Brand 和 Brand Order Facts Total Revenue

至此,一切都很顺利。但如果您的业务用户希望品牌名称显示为“1) Example Brand”这样的形式,而不仅仅是“Example Brand”,该怎么办?如何实现这一目标?在这种情况下,您可以创建一个维度,将其他两个维度值串联在一起。

  1. 返回到 brand_order_facts 视图。

  2. 创建另一个名为 brand_rank_concat 的维度,用于串联品牌排名和产品品牌:

dimension: brand_rank_concat { type: string sql: ${brand_rank} || ') ' || ${product_brand} ;; }
  1. 隐藏 brand_rank,因为业务用户可能只需要在新的 brand_rank_concat 中查找排名编号,不需要再使用一个单独的排名字段:
dimension: brand_rank { hidden: yes type: number }
  1. brand_rank_concat 添加标签,使其更便于用户理解。使用“Brand Name”标签:
dimension: brand_rank_concat { label: "Brand Name" type: string sql: ${brand_rank} || ') ' || ${product_brand} ;; }

在最后一步中,您需要将排名第 6 位及更靠后的所有品牌归入“Other”类别。为此,您首先要创建一个起到过渡作用的维度,用于评估一个品牌的排名是否在前 5 位。

  1. 在同一个 brand_order_facts 视图中,创建一个名为 brand_rank_top_5 的新维度,并使用以下参数:
dimension: brand_rank_top_5 { hidden: yes type: yesno sql: ${brand_rank} <= 5 ;; }
  1. 接下来,创建一个名为 brand_rank_grouped 的新维度,并使用以下代码将 brand_rank_top_5 整合到其中:
dimension: brand_rank_grouped { label: "Brand Name Grouped" type: string sql: case when ${brand_rank_top_5} then ${brand_rank_concat} else '6) Other' end ;; }
  1. 点击保存更改

现在,您的视图应如下图所示:

“文件浏览器”页面,其中显示 brand_order_facts.view 代码

  1. 返回到 Order Items 的“探索”页面。

  2. Brand Order Facts 视图下,选择 Brand Name Grouped 维度。

选择 Order Items 视图下的 Total Revenue 度量。将“行数上限”设置为 10。

  1. 点击运行

  2. 确保 Brand Name Grouped 列按先后顺序排列,然后点击“可视化图表”标签页下的饼图

  3. 验证您的可视化图表类似下图:

显示 Example Brand 分组的输出结果饼图

  1. 点击运行(页面右上角)旁的“设置”齿轮图标 (settings-gear-icon.png),然后选择保存 > 作为 Look

  2. 将此 Look 命名为 Ranked Brand Revenue

  3. 点击保存

  4. 返回到 brand_order_facts 视图。

提交更改并部署到生产环境

  1. 点击验证 LookML,然后点击提交更改并推送

  2. 添加提交消息,然后点击提交

  3. 最后,点击部署到生产环境

太棒了!希望这有助于您了解这种做法的实用性:将应用场景或所需逻辑分解为单独的基本维度,随后可以组合多个基本维度,或是在此基础上进行构建,以回答特定业务问题。在 LookML 开发最佳实践中,经常会看到许多类似的隐藏过渡性维度和度量。

点击检查我的进度,验证您已完成上述任务。 使用派生列自定义原生派生表

任务 2. 使用过滤条件自定义原生派生表

现在,假设商家只关心过去 365 天内提交的近期订单。或许在几年前,这些排名前 5 位的品牌还非常受欢迎,但随着趋势变化,它们在过去一年中的排名可能发生了变化。

在本部分中,您将了解到 LookML 中可用于原生派生表的各类过滤条件。可以利用 filters 参数来对派生表应用过滤条件,效果类似于过滤后的度量。它会添加 WHEREHAVING 子句。

添加静态日期过滤条件

  1. 首先返回到 brand_order_facts 视图。

  2. derived_column 定义下添加一个过滤条件,对原生派生表进行限制,使其仅包含过去 365 天内创建的订单:

filters: [order_items.created_date: "365 days"]
  1. 点击保存更改。您的文件现在应如下所示:

“文件浏览器”页面,其中显示 brand_order_facts.view 代码

  1. 返回到 Order Items“探索”。

  2. Brand Order Facts 视图下,选择 Brand Name Grouped

  3. 选择 Order Items 视图下的 Total Revenue 测量。

  4. 点击运行

  5. 数据栏中点击 SQL 标签页,查看过滤条件在查询中的使用方式。

您添加了针对 Ordered Items Created Date 的过滤条件,仅查看过去 365 天内的订单,因此 WHERE 条件仅在我们所说的外层查询中生成。这是任何维度过滤条件的默认行为;您无法指示它进入派生表的通用表表达式,也无法使外层 WHERE“向下渗透”到内层查询中。此时向 NDT 本身添加过滤条件就很有用了。

添加绑定过滤条件

如果商家发现,将数据限制为仅包含过去 365 天内的订单过于严格,该怎么办?有时,用户可能希望分析过去两年间的排名。使用 filters: [order_items.created_date: "365 days"] 时,您将对时间范围进行硬编码。

在此类情况下,bind_filters 可能比单纯的过滤条件更有用。您可以指明要从外层“探索”中“向下渗透”到原生派生表内层查询的字段 (from_field),以及该字段应映射到的原生派生表字段 (to_field)。在绝大多数情况下,这两个值应该都是相同的。

explore_sourcebind_filters 子参数会将“探索”查询中的特定过滤条件传递到原生派生表子查询中:

  • to_field 是作为过滤条件应用目标的原生派生表中的字段。to_field 必须是底层 explore_source 中的字段。
  • from_field 用于指定从“探索”中获取过滤条件的字段(如果用户在运行时指定了过滤条件)。
  1. 返回到 brand_order_facts 视图

  2. 要使用绑定过滤条件,请先移除您在上一部分中创建的派生表定义中的静态日期过滤条件。

  3. 随后在 derived_column 定义下添加以下 bind_filters 模板:

bind_filters: { from_field: # The field the end user interacts with via the filters area to_field: # The field which should be filtered inside the NDT }

在这种情况下,您需要获取 from_field: order_items.created_date 过滤条件,并使其影响或应用于 to_field: order_items.created_date

  1. 添加以下代码,以绑定过滤条件字段:
bind_filters: { from_field: order_items.created_date to_field: order_items.created_date } 注意:这就相当于为 SQL 派生表添加模板化过滤条件。如您在先前实验中所见,系统已向 SQL 派生表添加了模板化过滤条件,这让用户可以选择日期,并查看根据该日期更新的值。
  1. 点击保存更改。您的视图文件应如下所示:

“文件浏览器”页面,其中显示 brand_order_facts.view 代码

  1. 返回到 Order Items“探索”。

  2. Brand Order Facts 视图下,选择 Brand Name Grouped

  3. 选择 Order Items 视图下的 Total Revenue 测量。

  4. 同样在 Order Items 视图的 Created Date 维度下,选择 Date 字段,然后选择 Date 旁的“过滤”按钮。

  5. 在过滤条件定义中,将过滤条件指定为:is in the past 1000 days。出于演示目的,您使用 1000 天来确保过滤条件不会过于严格,并且能够捕获过去 3 年间的数据。

  6. 点击运行

“过滤条件(1)”部分

  1. 数据栏中点击 SQL 标签页,查看过滤条件在查询中的使用方式。请注意,所生成的 SQL 现在会动态更新派生表的通用表表达式中的 WHERE 条件,以及外层 WHERE 条件。

如您所见,这种方式要更加灵活!如果您按照过去 3 个季度内创建的订单进行过滤,原生派生表将相应地计算过去 3 个季度内的排名。如果您按照特定日期范围内创建的订单进行过滤,原生派生表也会在其 WHERE 条件中使用此日期范围。

  1. 现在,在 Users 字段下,选择 CountryAge,并为其添加过滤条件;将它们分别设置为 Country is equal to USAAge is greater than 21

  2. 点击运行

“过滤条件”部分

  1. 最后,点击 SQL 标签页。

请注意,派生表的 WHERE 条件不会受到影响。如果除了 Ordered Items Created Date 之外,业务用户还有其他条件,该怎么办?如果他们只想查看由位于美国的客户或是男性客户所下订单的排名,该怎么办?

当然,您可以继续添加 bind_filters,但请留意观察 Order Items“探索”中有多少个字段。为所有这些变量添加 bind_filters 需要花费很长时间。此时,另一个参数 bind_all_filters 就非常有用了。

点击检查我的进度,验证您是否完成了上述任务。 使用过滤条件自定义原生派生表

使用 bind_all_filters

如需将过滤条件从“探索”传递到原生派生表子查询,最简单的方法莫过于在原生派生表的 explore_source 参数中指定 bind_all_filters: yes。这会将“探索”的所有运行时过滤条件传递到原生派生表子查询。

如果您想在其他“探索”中使用原生派生表,请改用上一部分所述的 bind_filters 参数。

  1. 首先,请移除您在上一部分中创建的派生表定义中的 bind_filter

  2. derived_column 定义下添加 bind_all_filters: yes 定义,这样不仅可将 order_created_date 绑定到自身,还可将每个过滤条件都绑定到自身:

bind_all_filters: yes
  1. 点击保存更改。您的视图文件应如下所示:

“文件浏览器”页面,其中显示 brand_order_facts.view 代码

  1. 返回到 Order Items“探索”。

  2. Brand Order Facts 视图下,选择 Brand Name Grouped

  3. 选择 Order Items 视图下的 Total Revenue 测量。

  4. 同样在 Order Items 视图下,找到 Created Date 维度,然后点击 Date 旁的“过滤”按钮。

  5. 在过滤条件定义中,将过滤条件指定为:is in the past 365 days

  6. Users 视图下,添加针对 CountryAge 的过滤条件;将它们分别设置为 Country is equal to USAAge is greater than 21

  7. 点击运行

  8. 点击 SQL 标签页。请注意,派生表的 WHERE 条件现在会动态更新!

虽然 bind_all_filters 非常有用,但只有在您将原生派生表联接到其 explore_source 时,它才能正常发挥作用。换句话说,您能在此处使用它,是因为您将 brand_order_facts 联接回了与 explore_source order_items 相同的“探索”。

为什么?因为 bind_all_filters 意味着 Looker 需要知道如何为整个“探索”中的任意字段生成 WHERE 条件。如果您的原生派生表使用 order_itemsexplore_source,但您将其联接到其他“探索”,则另外这个“探索”可能具有任意数量的联接视图和 order_items 中不存在的字段,因此在 order_items 的环境中毫无意义。Looker 将无从得知如何使用其他这些字段过滤派生表。

至此,您已经了解了 bind_all_filters 的实际应用,不妨尝试使用几种不同的“探索”过滤条件,看看它们会如何影响原生派生表的编译方式。

  1. 返回到 brand_order_facts 视图。

提交更改并部署到生产环境

  1. 点击验证 LookML,然后点击提交更改并推送

  2. 添加提交消息,然后点击提交

  3. 最后,点击部署到生产环境

恭喜!

在本实验中,您利用原生派生表回答了复杂问题,并使用派生列处理了高级应用场景,还更新了这些原生派生表,以使用内置过滤条件参数生成动态值。您还了解了业务用户如何利用自定义的原生派生表,来回答复杂问题。

后续步骤/了解详情

Google Cloud 培训和认证

…可帮助您充分利用 Google Cloud 技术。我们的课程会讲解各项技能与最佳实践,可帮助您迅速上手使用并继续学习更深入的知识。我们提供从基础到高级的全方位培训,并有点播、直播和虚拟三种方式选择,让您可以按照自己的日程安排学习时间。各项认证可以帮助您核实并证明您在 Google Cloud 技术方面的技能与专业知识。

本手册的最后更新时间:2024 年 3 月 4 日

本实验的最后测试时间:2024 年 3 月 4 日

版权所有 2026 Google LLC 保留所有权利。Google 和 Google 徽标是 Google LLC 的商标。其他所有公司名和产品名可能是其各自相关公司的商标。

准备工作

  1. 实验会创建一个 Google Cloud 项目和一些资源,供您使用限定的一段时间
  2. 实验有时间限制,并且没有暂停功能。如果您中途结束实验,则必须重新开始。
  3. 在屏幕左上角,点击开始实验即可开始

使用无痕浏览模式

  1. 复制系统为实验提供的用户名密码
  2. 在无痕浏览模式下,点击打开控制台

登录控制台

  1. 使用您的实验凭证登录。使用其他凭证可能会导致错误或产生费用。
  2. 接受条款,并跳过恢复资源页面
  3. 除非您已完成此实验或想要重新开始,否则请勿点击结束实验,因为点击后系统会清除您的工作并移除该项目

此内容目前不可用

一旦可用,我们会通过电子邮件告知您

太好了!

一旦可用,我们会通过电子邮件告知您

一次一个实验

确认结束所有现有实验并开始此实验

使用无痕浏览模式运行实验

使用无痕模式或无痕浏览器窗口是运行此实验的最佳方式。这可以避免您的个人账号与学生账号之间发生冲突,这种冲突可能导致您的个人账号产生额外费用。