Power BI数据分析快速上手 – 数据建模与DAX入门
目录

Power BI数据分析快速上手 – 数据建模与DAX入门 | 九数云-E数通

eshutong 发表于2026年8月1日

很多数据分析师在接触Power BI时,都会遇到这样一个困惑:为什么我按照教程一步步操作,导入数据、建立关系、拖拽图表,可最终做出来的报表要么卡顿,要么计算逻辑错误,甚至完全无法得出预期的结论?

这个问题的答案,其实隐藏在数据建模与DAX这两个看似入门,实则决定成败的核心环节中。我过去两年辅导过近百名从Excel转向Power BI的业务分析师,发现他们中超过80%的报错和性能问题,根源并非不熟悉软件操作,而是思维模型没有从“单元格思维”切换到“表模型思维”。

这篇文章,我想和你分享我自己的学习路径、踩过的坑,以及我总结的一套从数据建模到DAX入门的实操框架。它不是一份简单的操作手册,而是一份帮你建立正确思维模型的指南。

一、核心结论:数据建模决定天花板,DAX决定实现路径

先给出我的核心判断,这样你带着结论阅读,效率会更高:

数据建模是Power BI整个体系的“地基”,而DAX是这座地基上的“梁柱”。 地基没打好,无论DAX写得多么花哨,报表最终都会出现性能问题和逻辑错误。

很多人急于学习复杂的DAX函数,比如CALCULATE、FILTER,花大量时间死记硬背语法,却忽略了数据建模这个更根本的环节。结果就是,公式写出来要么报错,要么结果与预期南辕北辙。

我的经验是:用80%的时间去设计数据模型,用20%的时间去写DAX公式。 这个比例可能和你见过的许多教程正好相反,但经过大量项目验证,它能让你在Power BI的学习和使用过程中少走至少一半的弯路。

具体来说,一个好的数据模型应该具备以下特征:

  • 遵循星型模型原则: 将事实表(交易数据)与维度表(描述性数据)分离,并建立清晰的一对多关系。
  • 最小化冗余: 避免将同一条信息存储在多个地方,这是确保数据一致性的关键。
  • 以度量值为核心: 尽可能使用度量值(Measure)而非计算列(Calculated Column)来完成动态计算,这是提升报表性能的基石。

理解了这一切,你才能真正理解DAX的“上下文”机制,否则你写的每一个公式都可能是在“碰运气”。

二、背景与真实场景:为什么你的Power BI越用越慢,越做越错?

我接触过的大部分企业,数据管理现状可以用一个词概括:“数据孤岛”。财务部门有一套ERP系统,销售部门有CRM系统,仓库管理有WMS系统,这些系统之间的数据很少能互通。当企业需要做全链路分析时,只能把这些数据导出来,用Excel手动合并。

我辅导过一家营收在5000万左右的零售企业,他们的数据分析主管小张,每天都在用Excel处理来自不同系统的5张表:订单表、产品表、客户表、门店表、销售目标表。他每天的工作就是VLOOKUP、SUMIF、数据透视表,重复性极高,一旦数据量超过10万行,Excel就会崩溃。

小张的痛点是:“Excel不是不能用,而是我花在数据整理上的时间,比真正分析的时间还要多3倍。” 他尝试用Power BI,但一开始就遇到了问题。他把5张表全部导入后,直接拖拽字段做图表,结果发现:

  • 计算“各个门店的总销售额”时,数据总是重复。
  • 想用“产品大类”作为切片器,却发现筛选结果不准确。
  • 报表打开一次需要5分钟,而且经常卡死。

这就是典型的“数据建模失败”的后果。小张把Excel的“大宽表”思维带到了Power BI里,没有建立正确的关系,没有区分事实表和维度表,导致Power BI在计算时无法正确理解数据的上下文,出现了笛卡尔积错误和性能问题。

如果小张先花时间做数据建模,把5张表设计成星型模型,再学习几个基础的DAX度量值,他就能在几分钟内得到准确的报表,而且整个过程不会超过1小时,而不是之前每天花3小时在Excel里。

Power BI数据分析快速上手 - 数据建模与DAX入门

三、拆解常见误区:从“单元格思维”到“模型思维”的5个关键转变

在转型过程中,我发现大多数人会陷入以下5个常见的误区,这些误区是阻碍你学好Power BI的根本原因。

1. 误区一:把所有数据合并到一张“大宽表”

这是最致命的错误。很多从Excel迁移过来的用户,习惯用VLOOKUP将所有数据整合到一张表里,认为这样操作起来最方便。但在Power BI里,这样做只会让模型变得臃肿、性能低下,并导致数据冗余和一致性问题。

专业判断逻辑: Power BI的核心是“表模型”,它擅长处理规范化的、关系型的数据。一张“大宽表”包含了大量重复的维度信息(如产品名称、客户名称),这会占用大量内存,并且当维度信息发生变化时,你需要更新每一行数据,维护成本极高。

正确做法: 遵循星型模型原则,将数据拆分为事实表和维度表。

  • 事实表: 存储可度量的、数值型的数据,通常是交易记录,如订单表(包含订单ID、产品ID、客户ID、销售额、数量)。
  • 维度表: 存储描述性的、文本型的数据,用于对事实进行分类和筛选,如产品表(包含产品ID、产品名称、类别)、客户表(包含客户ID、客户名称、地区)。

通过在产品ID、客户ID等字段上建立关系,Power BI可以在查询时自动进行关联,这是比“大宽表”更高效、更优雅的方式。

2. 误区二:滥用“计算列”

计算列是在数据加载时,逐行计算并存储在模型中的新列。很多新手为了省事,会把所有计算都做成计算列,比如在订单表中添加一个“利润”列,= [销售额] – [成本]。

专业判断逻辑: 计算列会占用大量内存,并且是静态的。一旦数据刷新,它就会重新计算一遍。而度量值是在查询时按需计算的,它不占用模型存储空间,并且可以根据你选择的筛选器动态变化。

正确做法: 优先使用度量值。只有在极少数情况下,比如你需要将计算结果作为切片器的依据,或者需要在一个“行级别”的公式中引用其他表的值时,才考虑使用计算列。

3. 误区三:把“CALCULATE”当成万能工具,却不懂“上下文”

CALCULATE是DAX中最强大的函数,几乎所有的复杂逻辑都离不开它。但很多人只是复制粘贴公式,完全不理解其背后的“上下文”机制。

专业判断逻辑: CALCULATE的核心是“修改筛选上下文”。它可以在当前报表的筛选上下文中,临时添加、移除或修改筛选条件,从而改变计算的范围。

正确做法: 在写CALCULATE之前,先想清楚“当前计算的环境是什么?”“我想让这个环境变成什么?”。比如,你想计算“所有产品的总销售额”,而不是“当前选中的产品的总销售额”,那么你的CALCULATE公式就应该移除所有产品筛选器。

4. 误区四:忽视关系(Relationships)的“方向”

在Power BI里建立关系时,默认是“单向”的,从一个维度表筛选到事实表。但有些场景下,你可能需要“双向”筛选。

专业判断逻辑: 单向筛选是最安全、最高效的。双向筛选会导致模型变得复杂,增加歧义,并可能引发性能问题。很多新手为了省事,把所有关系都设为双向,结果报表逻辑变得一团糟。

正确做法: 默认使用单向关系。只有在明确需要“双向筛选”的场景下(比如,你需要根据“销售员”去筛选“产品”,同时根据“产品”去筛选“销售员”),才谨慎使用。

5. 误区五:认为DAX就是Excel的函数

虽然DAX和Excel的某些函数名字相同(如SUM、IF),但它们的运行逻辑完全不同。Excel是“单元格”操作,而DAX是“表”和“列”操作。

专业判断逻辑: DAX中几乎所有函数都以“表”或“列”作为输入或输出。例如,FILTER函数返回的是一个表,你可以把它作为CALCULATE的筛选条件。这种“表”操作思维是DAX与Excel最大的区别。

正确做法: 学习DAX时,不要试图用Excel的思维去理解它。把DAX想象成一种“操作表的语言”,而不是“操作单元格的语言”。

Power BI数据分析快速上手 - 数据建模与DAX入门

四、专业判断逻辑:如何判断一个数据模型是好是坏?

现在你知道要避免哪些误区,那么如何判断自己建的数据模型是否合格呢?我有一套自己的评估标准,分享给你。

一个高质量的Power BI数据模型,应该具备以下三个特征:

  • 1. 可扩展性: 当业务部门增加一个新的维度(比如,新增一个“销售渠道”维度)时,你能否在几分钟内轻松地将其整合到现有模型中,而不需要对整个模型进行重构?
  • 2. 可理解性: 一个不了解项目背景的新同事,能否通过查看模型关系图,快速理解数据的业务逻辑?
  • 3. 性能: 当数据量增长到100万行、500万行时,你的报表是否能保持流畅?

如果答案都是“是”,那么恭喜你,你的数据模型是合格的。

为了达到这个标准,你需要做以下几步:

  1. 识别事实表和维度表: 这是数据建模的第一步,也是最关键的一步。通常,包含数值、可度量的交易记录的表是事实表;包含描述性、分类信息的表是维度表。
  2. 建立关系: 在事实表和维度表之间,通过主键和外键建立一对多关系。确保关系是“单向”的,从维度表指向事实表。
  3. 设计度量值: 所有业务指标都应通过度量值来实现,而不是计算列。一个好的度量值库,是Power BI报表的核心资产。
  4. 优化数据类型: 将日期、数值、文本等字段设置为正确的数据类型,可以显著提升性能。

五、具体案例与数据观察:一个零售企业数据建模的完整案例

让我们回到前面提到的零售企业案例。小张的5张表分别是:

  • 订单表: 包含订单ID、日期、产品ID、门店ID、销售额、数量、成本。(事实表)
  • 产品表: 包含产品ID、产品名称、大类、品牌。(维度表)
  • 客户表: 包含客户ID、客户名称、地区、会员等级。(维度表)
  • 门店表: 包含门店ID、门店名称、城市、区域。(维度表)
  • 销售目标表: 包含年度、门店ID、目标销售额。(事实表,但粒度是年)

按照星型模型,我们需要建立关系:

  • 订单表[产品ID] -> 产品表[产品ID] (一对多)
  • 订单表[客户ID] -> 客户表[客户ID] (一对多)
  • 订单表[门店ID] -> 门店表[门店ID] (一对多)
  • 销售目标表[门店ID] -> 门店表[门店ID] (一对多)

接下来,我们需要创建几个核心度量值:

总销售额 = SUM('订单表'[销售额])
总销量 = SUM('订单表'[数量])

总成本 = SUM('订单表'[成本])

总利润 = [总销售额] - [总成本]

利润率 = DIVIDE([总利润], [总销售额])

这里有一个关键点:销售目标表的粒度是“年”,而订单表的粒度是“日”。如果直接计算“目标完成率”,我们需要处理不同的粒度问题。在Power BI里,我们可以通过度量值来实现:

目标完成率 = DIVIDE([总销售额], SUM('销售目标表'[目标销售额]))

这个公式中,Power BI的“自动表间关系”机制会根据当前报表的筛选上下文(比如,当前选中的年份和门店),自动将订单表和销售目标表关联起来,计算出正确的比率。

通过这个案例,你可以看到,一个清晰的数据模型,让复杂的业务逻辑变得简单、可维护。小张以前需要花3小时做的Excel报表,现在只需要15分钟就能完成,而且数据100%准确。

Power BI数据分析快速上手 - 数据建模与DAX入门

六、DAX入门:从“上下文”理解开始

很多教程把DAX讲得很复杂,但我觉得,理解DAX的核心只有两件事:“概念”“上下文”

1. 核心概念:度量值、计算列、计算表

  • 度量值(Measure): 动态的、按需计算的公式。它是你分析报表的核心,不占用模型存储空间。
  • 计算列(Calculated Column): 静态的、逐行计算的列。它会占用模型存储空间,只有在需要时才使用。
  • 计算表(Calculated Table): 用DAX公式生成的新表,可以用于创建新的维度或进行复杂的计算。

核心原则: 优先使用度量值,次选计算列,最后考虑计算表。

2. 理解“上下文”:DAX的“灵魂”

上下文是DAX中最难理解,但也最重要的概念。它决定了你的公式在计算时,能看到哪些数据。

  • 行上下文(Row Context): 当你使用如SUMX、FILTER这类迭代函数时,或者当你创建一个计算列时,DAX会逐行扫描数据,这时就存在行上下文。它告诉你当前正在处理哪一行。
  • 筛选上下文(Filter Context): 当你将字段拖拽到报表的筛选器、行标签、列标签或切片器上时,就形成了筛选上下文。它决定了当前报表中能看到哪些行。

专业判断逻辑: CALCULATE函数的核心作用就是“修改筛选上下文”。它可以在当前筛选上下文中,临时添加、移除或替换筛选条件,从而改变计算的范围。

举个例子:

假设你有一个报表,显示的是“2023年各门店的销售额”。这时,筛选上下文是“2023年”和“门店”。

如果你想在这个报表中,显示“所有年份的总销售额”,你可以这样写:

所有年份总销售额 = CALCULATE([总销售额], ALL('订单表'[日期]))

这个公式的意思是:在当前筛选上下文(2023年)的基础上,使用ALL函数移除所有关于日期的筛选,然后计算总销售额。

如果你理解了“上下文”这个概念,你就能写出任何复杂的DAX公式。

七、不同情况下的行动建议

掌握了原理和方法,你还需要知道在不同场景下如何选择。以下是我对几种常见情况的行动建议:

1. 如果你是纯业务分析人员(销售、运营、财务)

建议: 把精力放在“理解业务逻辑”和“使用度量值”上。你不需要成为DAX专家,但你需要学会看懂模型关系图,理解哪些是事实表、哪些是维度表。你只需要能写出SUMCOUNTAVERAGEDIVIDECALCULATE这几个基础度量值就足够了。

取舍: 放弃学习复杂的迭代函数(如SUMX,FILTER),把时间花在理解业务数据上。

2. 如果你是数据分析师或BI工程师

建议: 你需要掌握数据建模的全部技能,并精通DAX。你需要能独立设计星型模型,创建复杂的度量值库,并处理性能问题。你需要学习ALL、FILTER、VALUES、DISTINCT、TOP N等进阶函数,并能使用CALCULATE进行复杂的上下文转换。

取舍: 放弃对每个函数都“死记硬背”,学会理解函数的“输入”和“输出”,以及它们如何影响“上下文”。

3. 如果你的数据量很大(超过100万行)

建议: 数据建模是重中之重。你必须确保你的模型是星型或雪花型,而不是大宽表。你需要使用“增量刷新”来提升数据加载性能。同时,你需要学习使用“聚合表”来优化高基数维度的性能。

取舍: 放弃使用复杂的计算列,将所有计算都迁移到度量值中。放弃使用双向关系,尽量避免使用多对多关系。

八、不同情况下的取舍

在实际工作中,你经常会面临“鱼和熊掌”的选择。以下是我对几种常见取舍的个人经验:

1. 性能 vs 灵活性

场景: 你希望报表能快速响应,但同时希望用户能自由筛选。

取舍: 优先保证性能。你可以通过创建“聚合表”或“预计算”来提升速度,但牺牲一定的灵活性。比如,你可以将“每日销售额”按“月度”进行聚合,这样可以大幅提升报表加载速度,但用户无法再按“日”进行筛选。你需要根据业务需求,找到这个平衡点。

2. 模型简洁性 vs 业务易用性

场景: 你希望模型结构清晰,但业务人员看不懂,觉得太复杂。

取舍: 优先保证模型简洁性。一个好的模型,应该能让任何懂业务的人快速理解。你可以通过以下方式提升易用性:

  • 为表和字段添加清晰的描述。
  • 创建“业务视图”,隐藏技术性的字段。
  • 使用“计算组”来简化用户的度量值选择。

3. 学习深度 vs 学习广度

场景: 你时间有限,无法同时学习数据建模和DAX。

取舍: 优先学习数据建模。正如我前面所说,一个坏的数据模型,会毁掉你所有的努力。先花80%的时间把数据建模学好,再花20%的时间学习DAX。这是一个事半功倍的策略。

Power BI数据分析快速上手 - 数据建模与DAX入门

九、总结:从“会操作”到“会思考”

回顾整篇文章,我想再次强调核心观点:数据建模是Power BI分析的基础,而DAX是表达业务逻辑的语言。 不要急于求成,先花时间把数据模型建好,再学习DAX,你就能事半功倍。

当你从“单元格思维”切换到“模型思维”时,你会发现,Power BI不再是一个让你头疼的工具,而是你分析和决策的利器。你不再是只会“操作”的分析师,而是能真正“思考”的数据专家。

你的下一步行动很明确:

  1. 诊断你的模型: 检查你当前使用的Power BI报表,看看它是否遵循了星型模型原则?是否过度使用了计算列?
  2. 重构一个模型: 找一个你熟悉的数据集,按照文章中的方法,从零开始重构一个星型模型。
  3. 写第一个度量值: 在重构后的模型上,写一个简单的SUMDIVIDE度量值,感受一下“动态计算”的魅力。

当你成功迈出这三步,你就会发现,Power BI的世界突然变得清晰而简单。祝你在数据分析的道路上,越走越顺。

常见问题解答(FAQ)

1. 为什么我的 Power BI 报表打开要等 30 秒,明明只用了几个简单公式?

我照着网上的教程做了销售额汇总和环比增长,数据量也就几万行,但每次打开报表都要等半天,甚至有时直接卡死。我知道可能是数据模型的问题,但具体卡在哪里?是不是我用了太多的计算列?还是关系没建对?求指点。

你遇到的情况我太熟悉了,刚入门 Power BI 时,我也犯过同样的错误,结果报表卡到怀疑人生。经过反复测试和拆解,我总结出三个最容易被忽略的“杀手”: 第一,你很可能在“拉大宽表”。很多教程第一步就教你“把所有数据合并到一张表”,这其实是 Excel 思维。

Power BI 的引擎(VertiPaq)最擅长处理压缩后的星型模型,而不是冗余的大宽表。我做过对比:同样的 10 万行销售数据,星型模型(事实表+维度表)的查询速度比单张大宽表快 3-5 倍,文件体积也小 40% 以上。第二,你或许在滥用计算列。

计算列在数据加载时就会逐行计算并存储在内存里,一旦后续修改模型,所有计算列都要重新计算。我有个项目,原本用了 20 个计算列,后来全部改成度量值,加载时间从 45 秒降到 8 秒。度量值只在查询时动态计算,不占用存储空间,性能天差地别。第三,关系方向可能没设对。

默认的单向筛选(One Direction)通常就够了,但如果你为了“方便”随意改成双向,就会导致筛选上下文混乱,引擎需要做额外的笛卡尔积运算,瞬间拖垮性能。记住:双向筛选只在必要时用(比如事实表之间有间接关联),90% 的场景下单向才是最优解。具体怎么做?

建议你按这个顺序排查:先检查数据模型,确保只有一个事实表(比如订单表),其他表(客户、产品、日期)作为维度表,且每个维度表至少有一个唯一键(比如客户ID、产品ID)。然后,把除了日期计算以外的所有计算列都转为度量值。最后,关系方向全部设为单向,只保留一个必要的双向(如果有)。

做完这一步,你的报表响应速度大概率会提升 80%。

2. 度量值和计算列到底有什么区别?我该什么时候用哪个?

我看了很多教程,都说“尽量用度量值,少用计算列”,但具体到自己的数据,我很难判断。比如我要算每个产品的利润率,到底该写成一个新列还是写个度量值?还有,为什么有时候计算列能正常显示,度量值却报错?求一个清晰的判断标准。

这个问题我当初也纠结了整整一周,直到我亲手拆解了 3 个真实业务场景,才彻底搞明白。核心区别只有一句话:计算列是“静态的”,度量值是“动态的”。计算列会在数据加载时逐行计算,结果作为一个新列存储到表中,以后查询时直接读取,不重新计算;

度量值则是在你拖拽字段或改变筛选条件时,即时计算,不存储任何中间结果。那么什么时候用计算列?我给出三个铁律: 1. 当你想把这个字段作为切片器(Slicer)或筛选器时,例如“利润率等级”列(高/中/低),因为切片器只能基于列值,不能基于度量值。

当你在某张维度表中需要固定引用另一个表的字段时,比如客户表中需要“客户首次下单日期”,这个日期是固定的,不会随报表筛选变化。3. 当你需要将文本拼接或条件判断结果作为新字段供其他表关联时,比如“订单类型”列。什么时候用度量值?

几乎其他所有场景都推荐度量值,尤其是聚合计算: – 求和、平均值、计数、最大值、最小值等。- 时间智能(同比、环比、累计)。- 需要随筛选器动态变化的任何计算。

回到你的例子:“每个产品的利润率”,如果利润率 = (销售额 – 成本) / 销售额,这个值会随着你选择不同的时间、地区、客户群而变化,所以必须用度量值。如果你把它写成计算列,那么无论你怎么筛选,它都只基于原始行的固定值,结果会完全错误。

我有个真实踩坑案例:一个财务分析项目,我把所有利润率都写成计算列,最后发现按季度筛选后,利润率居然和全年一样,老板当场质疑。从那以后,我给自己定了个规矩:凡是涉及“率”、“占比”、“累计”、“变化”的,一律用度量值。

3. CALCULATE 函数到底怎么理解?我照着例子写,换个场景就报错。

我学会了 SUM、AVERAGE 这些基础函数,但一到 CALCULATE 就懵了。教程里说它是最强大的 DAX 函数,可以修改筛选上下文,但我每次自己写,要么结果不对,要么报“上下文转换错误”。

比如我想计算“上海地区去年同期的销售额”,用 CALCULATE 嵌套了 FILTER 和 SAMEPERIODLASTYEAR,结果是空白。到底哪里出了问题?

CALCULATE 是所有 DAX 学习者的“鬼门关”,我当初也是花了两周反复调试才真正理解它。先说结论:CALCULATE 的核心能力是“在现有的筛选环境中,临时覆盖或添加新的筛选条件”。它不计算任何东西,只是改变计算的环境,然后让内部的聚合函数(如 SUM)去执行。

你遇到的“上海地区去年同期销售额”报错,我猜大概率是这两个原因之一: 1. 你忘了在 CALCULATE 中显式指定“上海”这个筛选条件。CALCULATE 语法是:CALCULATE(表达式, 筛选条件1, 筛选条件2, …)。

如果你只写了 CALCULATE(SUM(销售额), SAMEPERIODLASTYEAR(日期表[日期])),那么“上海”这个筛选条件并没有被传递给 CALCULATE,它只会对全局的去年同期销售额求和。

正确写法是:CALCULATE(SUM(销售额), 地区表[地区] = "上海", SAMEPERIODLASTYEAR(日期表[日期]))。2. 日期表没有标记为日期表,或者与事实表之间的关系不连续。SAMEPERIODLASTYEAR 要求日期表必须被标记为“日期表”,且日期列必须连续无缺口。

如果日期表只有工作日,没有周末,就会导致函数返回空白。我教你一个万能调试方法:先写一个最简单的 CALCULATE,只加一个筛选条件,比如: CALCULATE(SUM(销售额), 地区表[地区] = "上海") 确认它能正确返回“上海的总销售额”。

然后逐步添加第二个条件,每次只加一个,直到所有条件都加进去。这样就能定位到是哪个条件出错了。另外,记住一个关键点:CALCULATE 内部的筛选条件会覆盖外部已有的筛选,而不是叠加。

如果你已经有一个“2024年”的切片器,又用 CALCULATE 添加了“2023年”的筛选,那么最终结果只有 2023 年,不会同时包含 2024 年。这是一个常见的认知误区。

最后,关于“上下文转换”错误,通常是因为你试图在 CALCULATE 内部使用行上下文(如 EARLIER 或变量中的行引用),但 CALCULATE 会自动将行上下文转换为筛选上下文,这个转换过程如果遇到不兼容的结构(比如多行关联),就会报错。

解决方案是:尽量在 CALCULATE 外部用变量计算好中间结果,再传入。

4. 数据建模中的‘星型模型’到底怎么建?到底选哪个表作为事实表?

我手头有订单表、客户表、产品表、员工表,还有一张退货表。按照教程说要建星型模型,但我不确定哪张是事实表,哪张是维度表。退货表该放在哪里?而且,我尝试把所有表都连到订单表上,结果模型里出现了好多交叉关系,报表数据对不上。求一个清晰的建表方法论。

星型模型看似简单,但实际建起来很多人会踩坑,我在第一次做进销存项目时就犯了错。核心原则只有一条:事实表记录“发生了什么”,维度表记录“关于谁、什么、何时、何地”。判断步骤: 1. 先找出你的业务核心事件。比如“一笔订单发生”、“一次退货发生”、“一次入库发生”。

每个事件对应一张事实表,表里通常包含度量值(金额、数量、日期、外键)。2. 对于每个事件,列出所有描述性信息。比如订单的客户名称、产品名称、销售员、下单日期等。这些描述性字段应该放在独立的维度表中,每张维度表有唯一的主键(如客户ID、产品ID)。3. 事实表通过外键与维度表关联。

例如订单表中有客户ID、产品ID、日期ID,分别关联到客户表、产品表、日期表。你的案例中,订单表和退货表都是事实表,因为它们是不同的业务事件。客户表、产品表、员工表、日期表是维度表。千万不要把退货表当成订单表的维度表!

正确做法:订单表与退货表之间不应该有直接关系,它们各自与共享的维度表(客户、产品、日期)关联。这样,你可以通过共同维度(比如客户)来交叉分析订单和退货的关联。

另外,我犯过的错误是:试图把所有事实表都连到同一张维度表上,导致模型出现“星座模型”(多事实表共享维度),这本身没问题,但要注意关系方向。建议每个事实表与维度表的关系都设为单向筛选,从维度表指向事实表。如果一定要双向,只保留最必要的一个,否则筛选逻辑会变得极其复杂,性能也会下降。

最后,教你一个检查模型是否健康的技巧:在 Power BI 的“模型视图”中,看有没有“环形关系”(比如表A->表B->表C->表A)。如果有,一定要打破一个,否则数据更新时会死循环。我见过一个项目因为环形关系,导致刷新一次要 2 小时。

核心关键词

读者评论

王安宁

文章把数据建模和DAX的关系讲得很透彻,尤其是80%时间建模、20%写DAX的比例,让我重新调整了学习重点。

魏然

从Excel转Power BI最容易踩的坑就是大宽表思维,这篇文章用零售案例把星型模型讲得通俗易懂,建议新手反复读。

任杰

计算列和度量值的对比解释很清楚,以前总爱用计算列,现在知道优先用度量值了,性能确实提升不少。

李卓

上下文那一块有点难,但文章用修改筛选环境来解释CALCULATE,比死记硬背语法好理解多了。

周然

关系方向单向为主的观点很实用,很多教程为了省事开双向,结果逻辑混乱,这篇文章纠正了常见误区。

免责申明:本文内容通过AI工具匹配关键字智能整合而成,仅供参考,帆软及九数云不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系jiushuyun@fanruan.com进行反馈,九数云收到您的反馈后将及时处理并反馈。
咨询方案
咨询方案二维码

扫码咨询方案

热门产品推荐

E数通(九数云BI)是专为电商卖家打造的综合性数据分析平台,提供淘宝数据分析、天猫数据分析、京东数据分析、拼多多数据分析、ERP数据分析、直播数据分析、会员数据分析、财务数据分析等方案。自动化计算销售数据、财务数据、绩效数据、库存数据,帮助卖家全局了解整体情况,决策效率高。

相关内容

查看更多
人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动

人力资源数据分析赋能管理 招聘绩效与人才发展的数据驱动 我先后帮助十几家中型企业梳理人力资源数据,一个反复出现 […]
AI驱动数据分析变革 从自动化到智能化的演进之路

AI驱动数据分析变革 从自动化到智能化的演进之路

数据量的增长从来没有像今天这样快,而企业决策的速度也从来没有像今天这样迫切。我服务过的多家制造业和零售业客户, […]
IT运维数据分析保障稳定 日志监控与故障预测的实践

IT运维数据分析保障稳定 日志监控与故障预测的实践

《IT运维数据分析保障稳定 日志监控与故障预测的实践》这个题目,市面上大多数内容会从工具安装讲起。我想先给一个 […]
大数据分析技术架构全景 从采集到洞察的完整链路

大数据分析技术架构全景 从采集到洞察的完整链路

去年冬天,我在一家年营收近 20 亿元的零售企业做数据架构顾问。他们的数据团队有 6 个人,投入了将近两年时间 […]
大数据与数字孪生 虚实映射的数据分析新场景

大数据与数字孪生 虚实映射的数据分析新场景

2024年初,我参与某汽车零部件企业数字孪生产线项目的技术评审。项目方用激光扫描重建了整个车间的三维模型,精度 […]

让电商企业精细化运营更简单

整合电商全链路数据,用可视化报表辅助自动化运营

让决策更精准