原文:The beauty of OLAP SQL

我的日常工作是构建分析仪表板的后端系统。这些仪表板通过数据可视化,帮助用户深入洞察其业务数据。今天,我将分享一个利用 SQL 编写强大 OLAP 查询的真实案例。

请设想您正在运营一系列披萨品牌,目标是评估您的产品货架份额与主要竞争对手的差距。您最关心的业务问题可能包括:

  • 您在披萨品类中的铺货份额(Share of Assortment, SOA)是多少?在沃尔玛分销的披萨产品中,有 50% 是您的吗?还是只有 5%
  • 平均而言,您的披萨产品有多少在 Kroger 进行了分销?您有 5 种不同的产品,但平均只有 2 种有售?是更多还是更少?
  • 您的铺货份额随时间推移是如何变化的?与去年/上个月相比,是增加 10% 还是减少 5%
  • 哪些竞争对手占据了大部分货架份额?您与他们的比较如何?
  • 谁正在投放新产品?谁在减少投放?
  • 您的哪个品牌是成功的?哪个需要撤市或通过广告/更优惠的价格等进行改进?

数据结构如下所示(已匿名化):

p_id manufacturer category brand retailer period distributed_days
i64 i64 i64 i64 i64 str i64
6581 61 20 273 1 2023_52 31407
8563 34 4 274 1 2023_52 27515
8411 11 6 276 1 2023_52 30693
阅读全文 »


原文:The Temporal Dead Zone, or why the TypeScript codebase is littered with var statements

如果您使用 JavaScript 已经有一段时间,您可能知道有几种不同的方式来初始化变量。现在,我们通常使用:

1
const password = "hunter2";

并且偶尔的,当状态可变时我们使用:

1
let password = "hunter2";

这些声明方式已经存在一段时间了,它们拥有合理的块级作用域规则:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function example(measurement) {
console.log(calculation); // ReferenceError(引用错误)
console.log(anotherCalc); // ReferenceError(引用错误)

if (measurement > 1) {
const calculation = measurement + 1;
let anotherCalc = measurement * 2;
// ...
} else {
// ...
}

console.log(calculation); // ReferenceError(引用错误)
console.log(anotherCalc); // ReferenceError(引用错误)
}
阅读全文 »


工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的实例化延迟到子类。这意味着,你不再直接使用 new 关键字来创建对象,而是通过调用一个“工厂方法”来获取对象,这个工厂方法由子类实现,决定了要实例化哪个具体类。

阅读全文 »


Mermaid 是一种基于文本的图表绘制工具,它使用简单的语法来定义图表的结构和样式。以下是 Mermaid 绘图的基本语法和一些常见元素的说明:

1. 图类型

Mermaid 支持多种类型的图表,包括流程图、序列图、甘特图、类图等。每种图表的定义以关键字开始,例如:

  • graph TD:定义一个自上而下的流程图(Top-Down)。
  • graph LR:定义一个从左到右的流程图(Left-Right)。
  • sequenceDiagram:定义一个序列图。
  • gantt:定义一个甘特图。
  • classDiagram:定义一个类图。

2. 节点和连接

在流程图中,节点和连接是最基本的元素。

阅读全文 »
0%