<div id="module-unit-notification-container" hidden=""></div> <p>当数据仓库中的维度表和事实数据表填充数据后,可以使用 T-SQL 查询这些表和执行数据分析。 用于查询 Fabric 仓库中表的 Transact-SQL (T-SQL) 语法与 SQL Server 或 Azure SQL 数据库中使用的 SQL 语法非常相似。 这种相似度让那些已经习惯使用这些平台的人可以轻松过渡。</p>
讯享网
在涉及数据仓库的大多数数据分析场景中,该过程通常基于维度表中的属性围绕事实数据表中的聚合数字度量值进行。 由于星形或雪花架构的结构,此类聚合查询依赖于 子句将事实数据表与维度表链接。 此外,它们使用聚合函数和 子句来定义聚合层次结构。
以下 SQL 在一个假设的数据仓库中查询 FactSales 和 DimDate 表,以按年和季度聚合销售额:
讯享网
此查询的结果将与下表中的内容类似。
可以根据需要联接尽可能多的维度表来计算所需的聚合。 例如,以下代码扩展了前面的示例,根据 DimCustomer 表中客户的地址详细信息按城市细分季度销售额。
这次的结果包括每个城市的季度销售额。
在使用雪花型架构时,维度可能被部分规范化;需要多个联接将事实数据表与雪花维度相关联。 例如,假设你的数据仓库包含一个 DimProduct 维度表,其中的产品类别已经被规范化为一个单独的 DimCategory 表。 按产品类别聚合已销售商品的查询可能类似于以下示例:
讯享网
此查询的结果包括每个产品类别销售的商品数:
另一种常见的分析查询是基于维度属性对结果进行分区,并在每个分区中对结果进行排名。 例如,你可能需要按销售收入每年对商店进行排名。 为了实现此目标,可以使用 Transact-SQL 排名函数,例如 、、 和 。 使用这些函数能够将数据按类别分区,每个函数返回一个特定值,指示每一行在分区中的相对位置:
- ROW_NUMBER:返回行在分区中的序号位置。 例如,第一行的编号为 1,第二行的编号为 2,以此类推。
- RANK:返回排序结果中每行的排名位置。 例如,在按销售量排序的商店分区中,销售量最高的商店排名为 1。 如果多个商店的销售量相同,那么它们的排名也相同,分配给后续商店的排名反映了具有较高销售量(包括并列)的商店数。
- DENSE_RANK:以与 RANK 相同的方式对分区中的行进行排名,但当多个行具有相同的排名时,后续行在进行位置排名时将忽略并列的行。
- NTILE:返回行所在的指定百分位数。 例如,在按销售量排序的商店分区中, 将返回一个商店的销售量所在的四分位数。
例如,考虑以下查询:
查询根据产品类别将产品分区为各个分组,在每个类别分区中,每个产品的相对位置是根据其标价确定的。 此查询的结果可能与下表中的内容类似:
虽然数据仓库的用途主要是为了支持企业的分析数据模型和报表;但数据分析师和数据科学家通常需要执行一些初始数据探索,只是为了确定数据的基本规模和分布情况。
例如,以下查询使用 函数在一个假设的数据仓库中检索每年的销售额:
讯享网
此查询的结果可能与下表中的内容类似:
数据仓库中的数据量可能意味着,即使是计算满足指定条件的记录数的简单查询,也可能需要相当长的时间来运行。 在许多情况下,不需要精确的计数,一个近似的估计值就足够了。 在这类情况下,可以使用 函数,如以下示例中所示:
函数使用 HyperLogLog 算法检索近似计数。 结果保证最大误差率为 2%,概率为 97%,因此,此查询的结果与之前的假设数据相同,可能与下表类似:
计数不是那么准确,但用来大致比较年度销售额已经足够了。 在大量数据的情况下,使用 函数的查询可以更快地完成,而且在基本数据探索过程中,准确性降低可能是一个可接受的折衷。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/157408.html