Power BI - Dax 期初余额按分行、账户和子账户衡量

问题描述 投票:0回答:1

对一个非常菜鸟的问题表示歉意,但我正在努力想出正确的措施。我有一个总账表 43,000 行(FCT_GL_Details),其中包含我想要合并到跟踪余额(FCT_GL_TB)中的交易,按“yyyy”格式的“分支”、“账户”、“子账户”、“finYear”分组、“mm”格式的 finMonth、“PeriodID”( FinYearFinMonth 为“yyyymm”,然后对 NettAmt 求和(我将其称为 NettAmt)。我创建了一个引用表并按上述分组。我现在需要的是两个期初余额,一个是截至目前的余额 (LTD_Opening ),以及基于同一财政年度的年初至今 (YTD_Opening)。

Excel 等效项是:

LTD_Opening = sumifs([NettAmt],[Periodid],"<"&[@[PeriodID]],[Branch],[@[Branch]],[Account],[@[Account]],[Subaccount],[@[Subaccount]])
and YTD would include ... ",[FinYear],[@[FinYear]])

我正在努力解决过滤如何从 Excel 约定切换为行值添加前缀“@”的问题。

示例如下:

非常感谢您对此的帮助。

大卫

sum powerbi dax
1个回答
0
投票

虽然我对您的期初余额考虑有些困惑,但您可以通过下面给出的几个自定义列措施来实现所需的输出-

首先让我们创建一个日期自定义列,使用 FinYear 和 FinMonth 中的值检查所有月份的日期,如下所示 -

first_date_of_month = DATE(your_table_name[finyear],your_table_name[finmonth],1)

现在再创建下面 2 个自定义列,从中我们可以检查该行属于相应的 Branch 和 FinYear 的 Opening date。

is_initial_opening_of_branch = 

var current_row_branch = your_table_name[branch]
var current_row_first_date_of_month = your_table_name[first_date_of_month]

var check_first_balance_of_branch =
CALCULATE(
    COUNTROWS(your_table_name),
    FILTER(
        ALL(your_table_name),
        your_table_name[branch] = current_row_branch
        && your_table_name[first_date_of_month] <= current_row_first_date_of_month
    )
)

return IF(check_first_balance_of_branch = 1,1,0)
is_initial_opening_of_finyear = 

var current_row_branch = your_table_name[branch]
var current_row_finyear = your_table_name[finyear]
var current_row_first_date_of_month = your_table_name[first_date_of_month]

var check_first_balance_of_branch_finyear =
CALCULATE(
    COUNTROWS(your_table_name),
    FILTER(
        ALL(your_table_name),
        your_table_name[branch] = current_row_branch
        && your_table_name[finyear] = current_row_finyear
        && your_table_name[first_date_of_month] <= current_row_first_date_of_month
    )
)

return IF(check_first_balance_of_branch_finyear = 1,1,0)

现在让我们创建您所需的2个措施,如下所示-

ltd_opening = 

var current_row_branch = MIN(your_table_name[branch])
var current_row_first_date_of_month = MIN(your_table_name[first_date_of_month])

return 
CALCULATE(
    sum(your_table_name[nett]),
    FILTER(
        ALL(your_table_name),
        your_table_name[branch] = current_row_branch
        && your_table_name[first_date_of_month] <= current_row_first_date_of_month
        && your_table_name[is_initial_opening_of_branch] <> 1 
    )
) + 0
ytd_opening = 

var current_row_branch = MIN(your_table_name[branch])
var current_row_finyear = MIN(your_table_name[finyear])
var current_row_first_date_of_month = MIN(your_table_name[first_date_of_month])

return 
CALCULATE(
    sum(your_table_name[nett]),
    FILTER(
        ALL(your_table_name),
        your_table_name[branch] = current_row_branch
        && your_table_name[finyear] = current_row_finyear
        && your_table_name[first_date_of_month] <= current_row_first_date_of_month
        && your_table_name[is_initial_opening_of_finyear] <> 1 
    )
) + 0

这是最终输出-

© www.soinside.com 2019 - 2024. All rights reserved.