指标维度 - 1 - 海量科目前 N 名计算

数据模型有三类维度:

  • 日期维度。
  • 空间维度。
  • 指标维度。

你可能听过日期维度,但你可能没有听过空间维度和指标维度。这些都是这里的原创划分,你需要关注这些内容的讲法。

我是 BI 佐罗,今天来和大家分享 “指标维度”。

什么是指标维度

在财务数据模型中,一类非常重要,常见,特有而在其他模型中可能不存在的就是财务科目或指标。

但这一具体的实例的抽象,就是指标维度,它具有这样的特点:

  • 该维度的每个元素表示一个指标(KPI)。
  • 该维度的元素可能随着时间而增减。

与此类似的还有例如:电商系统导出的报表,也包含多列指标,例如:浏览次数,浏览人数,跳出时间,访问深度,购买数量,购买金额等。甚至提供给用户一个功能,可以选择不同的指标列进行导出。

对于复杂的场景,可能达到,导出超过 100 个指标以上。

指标维度陷阱

系统导出的报表往往是透视过的,形如:

这样的结构是不能做分析的。

必须进行逆透视。

什么样的东西分析不了

如果要计算,对比的内容位于列头,就无法进行计算和对比。

其常见特点包括:

  • 位于列头。
  • 随着时间的推移,列数可能变化。

这都预示着这些可变的元素不在分析的范畴中。

还原为内容

将列头元素还原到内容区域的过程,称为:数据还原,或逆透视。

它将列头元素还原为内容。内容是可以被分析的。

同时,为这个内容以及对应的值起名,如下:

只显示 TOPN 值的 KPI

先来看效果,如下:

这里将 AccountCode 放入矩阵的行;将 KPI 放入矩阵的列;然后定义一个计算度量值来根据选择的参数实现计算。如下:

代码语言:javascript
复制
KPI.TopX =

VAR vTopX = [Var.X.Value]

VAR vItemCurrent =

SELECTEDVALUE( FactKPI[AccountCode] )

VAR vKPICurrent =

SELECTEDVALUE( FactKPI[KPI] )

VAR vTable =
CALCULATETABLE(
ADDCOLUMNS(
SUMMARIZE( FactKPI , [AccountCode] ),

        "Value" , [KPI.Value]
    ) ,
    FactKPI[KPI] = vKPICurrent ,
    ALLSELECTED( )

)

VAR vTableRanked =
ADDCOLUMNS(

    vTable ,
    "Rank" , RANKX( vTable , [Value] )
)

VAR vRowSet =
FILTER( vTableRanked ,

    [Rank] <= vTopX &&
    [AccountCode] = vItemCurrent
)

RETURN

SUMX( vRowSet , [Value] )</code></pre></div></div><p>其中,以上做法对于初学者可能需要解释为什么,而且看着很复杂,但对于正确学习了 DAX 的伙伴,不能看出其主体框架套路是恒久不变的,如下:</p><ul class="ul-level-0"><li>初始化一些当前元素,暂存一下。</li><li>发起视图层计算。</li><li>视图层计算的扩展。</li><li>过滤一个行集。</li><li>在当前单元格聚合。</li></ul><p>以上五步,是视图层计算的通用模式,在《PBI - 高级》和此前文章中已经详细讲解,这里不再展开。</p><blockquote><p>💡提示

利用一些固有模式使用 DAX 并不复杂,可以极大降低每次要理解上下文或上下文转换的问题。

总结

本文是指标维度系列的一篇入门文章。并结合到一个案例中。后续会进一步讲解指标维度的各种通用思维和模式。

这对财务小伙伴来理解如何使用数据模型应用到财务领域是非常重要的基础。

案例讲解,独到见解