属于我们的Data Analytics & BI系列
阅读完整指南每个业务用户都应该知道的 DAX 公式
DAX(数据分析表达式)是一种公式语言,它将 Power BI 从简单的图表工具转变为成熟的分析引擎。虽然 Power BI 的拖放界面可以处理基本聚合,但真正的商业智能需要 DAX。同比比较、滚动平均值、排名、假设情景和复杂的 KPI 都依赖于 DAX 公式。
挑战在于 DAX 看起来看似简单,但其行为方式甚至令经验丰富的 Excel 用户感到惊讶。筛选上下文、行上下文和上下文转换的概念是 DAX 所独有的,在 Excel 或 SQL 中没有直接等效的概念。本指南重点介绍面向业务用户的 20 个最实用的 DAX 公式,以及您可以立即适应的实际示例。
要点
- CALCULATE 是最重要的 DAX 函数 --- 它修改过滤器上下文,并用于超过 80% 的重要测量
- 时间智能函数(TOTALYTD、SAMEPERIODLASTYEAR、DATEADD)需要在模型中标记正确的日期表
- VAR/RETURN 语法使复杂的测量可读并避免冗余计算
- 迭代器函数(SUMX、AVERAGEX、RANKX)逐行计算表达式,而聚合器(SUM、AVERAGE)对列进行操作
- 当计算列或迭代器调用度量时,会发生上下文转换,将行上下文转换为筛选器上下文
- SWITCH(TRUE(), ...) 取代了嵌套的 IF 语句,并且更具可读性
- ALL、ALLEXCEPT 和 REMOVEFILTERS 控制哪些过滤器处于活动状态 --- 但要小心 RLS 影响
基础:过滤上下文和行上下文
在深入研究公式之前,了解这两个概念至关重要。 DAX 中的每个混乱都可以追溯到筛选上下文和行上下文。
过滤上下文
过滤器上下文是应用于计算的一组过滤器。它来自切片器、视觉过滤器、页面过滤器、报告过滤器和 RLS。当您将度量放置在行上为“年份”、列上为“区域”的矩阵视觉对象中时,每个单元格都具有唯一的筛选器上下文:(年份 = 2025,区域 = 北美)、(年份 = 2025,区域 = 欧洲、中东和非洲)等。
每个 DAX 聚合函数(SUM、AVERAGE、COUNT、MIN、MAX)都会在当前筛选器上下文中进行计算。过滤为 2025 + 北美的单元格中的 SUM(Sales[Revenue]) 仅对符合这两个条件的收入行进行求和。
行上下文
行上下文存在于计算列和迭代器函数内部。它的意思是“当前行”。在“销售”表的计算列中,Sales[Revenue] * Sales[Quantity] 单独计算每一行。
上下文转换
当迭代器函数(如 SUMX)调用度量时,行上下文会自动转换为筛选器上下文。这称为上下文转换。它功能强大,但如果使用不当,可能会导致性能问题。
-- Row context exists here (iterating over Products)
Revenue Per Product =
SUMX(
Products,
[Total Revenue] -- This measure is evaluated in filter context
-- where the current product's ID filters the Sales table
)
了解这些概念使每个 DAX 公式变得直观。如果没有它们,DAX 公式就像黑匣子。
20 个基本公式
1. 计算 — 修改过滤器上下文
CALCULATE 是最重要的 DAX 函数。它评估修改后的过滤器上下文中的表达式。
语法: CALCULATE(expression, filter1, filter2, ...)
示例:仅来自大订单的收入
Large Order Revenue =
CALCULATE(
SUM(Sales[Revenue]),
Sales[OrderTotal] > 10000
)
示例:特定产品类别的收入
Electronics Revenue =
CALCULATE(
SUM(Sales[Revenue]),
Products[Category] = "Electronics"
)
CALCULATE 替换指定列上的现有过滤器。如果切片器已将类别筛选为“服装”,则电子收入度量将忽略该切片器并显示电子收入,因为 CALCULATE 会覆盖类别筛选器。
2. FILTER — 行级过滤
FILTER 返回按条件过滤的表。它通常在 CALCULATE 内部用于无法表示为简单列比较的复杂过滤。
语法: FILTER(table, condition)
示例:来自订单数量超过 5 个的客户的收入
Revenue From Repeat Customers =
CALCULATE(
SUM(Sales[Revenue]),
FILTER(
Customers,
CALCULATE(COUNTROWS(Sales)) > 5
)
)
重要提示: FILTER 逐行迭代,使其比大型表上的简单 CALCULATE 过滤器慢。仅当直接柱过滤器不够用时才使用它。
3. ALL — 删除所有过滤器
ALL 从表或列中删除所有过滤器,返回完整的未过滤表。它用于计算总计、总计百分比和比率。
语法: ALL(table) 或 ALL(table[column])
示例:收入占总收入的百分比
Revenue % of Total =
DIVIDE(
SUM(Sales[Revenue]),
CALCULATE(SUM(Sales[Revenue]), ALL(Sales))
)
当切片器过滤到“北美”时,SUM(Sales[Revenue]) 返回北美的收入。 CALCULATE(SUM(Sales[Revenue]), ALL(Sales)) 删除所有过滤器并返回全球收入。除法给出了百分比。
4. ALLEXCEPT — 删除除指定之外的所有过滤器
ALLEXCEPT 从表中删除除指定列之外的所有筛选器。当您想要保留一些过滤器(例如年份)同时删除其他过滤器(例如产品类别)时,这非常有用。
语法: ALLEXCEPT(table, column1, column2, ...)
示例:当年的收入份额
Revenue % of Year Total =
DIVIDE(
SUM(Sales[Revenue]),
CALCULATE(
SUM(Sales[Revenue]),
ALLEXCEPT(Sales, DateTable[Year])
)
)
这显示了选定年份内每个产品或地区的收入份额,而不是所有时间的收入份额。
5. TOTALYTD — 年初至今
TOTALYTD 计算上下文中从年初到当前日期的运行总计。
语法: TOTALYTD(expression, dates[date_column], [filter], [year_end_date])
示例:年初至今的收入
Revenue YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date])
截至 6 月 30 日的财政年度:
Revenue Fiscal YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date], "6/30")
先决条件: DateTable 必须在模型中标记为日期表(“表工具”,然后“标记为日期表”)。
6. SAMEPERIODLASTYEAR — 同比
SAMEPERIODLASTYEAR 将日期上下文向后移动整整一年。
语法: SAMEPERIODLASTYEAR(dates[date_column])
示例:收入与去年相比
Revenue PY =
CALCULATE(SUM(Sales[Revenue]), SAMEPERIODLASTYEAR(DateTable[Date]))
Revenue YoY Growth =
VAR CurrentRevenue = SUM(Sales[Revenue])
VAR PriorRevenue = [Revenue PY]
RETURN
DIVIDE(CurrentRevenue - PriorRevenue, PriorRevenue, 0)
在月度矩阵中,每行显示当月和上一年同月的收入以及增长百分比。
7. DATEADD — 灵活的时间转换
DATEADD 按任意间隔移动日期:天、月、季度或年。它比 SAMEPERIODLASTYEAR 更灵活。
语法: DATEADD(dates[date_column], intervals, interval_type)
示例:3 个月前的收入
Revenue 3 Months Ago =
CALCULATE(
SUM(Sales[Revenue]),
DATEADD(DateTable[Date], -3, MONTH)
)
示例:滚动 12 个月收入
Revenue Rolling 12M =
CALCULATE(
SUM(Sales[Revenue]),
DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)
8. RANKX — 动态排名
RANKX 根据表达式为每个项目分配排名。
语法: RANKX(table, expression, [value], [order], [ties])
示例:按收入对产品进行排名
Product Revenue Rank =
RANKX(
ALL(Products[ProductName]),
[Total Revenue],
,
DESC,
DENSE
)
ALL(Products[ProductName]) 提供要排名的完整产品列表,无论产品上的切片器过滤器如何。 DESC 表示最高收入排名 1。DENSE 表示并列值获得相同排名。
示例:Top N 过滤器
Top 10 Products Revenue =
CALCULATE(
[Total Revenue],
FILTER(
ALL(Products[ProductName]),
RANKX(ALL(Products[ProductName]), [Total Revenue], , DESC) <= 10
)
)
9. SWITCH — 条件逻辑
SWITCH 取代了嵌套的 IF 语句,并且更具可读性。
语法: SWITCH(expression, value1, result1, value2, result2, ..., else_result)
示例:客户细分分类
Customer Segment =
SWITCH(
TRUE(),
[Total Revenue] > 100000, "Enterprise",
[Total Revenue] > 25000, "Mid-Market",
[Total Revenue] > 5000, "SMB",
"Startup"
)
示例:动态度量选择
Selected Measure =
SWITCH(
SELECTEDVALUE(MeasureSelector[Measure]),
"Revenue", [Total Revenue],
"Orders", [Order Count],
"AOV", [Average Order Value],
"Margin", [Gross Margin %],
[Total Revenue]
)
此模式与切片器配合使用,让用户选择要在图表中显示的指标。
10. VAR / RETURN — 变量
变量存储中间结果,使公式可读并避免冗余计算。变量被评估一次并重复使用。
语法: VAR name = expression RETURN final_expression
示例:带有变量的复杂 KPI
Customer Health Score =
VAR Revenue = [Total Revenue]
VAR OrderCount = [Order Count]
VAR DaysSinceLastOrder =
DATEDIFF(MAX(Sales[OrderDate]), TODAY(), DAY)
VAR RevenueScore =
SWITCH(TRUE(), Revenue > 50000, 3, Revenue > 10000, 2, 1)
VAR FrequencyScore =
SWITCH(TRUE(), OrderCount > 20, 3, OrderCount > 5, 2, 1)
VAR RecencyScore =
SWITCH(TRUE(), DaysSinceLastOrder < 30, 3, DaysSinceLastOrder < 90, 2, 1)
RETURN
RevenueScore + FrequencyScore + RecencyScore
如果没有变量,该公式将多次重复相同的计算,使其不可读且速度较慢。
11. DIVIDE — 安全除法
DIVIDE 优雅地处理除零,返回指定的替代结果而不是错误。
语法: DIVIDE(numerator, denominator, [alternate_result])
示例:
Conversion Rate =
DIVIDE([Closed Won Deals], [Total Opportunities], 0)
在度量中始终使用 DIVIDE 而不是 / 运算符。除以零时, / 运算符会返回错误,从而破坏视觉效果。
12. DISTINCTCOUNT — 计算唯一值
DISTINCTCOUNT 计算列中唯一值的数量。
语法: DISTINCTCOUNT(column)
示例:该期间的活跃客户
Active Customers =
DISTINCTCOUNT(Sales[CustomerID])
这统计了在当前过滤器上下文(选定的月份、季度等)中至少进行过一次购买的唯一客户。
13. COUNTROWS — 计算表中的行数
COUNTROWS 计算表中的行数,可以选择过滤。
语法: COUNTROWS(table)
示例:订单数
Order Count =
COUNTROWS(Sales)
Cancelled Orders =
CALCULATE(
COUNTROWS(Sales),
Sales[Status] = "Cancelled"
)
14. SUMX — 逐行求和
SUMX 是一个迭代器,它计算每行的表达式并对结果求和。当您需要在求和之前乘以列时,这一点至关重要。
语法: SUMX(table, expression)
示例:加权平均计算
Weighted Average Price =
DIVIDE(
SUMX(Sales, Sales[Quantity] * Sales[UnitPrice]),
SUM(Sales[Quantity])
)
SUM 不能将两列相乘。您需要 SUMX 来计算每行的数量乘以单价,然后对结果求和。
15. AVERAGEX — 逐行平均
AVERAGEX 是 AVERAGE 的迭代器版本。
语法: AVERAGEX(table, expression)
示例:平均关闭天数
Average Days to Close =
AVERAGEX(
Opportunities,
DATEDIFF(Opportunities[CreatedDate], Opportunities[ClosedDate], DAY)
)
16. MAXX 和 MINX — 迭代器最小值/最大值
MAXX 和 MINX 查找逐行计算的表达式的最大值或最小值。
示例:每个客户的最新订单日期
Most Recent Order =
MAXX(Sales, Sales[OrderDate])
Oldest Unpaid Invoice =
MINX(
FILTER(Invoices, Invoices[PaymentStatus] = "Unpaid"),
Invoices[InvoiceDate]
)
17. LOOKUPVALUE — VLOOKUP 等效项
LOOKUPVALUE 根据一个或多个搜索条件从表中检索值。它相当于 Excel 的 VLOOKUP 的 DAX。
语法: LOOKUPVALUE(result_column, search_column, search_value, ...)
示例:
Customer Region =
LOOKUPVALUE(
Customers[Region],
Customers[CustomerID], Sales[CustomerID]
)
注意: LOOKUPVALUE 通常用于计算列,而不是度量。在度量中,首选 RELATED(对于多对一)或 RELATEDTABLE(对于一对多)。
18. SELECTEDVALUE — 获取当前切片器值
当筛选器上下文中只有一个值时,SELECTEDVALUE 返回列的值。如果选择了多个值,它将返回替代结果。
语法: SELECTEDVALUE(column, [alternate_result])
示例:动态标题
Chart Title =
"Revenue for " & SELECTEDVALUE(DateTable[Year], "All Years")
19. ISBLANK — 检查空值
ISBLANK 测试值是否为空(null/empty)。
示例:没有指定销售人员的订单
Unassigned Orders =
CALCULATE(
COUNTROWS(Sales),
ISBLANK(Sales[SalespersonID])
)
20. CONCATATEX — 连接表中的值
CONCATATEX 迭代表并将值连接成单个字符串。
语法: CONCATENATEX(table, expression, [delimiter], [order_by], [order])
示例:客户购买的产品列表
Products Purchased =
CONCATENATEX(
VALUES(Products[ProductName]),
Products[ProductName],
", ",
Products[ProductName], ASC
)
在客户详细信息表中,显示每个客户的“产品 A、产品 B、产品 C”。
时间智能深度探究
时间智能是业务用户需要 DAX 的最常见原因。 Power BI 的时间智能功能需要专用的日期表。这是一套全面的时间衡量标准。
先决条件:日期表
您的模型必须有一个日期表,其中包含:
- 覆盖整个数据范围的连续日期列(无间隙)
- 标记为日期表的表格(表格工具,然后标记为日期表)
- 从日期表的日期列到每个事实表的日期列的关系
常见的时间情报措施
-- Month-to-Date
Revenue MTD =
TOTALMTD(SUM(Sales[Revenue]), DateTable[Date])
-- Quarter-to-Date
Revenue QTD =
TOTALQTD(SUM(Sales[Revenue]), DateTable[Date])
-- Year-to-Date
Revenue YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date])
-- Previous Month
Revenue PM =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSMONTH(DateTable[Date]))
-- Previous Quarter
Revenue PQ =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSQUARTER(DateTable[Date]))
-- Previous Year
Revenue PY =
CALCULATE(SUM(Sales[Revenue]), PREVIOUSYEAR(DateTable[Date]))
-- Month-over-Month Growth
Revenue MoM % =
VAR Current = SUM(Sales[Revenue])
VAR Prior = [Revenue PM]
RETURN DIVIDE(Current - Prior, Prior, 0)
-- Year-over-Year Growth
Revenue YoY % =
VAR Current = SUM(Sales[Revenue])
VAR Prior = [Revenue PY]
RETURN DIVIDE(Current - Prior, Prior, 0)
-- Rolling 3-Month Average
Revenue 3M Avg =
AVERAGEX(
DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -3, MONTH),
CALCULATE(SUM(Sales[Revenue]))
)
-- Cumulative Total (Running Sum)
Revenue Cumulative =
CALCULATE(
SUM(Sales[Revenue]),
FILTER(
ALL(DateTable[Date]),
DateTable[Date] <= MAX(DateTable[Date])
)
)
财政年度时间情报
如果您的会计年度与日历年度不一致,请使用可选的year_end_date参数:
-- Fiscal Year ending March 31
Revenue Fiscal YTD =
TOTALYTD(SUM(Sales[Revenue]), DateTable[Date], "3/31")
-- Or use DATESYTD for more control
Revenue Fiscal YTD v2 =
CALCULATE(
SUM(Sales[Revenue]),
DATESYTD(DateTable[Date], "3/31")
)
上下文转换:隐藏引擎
上下文转换是在调用度量时将行上下文(来自计算列或迭代器)转换为筛选器上下文的过程。这是 DAX 中最强大也是最容易被误解的概念。
它是如何运作的
考虑这个措施:
Total Revenue = SUM(Sales[Revenue])
产品表上的计算列:
Product Revenue = [Total Revenue]
在计算列中,有行上下文(当前产品行)。当调用 [Total Revenue] 时,上下文转换会将行上下文转换为过滤器:CALCULATE(SUM(Sales[Revenue]), Products[ProductID] = <current row's ProductID>)。结果是该特定产品的收入。
性能影响
上下文转换在测量调用周围添加隐式 CALCULATE。对于小表来说,这个可以忽略不计。对于具有复杂度量的大型表,它可能会很昂贵。避免在大型表的迭代器内调用复杂的度量。
效率低下:
-- Iterates over every customer, calling a complex measure each time
Customer Profitability =
SUMX(
Customers,
[Revenue] - [COGS] - [Allocated Overhead]
)
更好:
-- Pre-compute the components and use simple arithmetic
Customer Profitability =
SUM(Sales[Revenue]) - SUM(Sales[COGS]) -
DIVIDE(SUM(Sales[Revenue]), [Total Revenue]) * [Total Overhead]
实际业务场景
场景 1:ABC 分析(帕累托分类)
将产品分为 A(收入前 80%)、B(接下来 15%)和 C(收入后 5%):
ABC Class =
VAR CurrentProduct = SELECTEDVALUE(Products[ProductName])
VAR AllProducts =
ADDCOLUMNS(
ALL(Products[ProductName]),
"@Revenue", [Total Revenue]
)
VAR Sorted = TOPN(COUNTROWS(AllProducts), AllProducts, [@Revenue], DESC)
VAR TotalRev = SUMX(AllProducts, [@Revenue])
VAR CumulativeRev =
SUMX(FILTER(Sorted, [@Revenue] >= [Total Revenue]), [@Revenue])
VAR CumulativePct = DIVIDE(CumulativeRev, TotalRev)
RETURN
SWITCH(TRUE(),
CumulativePct <= 0.8, "A",
CumulativePct <= 0.95, "B",
"C"
)
场景 2:群组保留分析
跟踪每个收购群体中有多少客户随着时间的推移保持活跃:
Cohort Retention Rate =
VAR CohortMonth = SELECTEDVALUE(DateTable[YearMonth])
VAR CohortCustomers =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerID]),
FILTER(
ALL(Sales),
FORMAT(Sales[FirstPurchaseDate], "YYYY-MM") = CohortMonth
)
)
VAR ActiveCustomers =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerID]),
FILTER(
ALL(Sales),
FORMAT(Sales[FirstPurchaseDate], "YYYY-MM") = CohortMonth
)
)
RETURN
DIVIDE(ActiveCustomers, CohortCustomers, 0)
场景 3:移动年度总计 (MAT)
通过对过去 12 个完整月份求和,移动年度总数可以平滑季节性:
Revenue MAT =
CALCULATE(
SUM(Sales[Revenue]),
DATESINPERIOD(DateTable[Date], MAX(DateTable[Date]), -12, MONTH)
)
Revenue MAT Growth =
VAR Current = [Revenue MAT]
VAR Prior =
CALCULATE(
[Revenue MAT],
DATEADD(DateTable[Date], -12, MONTH)
)
RETURN
DIVIDE(Current - Prior, Prior, 0)
迭代器与聚合器:何时使用每个迭代器
聚合函数
SUM、AVERAGE、COUNT、MIN、MAX 对单个列进行操作。它们速度很快,因为存储引擎可以直接从压缩的列数据中解析它们。
**使用时:**您需要一列的简单聚合。
迭代器函数
SUMX、AVERAGEX、COUNTX、MINX、MAXX、RANKX 逐行计算表达式。它们更灵活但速度更慢,因为公式引擎处理每一行。
使用时间:
- 聚合之前需要将列相乘(SUMX 用于加权计算)
- 您需要对每行应用一个条件(COUNTX 和 IF)
- 您需要对项目进行排名(RANKX)
- 计算取决于需要行级评估的相关表中的值
性能经验法则: 如果使用聚合器可以实现相同的结果,请使用聚合器。仅当需要逐行评估时才使用迭代器。
调试 DAX
常见错误消息
| 错误 | 原因 | 修复 |
|---|---|---|
| “X 列需要一个单一值” | 测量返回多个预期值 | 使用 SELECTEDVALUE、MAX 或 CALCULATE 减少到一个值 |
| “循环依赖” | 两个计算列或度量相互引用 | 重新设计计算链,消除循环 |
| “无法确定关系” | 表之间的关系路径不明确 | 在 USERELATIONSHIP 中指定关系或激活它 |
| “表达式引用多个列” | ALL/VALUES 不正确地与多列一起使用 | 使用 ALL(Table) 或 ALL(Table[Col1], Table[Col2]) |
性能分析器
Power BI Desktop 的性能分析器(视图,然后是性能分析器)显示每个视觉对象的 DAX 查询和执行时间。用它来:
- 识别缓慢的视觉效果(超过 1 秒) 2.将DAX查询复制到DAX Studio进行详细分析
- 优化措施时比较执行前后的时间
DAX 工作室
DAX Studio 是一个免费的外部工具,提供详细的查询分析。它显示:
- 存储引擎查询(快速、列存储扫描)
- 公式引擎查询(较慢,逐行评估)
- 物化大小(引擎之间的数据洗牌)
如果某个度量生成许多公式引擎查询,则它可能使用太多迭代器或复杂的 FILTER 表达式。重构以将更多工作推给存储引擎。
对于从基础知识到高级优化涵盖 DAX 的 Power BI 培训,ECOSIRE 提供针对您的特定数据集和业务问题量身定制的实践研讨会。
常见问题解答
度量和计算列之间有什么区别?
在查询时在当前过滤器上下文中评估度量。它不会向表中添加数据——它会动态计算值。计算列在数据刷新时进行评估,并向表中添加物理列。使用根据切片器和过滤器而变化的聚合和 KPI 度量。将计算列用于行级分类或需要在切片器、筛选器或关系中使用的值。测量几乎总是首选,因为它们不会增加模型大小。
为什么我的年初至今度量值显示不正确的值?
最常见的原因是您的日期表配置不正确。验证三件事:(1) 日期表没有间隙 --- 从数据开始到现在的每个日期都必须包含在内,(2) 该表在 Power BI 中标记为日期表(“表工具”,然后“标记为日期表”),(3) 日期表与事实表之间的关系处于活动状态且正确映射。另请检查您的日期列是否不包含妨碍精确匹配的时间部分。
什么时候应该使用 CALCULATE 和 FILTER?
当您可以将过滤器表示为简单的列比较(例如 Products[Category] = "Electronics")时,请使用 CALCULATE。 CALCULATE 将其转换为存储引擎可以优化的高效过滤器。当您需要引用多个列或调用度量的复杂逐行条件时,请使用 FILTER(例如,过滤 CALCULATE(COUNTROWS(Sales)) > 5 的客户)。 FILTER 是一个迭代器,速度较慢,因此尽可能选择 CALCULATE 的简单语法。
如何在 DAX 中创建运行总计或累计总和?
将 CALCULATE 与包含截至当前日期的所有日期的筛选器一起使用:Revenue Cumulative = CALCULATE(SUM(Sales[Revenue]), FILTER(ALL(DateTable[Date]), DateTable[Date] <= MAX(DateTable[Date])))。这将删除现有的日期过滤器 (ALL),并将其替换为包含当前上下文中从开始日期到最大日期的所有日期的过滤器。在每月矩阵中,每行显示该月的累计总数。
我可以使用DAX将数据写回数据库吗?
不。DAX 是一种只读查询语言。它可以计算、过滤和转换数据以供显示,但不能插入、更新或删除源数据库中的数据。对于写回方案,请使用 Power BI 中嵌入的 Power Apps,或使用由 Power BI 警报触发的 Power Automate 流。一些第三方工具(Acterys、Writeback Manager)通过自定义视觉效果添加回写功能。
作者
ECOSIRE Research and Development Team
在 ECOSIRE 构建企业级数字产品。分享关于 Odoo 集成、电商自动化和 AI 驱动商业解决方案的洞见。
相关文章
Power BI AI 功能:Copilot、AutoML 和预测分析
掌握 Power BI AI 功能,包括用于自然语言报告的 Copilot、用于预测的 AutoML、异常检测和智能叙述。许可指南。
Power BI 仪表板开发完整指南
了解如何使用 KPI 设计、可视化最佳实践、钻取页面、书签、移动布局和 RLS 安全性来构建有效的 Power BI 仪表板。
Power BI 数据建模:商业智能的星型架构设计
通过星型模式设计、事实和维度表、DAX 度量、计算组、时间智能和复合模型掌握 Power BI 数据建模。
更多来自Data Analytics & BI
Power BI 仪表板开发完整指南
了解如何使用 KPI 设计、可视化最佳实践、钻取页面、书签、移动布局和 RLS 安全性来构建有效的 Power BI 仪表板。
Power BI Embedded:向您的应用程序添加分析
将 Power BI 分析嵌入您的 SaaS 应用程序中。涵盖身份验证、多租户 RLS、容量调整、JavaScript SDK、自定义主题和 Fabric 定价。
从 Excel 迁移到 Power BI:分步指南
从 Excel 迁移到 Power BI 的完整指南,涵盖公式转换、数据模型创建、Power Query、验证和停用。
Power BI + Odoo 集成完整指南
将 Power BI 连接到 Odoo ERP 以进行高级分析。 PostgreSQL 直接查询、关键表、销售/库存/HR 仪表板和增量刷新设置。
衡量商业中的人工智能投资回报率:一个真正有效的框架
用于衡量人工智能投资回报的实用框架,涵盖直接节省、生产力提升、收入影响和跨部门的战略价值。
构建财务报告仪表板:KPI、设计和 ERP 集成
设计推动决策的财务报告仪表板。了解要跟踪哪些 KPI、仪表板设计原则和 ERP 集成最佳实践。