【问题标题】:DAX Count new and lost Customers per DayDAX 每天统计新客户和流失客户
【发布时间】:2021-07-29 12:41:01
【问题描述】:

我有一个简单的表格,每天向我展示我们的活跃客户。结构如下:

Date    Customer
01.01.2021  AA
01.01.2021  BB
01.01.2021  CC
02.01.2021  AA
02.01.2021  BB
02.01.2021  CC
03.01.2021  AA
03.01.2021  BB
03.01.2021  CC
03.01.2021  DD

现在我想要一个显示每天新客户和流失客户数量的折线图。 您将如何使用 DAX 来做到这一点?

【问题讨论】:

    标签: powerbi dax


    【解决方案1】:

    在给定结构的情况下,如果您想计算给定日期的gain\lossprevious day 完全相关,则需要首先创建X Axis,例如这是所有的日期。我已经用日历表解决了它

    Table
    VAR _1 =
        ADDCOLUMNS (
            'fact',
            "lastDayofMonth",
                CALCULATE (
                    MAXX (
                        FILTER ( 'calendar', 'calendar'[Calendar_Date] = MAX ( 'fact'[Date] ) ),
                        'calendar'[Last_Day_in_Month]
                    )
                )
        )
    VAR _2 =
        GENERATEALL (
            _1,
            DATESBETWEEN ( 'calendar'[Calendar_Date], [Date], [lastDayofMonth] )
        )
    VAR _3 =
        ADDCOLUMNS (
            _2,
            "prev",
                MAXX (
                    FILTER (
                        _2,
                        EARLIER ( [Cust] ) = [Cust]
                            && EARLIER ( [Calendar_Date] ) > [Calendar_Date]
                    ),
                    [Cust]
                )
        )
    VAR _4 =
        ADDCOLUMNS (
            ADDCOLUMNS (
                _3,
                "gain",
                    SWITCH ( TRUE (), [prev] = BLANK () && [Cust] <> BLANK (), 1, 0 )
            ),
            "loss",
                SWITCH ( TRUE (), [prev] <> BLANK () && [Cust] = BLANK (), 1, 0 )
        )
    RETURN
        _4
    

    然后您可以创建一个度量来显示每天的收益\损失计数

    _gain:=
    VAR _1 =
        CALCULATE ( SUMX ( FILTER ( 'Table', 'Table'[gain] = 1 ), 'Table'[gain] ) )
    VAR _2 =
        IF ( ISBLANK ( _1 ) = TRUE (), 0, _1 )
    RETURN
        _2
        
    
    _loss:=
    VAR _1 =
        CALCULATE (
            SUM ( 'Table'[loss] ),
            FILTER ( VALUES ( 'Table'[loss] ), 'Table'[loss] = 1 )
        )
    VAR _2 =
        IF ( ISBLANK ( _1 ) = TRUE (), 0, _1 )
    RETURN
        _2  
    

    它依赖于具有最小结构的日历表,如下所示

    Calendar_Date Calendar_Year Calendar_Month Calendar_Day First_Day_in_Month Last_Day_in_Month
    1/1/2021 2021 1 1 1/1/2021 1/31/2021

    【讨论】:

      【解决方案2】:

      您可以在 Power Query 编辑器 中进行一些转换,并从源表创建一个新表。输出如下-

      从上表中,您可以轻松创建所需的折线图。如果我猜到您的表名“your_source_table_name”,只需使用下面的高级编辑器代码来创建新表。请记住,您必须使用您的源表名更改以下代码中的表名。

      let
          Source = #"your_source_table_name",
          #"Removed Other Columns" = Table.SelectColumns(Source,{"Date", "Customer"}),
          #"Changed Type" = Table.TransformColumnTypes(#"Removed Other Columns",{{"Date", type date}, {"Customer", type text}}),
          #"Grouped Rows" = Table.Group(#"Changed Type", {"Date"}, {{"Count", each Table.RowCount(_), Int64.Type}}),
          #"Sorted Rows" = Table.Sort(#"Grouped Rows",{{"Date", Order.Ascending}}),
          #"Added Custom" = Table.AddColumn(#"Sorted Rows", "Custom", each Date.AddDays([Date] ,1)),
          #"Merged Queries" = Table.NestedJoin(#"Added Custom", {"Date"}, #"Added Custom", {"Custom"}, "Added Custom", JoinKind.LeftOuter),
          #"Expanded Added Custom" = Table.ExpandTableColumn(#"Merged Queries", "Added Custom", {"Count"}, {"Added Custom.Count"}),
          #"Removed Columns" = Table.RemoveColumns(#"Expanded Added Custom",{"Custom"}),
          #"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Added Custom.Count", "previous_day_count"}}),
          #"Replaced Value" = Table.ReplaceValue(#"Renamed Columns",null,0,Replacer.ReplaceValue,{"previous_day_count"}),
          #"Added Custom1" = Table.AddColumn(#"Replaced Value", "loss", each if [Count] < [previous_day_count] then [previous_day_count] - [Count] else 0),
          #"Added Custom2" = Table.AddColumn(#"Added Custom1", "gain", each if [Count] > [previous_day_count] then [Count] - [previous_day_count] else 0)
      in
          #"Added Custom2"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-12
        • 2021-02-02
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-12
        相关资源
        最近更新 更多