从在行值前添加“@”前缀的 Excel 约定切换到 DAX

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

我有一个包含 43,000 行的总账表 (FCT_GL_Details),其中包含我想要合并到跟踪余额 (FCT_GL_TB) 中的交易,按“yyyy”格式的分行、账户、子账户、finYear、“mm”格式的 finMonth、PeriodID 分组(是“yyyymm”中的 FinYearFinMonth,然后我想对 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.