Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在PowerBI中使用DAX创建动态子表_Powerbi_Dax_Powerquery_Powerbi Desktop_Powerbi Datasource - Fatal编程技术网

如何在PowerBI中使用DAX创建动态子表

如何在PowerBI中使用DAX创建动态子表,powerbi,dax,powerquery,powerbi-desktop,powerbi-datasource,Powerbi,Dax,Powerquery,Powerbi Desktop,Powerbi Datasource,我有这张桌子: Order | Total | FirstPayment | Months 1 | 1000 | 2021-01-01 | 2 2 | 600 | 2021-02-01 | 3 我需要创建另一个包含分期付款的表,如下所示: Month | Order | Value 2021-01-01 | 1 | 500 2021-02-01 | 1 | 500 2021-02-01 | 2 | 200 2021-

我有这张桌子:

Order | Total  | FirstPayment | Months
1     | 1000   | 2021-01-01   | 2
2     | 600    | 2021-02-01   | 3
我需要创建另一个包含分期付款的表,如下所示:

Month      | Order  | Value
2021-01-01 | 1      | 500
2021-02-01 | 1      | 500
2021-02-01 | 2      | 200
2021-03-01 | 2      | 200
2021-04-01 | 2      | 200
因此,我想为每个月的付款创建一个包含一行的子表


请,你能帮忙吗?

根据我的评论,我实际上会这样做:

Month      | Order  | Value
2021-01-01 | 1      | 500
2021-02-01 | 1      | 500
2021-02-01 | 2      | 200
2021-03-01 | 2      | 200
2021-04-01 | 2      | 200
创建跨越两个范围之间所有日期的日期表。实际上,您可以将其过滤为只包含相关日期以获得更好的性能,但我并不介意(这是一个表格公式):

创建一个度量值,显示相关日期的适当值:

Payment amount = 
SUMX (
    Payments,
    VAR d =
        DAY ( Payments[Date] )
    RETURN
        SUMX (
            FILTER (
                Orders,
                DAY ( Orders[FirstPayment] )
                    == d
                        && Payments[Date] <= EDATE ( Orders[FirstPayment], Orders[Months] -1 )
                        && Payments[Date] >= Orders[FirstPayment]
            ),
            [Total] / [Months]
        )
)
付款金额=
萨姆克斯(
付款,
变量d=
日期(付款[日期])
返回
萨姆克斯(
滤器(
命令,
日期(订单[首次付款])
==d
&&付款[日期]=订单[首次付款]
),
[总数]/[月份]
)
)
结果-基于订单表中的订单和付款表中的日期:

编辑

当然,也可以按你的要求去做。您必须将这两个公式组合起来才能创建这样的计算表(以下是选择“新建表”时应用的表公式):

分期付款=
选择列(
滤器(
交叉连接(
历法(
最低(订单[首次付款]),
MAXX(订单,EDATE(订单[首次付款],订单[月])
),
命令
),
[日期]>=[首次付款]
&&天([日期])=天([首次付款])
&&[日期]

实际上,我会为所有订单创建包含第一次和最后一次分期付款之间的所有日期的表,然后创建只显示相关日期值的度量值。感谢W.B。这将解决部分问题。但我需要显示分期付款记录。:/您可以这样做。诀窍是在日期表和每个da上使用SUMX检查并计算所有在该日期到期的订单的分期付款。它运行正常。非常感谢!
Installments =
SELECTCOLUMNS (
    FILTER (
        CROSSJOIN (
            CALENDAR (
                MIN ( Orders[FirstPayment] ),
                MAXX ( Orders, EDATE ( Orders[FirstPayment], Orders[Months] ) )
            ),
            Orders
        ),
        [Date] >= [FirstPayment]
            && DAY ( [Date] ) = DAY ( [FirstPayment] )
            && [Date]
                <= EDATE ( [FirstPayment], [Months] - 1 )
    ),
    "Date", [Date],
    "Order", [Order],
    "Value", [Total] / [Months]
)