跳至正文

DAX Guide-1-分析的本质与Measure

标签:

喜乐君视频录制的框架,后期再逐渐补充。

欢迎观看系列视频: UDEMY【另眼看DAX分析世界】 (该视频23年仅在UDEMY试发行)

一、从SQL看,问题分析的本质是什么?

案例:每个产品 的 销售数量总和

1、分析的本质是对业务的抽象概况

典型的分析问题,是对大量业务事实的抽象概括、归纳升华,从而获得一些有概率的线索,比如哪些品牌更加畅销,哪些产品价格异常等等。“归纳”(induction)是人类文明发展过程中构建的最重要的学习方法之一。

在日常工作中,业务领导时常会提出一些要求我们总结、归纳、概括的问题,英文中也有sum up(口语化)、summarize(归纳)等对应的说法。

这个抽象概括、升华总结的过程,我们可以简而言之为”抽象“(abstract),或者总结(summarize)。

如今,业务细节都以数据的形式保存。从数据角度看,抽象概括的过程,就是对成千上万数据明细行的计算,只是不同计算的抽象程度有高有低,选择怎样的计算类型、计算方法,以何种方式呈现,才是重点。

2、抽象总结的基本方式是聚合

在计算机的世界中,所有的操作都是计算(computation),所以才称之为“计算机”(computer)。

以SQL为例,为了完成“每个产品 的 销售数量总和”,我们可以查询所有的产品销售细节,如下图左侧所示。但是这样的细节不能直接回答问题——我们依然不知道哪个产品销售多少,也就是抽象化程度太低、概括不足。

在计算的世界,分析概括是从聚合函数开始的,聚合是抽象概括的典型形式。其中,使用最多的是SUM求和,在Tableau、Power BI,甚至Excel中,它都是默认的聚合方式,从它的名字(sum)就知道,它是summarize的默认选项。

3、聚合的典型形式是sum求和

除了最常见的聚合形式SUM求和,常见的聚合类型还有AVERAGE平均值、MAX最大值、MIN最小值等等。它们分别代表了不同的视角。

(有待补充)

小结:问题分析就是抽象概括,后者借助聚合计算完成,聚合的典型形式是求和sum,因此说“聚合是分析的本质”,所以常常两个关键词连用讲“聚合分析”,它和“明细查询”相对应。

换个角度看,聚合分析的基础是明细查询,二者借助于聚合过程连接在一起。可以用Measure一词进一步理解二者的区别和联系。

二、聚焦“聚合”的过程:理解Measure的多种涵义

1、从业务过程看Measure(形成明细表的过程)

Measure是动词形式,是对业务的准确记录,比如销售数量多少、成交价格多少。 

秦始皇“统一度量衡”,这里的“度量衡”(dù liàng héng )分别代之三种测量器具:计量长短用的器具称为度,测定计算容积的器皿称为量,测量物体轻重的工具称为衡。其中,测量轻重还有一个词语是“权”,这也是“权重”一词的来源。孟子就留下了“权,然后知轻重;度,然后知长短”的名言。度、量、衡、权,组成了很多通用词汇:度量、权重、权衡、计量、量化。由于计量长度的历史最为悠久、使用最为普遍,因此,我们推荐使用“度量”一词,与Measure的动词形式相对应,而不推荐使用量化这种新词。

在西方管理学中,就有“if you cannot measure it,you cannot manage it”(德鲁克)的管理格言。如何measure你的业务?如今最普遍的形式就是能完整记录在数据库的数据表明细行中,也正为此,我们常常称数据表明细行为“记录”(Record),而把用于精确表示数据值的数量、单价、折扣等数字型字段称之为“度量字段”。沿着这条路讲下去,就是数据库的知识了。

当然,把明细行的字段称之为“measure”是相对粗糙的说法,喜乐君并不推荐,而是推荐把它作为问题阶段的专用名词,代表问题的答案。

2、从问题角度看,Measure是问题的答案

比如,每个产品的销售数量总和、每个日期的销售数量总和,这里“销售数量总和”代表不同问题的类似答案,借助于Measure来实现。

…… 有待补充。

3、aggregation是问题分析的过程,是measure的载体

聚合是分析的本质,聚合是从数据表明细行到问题的由多变少的抽象概括过程。aggregate聚合

聚合过程

聚合函数

三、SQL和DAX的Measure对比

1、SQL编程式语言:聚合的关键是分组依据GROUP by

2、DAX,函数式语言,而非编程式语言

使用sum或者sumx函数完成求和聚合,但从问题角度看,问题是维度和度量构成的整体,是从明细表的概括,形成问题的基本函数是summarizecolumns函数,当然还有很多类似形态。

有待补充

3、DAX:从多个问题中“剥离”出常用的聚合计算

比如,同时要分析“不同产品的销售数量总和” 与 “不同日期的销售数量总和”,可以预先定义一个Measure,代表“销售数量总和”这一聚合形式,而后和不同的问题组合。 

//事例:每个产品 的 销售数量总和
DEFINE
    MEASURE // 数量总和 ,度量值被独立出来了  ,适用于所有的问题
    sales[amt] =
        SUMX ( sales, Sales[Quantity] )

EVALUATE
//所有的分析都是计算,查询也是计算 
SUMMARIZECOLUMNS (
    Sales[ProductKey],
    "total qty", sales[amt]
)

EVALUATE
SUMMARIZECOLUMNS ( 
     Sales[Delivery Date],
     "delivery qty", sales[amt] 
)

点击链接,查看我的DAX代码

https://dax.do/cpCoU8lAqAj2Xj/

嵌入测试1(DIV)

1//分析的本质是什么? 抽象---聚合方式实现的---聚合的具体形式 是 sum,聚合要有分组依据
2//事例:每个产品 的 销售数量总和
3
4DEFINE MEASURE  // 数量总和 ,度量值被独立出来了  ,适用于所有的问题
5  sales[amt] = SUMX ( sales, Sales[Quantity])
6
7
8EVALUATE //所有的分析都是计算,查询也是计算 
9SUMMARIZECOLUMNS (   
10    Sales[ProductKey],
11    "total qty", sales[amt] 
12)
13EVALUATE 
14SUMMARIZECOLUMNS ( Sales[Delivery Date],
15  "delivery qty", sales[amt])
16

嵌入测试2(dax,缺少css)

[dax try="https://dax.do/cpCoU8lAqAj2Xj/mJrwj74/"]
//分析的本质是什么? 抽象---聚合方式实现的---聚合的具体形式 是 sum,聚合要有分组依据
//事例:每个产品 的 销售数量总和

DEFINE MEASURE  // 数量总和 ,度量值被独立出来了  ,适用于所有的问题
  sales[amt] = SUMX ( sales, Sales[Quantity])


EVALUATE //所有的分析都是计算,查询也是计算 
SUMMARIZECOLUMNS (   
    Sales[ProductKey],
    "total qty", sales[amt] 
)
EVALUATE 
SUMMARIZECOLUMNS ( Sales[Delivery Date],
  "delivery qty", sales[amt])

[/dax]

总结

分析的本质、聚合过程、度量、度量值,一脉相承。

Sep 2, 2023 V0.1

喜乐君

《DAX Guide-1-分析的本质与Measure》有1个想法

  1. Pingback: 深刻理解聚合函数:理解它们的关系 – 喜乐君

评论已关闭。