Заменить процент значений в столбце другим - PullRequest
0 голосов
/ 28 февраля 2019

У меня каверзная проблема, может быть, один из вас может помочь.

У меня есть столбец с несколькими различными значениями, одним из которых является «Недоступно».Я хотел бы создать вычисляемый столбец, заменив эти значения «Недоступно» четырьмя новыми значениями, скажем «Значение 1», «Значение 2» и т. Д., Распределенные поровну, т.е. 25% будет «Значение 1», 25% будетбыть "Value 2" и т. д. Я действительно ценю любую помощь, которую я могу получить.Я должен отметить, что мои данные хранятся в SSAS TDM, поэтому я не могу использовать редактор запросов.

Спасибо!

Ниже вы найдете некоторые данные испытаний и мои желаемые результаты.

Example = 
DATATABLE (
    "Value", STRING,
    {
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Not Available" },
        { "Bike" },
        { "Bike" },
        { "Bike" },
        { "Bike" },
        { "Skateboard" },
        { "Skateboard" },
        { "Skateboard" },
        { "Skateboard" },
        { "Skateboard" },
        { "Skateboard" },
        { "Snowboard" },
        { "Snowboard" },
        { "Snowboard" },
        { "Snowboard" },
        { "Snowboard" },
        { "Snowboard" },
        { "Penny Board" },
        { "Penny Board" },
        { "Penny Board" },
        { "BMX" },
        { "BMX" },
        { "BMX" }
    }
)

Желаемые результаты:

enter image description here

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Как и в другом ответе, я предполагаю, что у вас есть индексированная таблица замены.Я также предполагаю, что вы можете создать уникальный индекс для вашей таблицы Example (это отдельный вопрос).

Логика та же, но теперь как столбец, рассчитываемый DAX:

Value2 =
IF (
    Example[Value] = "Not Available",
    LOOKUPVALUE (
        'Replace'[Value],
        'Replace'[Index], MOD ( Example[Index], COUNTROWS ( 'Replace' ) )
    ),
    Example[Value]
)
0 голосов
/ 28 февраля 2019

Я бы предпочел сделать это в редакторе запросов, поскольку там проще создавать индексные столбцы.

Убедитесь, что обе ваши таблицы загружены в редактор запросов, таблица замены, Replace.

let
    Source = Table.FromRows({{"Value1"},{"Value2"},{"Value3"},{"Value4"}},{"Value"}),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1)
in
    #"Added Index"

И таблица вашего примера.

  1. Добавьте индекс к таблице вашего примера.
  2. Преобразуйте столбец индекса, взяв по модулю число строк Replace (в данном случае - 4).
  3. Объединить Replace с Example, совпадающими по индексу.
  4. Развернуть столбец Value до Value.1.
  5. Добавьте пользовательский столбец, чтобы выбрать, какой из них использовать.
  6. Очистить.Удалите все столбцы, которые вы не хотите хранить.

Вот код M для запроса:

let
    Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45W8ssvUXAsS8zMSUzKSVWK1RkuIk6Z2QQZwdmJJalJ+YlFKVTn5uWXU5sXkJqXV6ngRDTfyTcCk44FAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type text) meta [Serialized.Text = true]) in type table [Value = _t]),
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Value", type text}}),
    #"Added Index" = Table.AddIndexColumn(#"Changed Type", "Index", 0, 1),
    #"Calculated Modulo" = Table.TransformColumns(#"Added Index", {{"Index", each Number.Mod(_, Table.RowCount(Replace)), type number}}),
    #"Merged Queries" = Table.NestedJoin(#"Calculated Modulo",{"Index"},Replace,{"Index"},"Replace",JoinKind.LeftOuter),
    #"Expanded Replace" = Table.ExpandTableColumn(#"Merged Queries", "Replace", {"Value"}, {"Value.1"}),
    #"Added Custom" = Table.AddColumn(#"Expanded Replace", "Value2", each if [Value] = "Not Available" then [Value.1] else [Value], type text),
    #"Removed Columns" = Table.RemoveColumns(#"Added Custom",{"Index", "Value.1"})
in
    #"Removed Columns"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...