原创: 2024-04-03 14:29
家具销售分析
额外要求
除了引言中提到的主要要求外,还有另外两项要求。首先,我应该以一种方式组织度量,使同一类别中的度量共享一个公共标头,以获得更好的可读性。例如,像“成本”和“成本IYA”这样的度量应该分组在“成本”标题下。其次,在处理一组产品类别时,重点在于度量的特定子集,即“成本”和“收入”。相反,对于另一组类别,分析包含“税收”和“收入”的不同子集更有意义。
数据模型和所需调整
本文的初始数据模型非常简单。它包括将日历、产品和商店维度表与销售事实表连接起来。
正如您可以观察到的,时间粒度的基本变化不是由原始事实数据时间间隔的差异引起的。相反,它与业务如何感知和分析数据有关。
数据模型
为了满足最初的要求,我选择了利用计算日历层次表。当然,这也可以通过 Power Query 甚至在更上游的阶段实现。
日历维度表
calendar_hierarchy =
VAR _Years =
SELECTCOLUMNS (
Calendar_Dim,
"date_num", calendar_dim[date_num],
"date_num_ya", calendar_dim[date_num] - 10000,
"year", Calendar_Dim[Year],
"year order", Calendar_Dim[Year],
"level", "Year",
"level order", 1,
"element", Calendar_Dim[Year],
"element order",
CALCULATE ( MAX ( Calendar_Dim[Year] ) ) * 100000 + 12000
+ CALCULATE (
COUNTROWS ( Calendar_Dim ),
ALLEXCEPT ( Calendar_Dim, Calendar_Dim[Year] )
)
)
VAR _Quarters =
SELECTCOLUMNS (
ADDCOLUMNS (
Calendar_Dim,
"quarter_end_month_number",
CALCULATE (
MAX ( calendar_dim[month_num] ),
ALLEXCEPT ( Calendar_Dim, Calendar_Dim[quarter_num] )
)
),
"date_num", calendar_dim[date_num],
"date_num_ya", calendar_dim[date_num] - 10000,
"year", Calendar_Dim[Year],
"year order", Calendar_Dim[Year],
"level", "Quarter",
"level order", 2,
"element", calendar_dim[year_quarter],
"element order",
[quarter_end_month_number] * 1000
+ CALCULATE (
COUNTROWS ( Calendar_Dim ),
ALLEXCEPT ( Calendar_Dim, calendar_dim[quarter_num] )
)
)
VAR _Months =
SELECTCOLUMNS (
Calendar_Dim,
"date_num", calendar_dim[date_num],
"date_num_ya", calendar_dim[date_num] - 10000,
"year", Calendar_Dim[Year],
"year order", Calendar_Dim[Year],
"level", "Month",
"level order", 3,
"element", calendar_dim[year_month_name],
"element order",
CALCULATE ( MAX ( calendar_dim[month_num] ) ) * 1000
+ CALCULATE (
COUNTROWS ( Calendar_Dim ),
ALLEXCEPT ( Calendar_Dim, calendar_dim[month_num] )
)
)
VAR _Result =
UNION ( _Years, _Quarters, _Months )
RETURN
_Result
日历层次表
为了确保准确地计算calendar_hierarchy元素列和任何日历维度属性的年前度量,我按照下面概述的模式对DAX公式进行了改进。
认识到需要每季度显示成本度量,每年显示税收和收入度量,我发现理想的方法是将前面提到的日历层次表、计算组逻辑和不连接的组别表表结合起来。
组别表
计算组
但是,仅凭这一点还不能满足最终标准。为了解决这个问题,我决定引入一个类别组表(并将其与产品维度表和组别表相链接)。该表包括所有可能的产品类别组合,以及相应的最具商业意义的度量组。例如,"床 "类别主要通过成本和收入进行评估,而 “长凳”类别则通过税收和收入进行评估。
建立最终数据模型和矩阵
下面是最终确定的数据模型结构。
最终数据模型
考虑到计算组优先于可视化中使用的任何度量(注意,我并没有使用 SELECTEDMEASURER() 函数,而是直接引用了特定的度量),我创建了一个最基本的 DAX 度量,用于矩阵中。
矩阵设置
作为最后的补充,我还对索引与一年前的度量应用了独特的格式(如下面的示例所示)。这是通过在计算项中使用格式字符串表达式实现的。
CALCULATIONITEM "Cost IYA" =
IF (
SELECTEDVALUE ( groups[Group] ) = "Cost"
&& SELECTEDVALUE ( calendar_hierarchy[level] ) = "Quarter",
[Cost IYA]
)
FormatString = VAR _sign = IF( [Cost IYA] < 100, " ", " " ) VAR _result = _sign & "#,#0.0" RETURN _result
Ordinal = 1
如果您想深入学习微软Power BI,欢迎登录网易云课堂试听学习我们的“从Excel到Power BI数据分析可视化”系列课程。或者关注我们的公众号(PowerPivot工坊)后猛戳”在线学习”。
长按下方二维码关注“Power Pivot工坊”获取更多微软Power BI、PowerPivot相关文章、资讯,欢迎小伙伴儿们转发分享~