Power BI基于SQL数据源的产品价格变动追踪与利润可视化DAX实现
需求实现方案:Power BI中处理未来生效的产品价格变动
示例SQL数据表结构及数据
假设SQL数据库包含以下核心表:
1. 产品表(Products)
| ProductID | ProductName | CostPrice |
|---|---|---|
| 1 | 产品A | 50 |
| 2 | 产品B | 80 |
| 3 | 产品C | 30 |
2. 销售表(Sales)
| SaleID | ProductID | SaleDate | Quantity |
|---|---|---|---|
| 1 | 1 | 2024-01-10 | 10 |
| 2 | 2 | 2024-02-15 | 5 |
| 3 | 1 | 2024-03-20 | 8 |
3. 价格变动表(PriceChanges)
| ChangeID | ProductID | NewPrice | EffectiveDate |
|---|---|---|---|
| 1 | 1 | 75 | 2024-04-01 |
| 2 | 2 | 110 | 2024-03-01 |
| 3 | 3 | 45 | 2024-05-01 |
DAX度量值编写
首先需在Power BI中建立表关系:Products[ProductID]关联Sales[ProductID]与PriceChanges[ProductID],并创建日期表作为时间维度基础。
1. 日期表(DAX生成)
DateTable = CALENDAR(DATE(2023,1,1), DATE(2024,12,31))
2. 当前生效销售价格(含未来生效逻辑)
根据所选日期自动匹配已生效的最新价格,无变动时使用默认初始售价(可根据业务调整):
Current Selling Price = VAR SelectedDate = MAX(DateTable[Date]) VAR LatestValidChange = CALCULATE( MAX(PriceChanges[EffectiveDate]), PriceChanges[EffectiveDate] <= SelectedDate, ALLEXCEPT(PriceChanges, PriceChanges[ProductID]) ) VAR DefaultPrice = MAX(Products[CostPrice]) * 1.5 -- 默认按成本价上浮50%作为初始售价 RETURN IF( NOT(ISBLANK(LatestValidChange)), CALCULATE(MAX(PriceChanges[NewPrice]), PriceChanges[EffectiveDate] = LatestValidChange), DefaultPrice )
3. 产品利润计算
Product Profit = SUMX( Sales, ( [Current Selling Price] - RELATED(Products[CostPrice]) ) * Sales[Quantity] )
4. 未来价格变动追踪
Upcoming Price Change = VAR Today = TODAY() VAR NextEffectiveDate = CALCULATE( MIN(PriceChanges[EffectiveDate]), PriceChanges[EffectiveDate] > Today, ALLEXCEPT(PriceChanges, PriceChanges[ProductID]) ) RETURN IF( NOT(ISBLANK(NextEffectiveDate)), "新价格: " & CALCULATE(MAX(PriceChanges[NewPrice]), PriceChanges[EffectiveDate] = NextEffectiveDate) & " (生效日期: " & FORMAT(NextEffectiveDate, "YYYY-MM-DD") & ")", "无即将生效的价格变动" )
可视化配置
利润可视化
- 折线图:X轴选
DateTable[Date],Y轴选[Product Profit],图例选Products[ProductName],展示各产品利润随时间的趋势。 - 卡片图:配置
SUM([Product Profit]),展示总利润。
价格变动追踪
- 表格:列选
Products[ProductName]、[Current Selling Price]、[Upcoming Price Change],清晰呈现各产品当前价格及未来变动信息。 - 矩阵图:行选
Products[ProductName],列选PriceChanges[EffectiveDate],值选PriceChanges[NewPrice],直观查看全量历史/未来价格变动记录。
内容的提问来源于stack exchange,提问作者Fustavo Gringe
相关产品推荐
相关产品推荐

