Как получить имена столбцов в Excel - PullRequest
0 голосов
/ 19 июня 2020

В настоящее время я работаю над преобразованием таблицы Excel с> 100 вычисляемыми столбцами в таблицу DAX с аналогичными вычисляемыми столбцами.

Формула Excel относится к столбцам по их координатам столбца, например sum = A2 + B2

, тогда как DAX ссылается на имя столбца в формуле, например, sum = Principal + Interest

Теперь, когда я пытаюсь преобразовать версию excel для sum = A2 + B2, есть ли какой-нибудь умный способ для мне, чтобы узнать A = Принципал и B = Интерес в электронной таблице.

Я говорю о таблице, которая имеет> 50 невычисляемых столбцов и> 100 вычисляемых столбцов, которые необходимо преобразовать в сопоставимую модель DAX. Каждый раз, когда я просматриваю формулу для вычисляемых столбцов в Excel, например,

Интерес = = ЕСЛИ (И (AR7 = «Ожидает», ИЛИ (V7 = «Завершено», V7 = «Утверждено», LEFT ( V7,4) = "OPEN")), IF (U7 * 1> 0, U7 * 1, N7) / VLOOKUP (F7, Tax! A: B, 2,0), 0)

I нужно go туда и обратно в таблице, чтобы узнать, каковы соответствующие столбцы для каждой координаты в этой.

Есть ли какой-нибудь умный способ узнать, какие имена столбцов соответствуют какой координате столбца в приведенная выше формула, например AR = Статус, V = Заявка, U = Сумма .....

Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 19 июня 2020

Спасибо всем. Думаю, мне удалось решить эту проблему с помощью Power query. Следующее генерирует таблицу для таблицы excel со столбцами из A-ZZ и их соответствующими координатами.

Имя таблицы - Query1

let
Source = {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"},
#"Converted to Table" = Table.FromList(Source, Splitter.SplitByNothing(), null, null, ExtraValues.Error),
#"Added Custom" = Table.AddColumn(#"Converted to Table", "Custom", each {"A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z"}),
#"Expanded Custom" = Table.ExpandListColumn(#"Added Custom", "Custom"),
#"Inserted Merged Column" = Table.AddColumn(#"Expanded Custom", "Merged", each Text.Combine({[Column1], [Custom]}, ""), type text),
#"Removed Columns" = Table.RemoveColumns(#"Inserted Merged Column",{"Column1", "Custom"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Merged", "Column1"}}),
Custom1 = #"Converted to Table"&#"Renamed Columns",
#"Added Index" = Table.AddIndexColumn(Custom1, "Index", 1, 1) in
#"Added Index"

Теперь, если у меня есть таблица, подобная следующей, я запускаю Синтаксис COLUMN в моих столбцах источника данных, который дает номер столбца, и я могу использовать предыдущую таблицу PQWRY для получения имен

sourcetable, затем

let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WUtLBQLE60UoupcnZCkCOe35+cSqQds4vB3EDMtNT8/OADI/8ouJUqAiIcs7ITM5OzQPrNQTyjYDYGIhNgNgUiM2A2FwpNhYA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t, Column7 = _t]),
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}}),
#"Removed Top Rows" = Table.Skip(#"Changed Type",1),
#"Transposed Table" = Table.Transpose(#"Removed Top Rows"),
#"Changed Type1" = Table.TransformColumnTypes(#"Transposed Table",{{"Column2", Int64.Type}}),
#"Merged Queries" = Table.NestedJoin(#"Changed Type1", {"Column2"}, Query1, {"Index"}, "Query1", JoinKind.LeftOuter),
#"Expanded Query1" = Table.ExpandTableColumn(#"Merged Queries", "Query1", {"Column1"}, {"Column1.1"}),
#"Removed Columns" = Table.RemoveColumns(#"Expanded Query1",{"Column2"}),
#"Renamed Columns" = Table.RenameColumns(#"Removed Columns",{{"Column1.1", "Alphabetical_Coordinate"}}) in
#"Renamed Columns"

что дает мне это result

0 голосов
/ 19 июня 2020

Вы можете использовать VBA и предыдущий член объекта диапазона, чтобы получить это. Это будет работать для всего на текущем листе. Я не смог забрать Tax!A:B и у меня не было времени смотреть дальше. Хотя это немного неполно, я по крайней мере хотел дать этот ответ как очень хорошее начало

Sub formulaByField()

    Dim formula As String
    formula = Selection.formula
    Debug.Print formula

    Dim p As Range

    For Each p In Selection.Precedents
        'Debug.Print p.Address(False, False)
        'Debug.Print Selection.Parent.Cells(1, p.Column).Value
        formula = Replace(formula, p.Address(False, False), Selection.Parent.Cells(1, p.Column).Value)
    Next

    Debug.Print formula

End Sub

Код, основанный на этой настройке:

enter image description here

Выход

=IF(AND(A7="Pending",OR(B7="Completed",C7="Approved", LEFT(C7,4)="OPEN")),IF(D7*1>0,U7*1,E7)/VLOOKUP(F7,Tax!A:B,2,0),0)
=IF(AND(Duck="Pending",OR(Goose="Completed",Cow="Approved", LEFT(Cow,4)="OPEN")),IF(Pigeon*1>0,*1,Horse)/VLOOKUP(Pig,Tax!A:B,2,0),0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...